Add gtest for Targeting class

Change-Id: I10d00d56561c52c479052d2e04630cc326091aa0
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
diff --git a/test/utest.cpp b/test/utest.cpp
new file mode 100644
index 0000000..d91004d
--- /dev/null
+++ b/test/utest.cpp
@@ -0,0 +1,100 @@
+/**
+ * Copyright © 2017 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <gtest/gtest.h>
+#include <experimental/filesystem>
+#include <fstream>
+#include <stdlib.h>
+#include "targeting.hpp"
+
+using namespace openpower::targeting;
+namespace fs = std::experimental::filesystem;
+
+constexpr auto masterDir = "/tmp";
+
+class TargetingTest : public ::testing::Test
+{
+    protected:
+
+        virtual void SetUp()
+        {
+            char dir[50];
+            strcpy(dir, masterDir);
+            strcat(dir, "/targetingXXXXXX");
+
+            auto path = mkdtemp(dir);
+            assert(path != nullptr);
+
+            _directory = path;
+        }
+
+        virtual void TearDown()
+        {
+            fs::remove_all(_directory);
+        }
+
+        std::string _directory;
+};
+
+
+TEST_F(TargetingTest, CreateTargets)
+{
+
+    //Test that we always create the first Target
+    {
+        Targeting targets{masterDir, _directory};
+        ASSERT_EQ(targets.size(), 1);
+
+        auto t = targets.begin();
+        ASSERT_EQ((*t)->getPos(), 0);
+
+        ASSERT_EQ((*t)->getPath(), masterDir);
+    }
+
+
+    //Test that we can create multiple Targets
+    {
+        //make some fake slave entries
+        std::ofstream(_directory + "/slave@01:00");
+        std::ofstream(_directory + "/slave@02:00");
+        std::ofstream(_directory + "/slave@03:00");
+        std::ofstream(_directory + "/slave@04:00");
+
+        Targeting targets{masterDir, _directory};
+
+        ASSERT_EQ(targets.size(), 5);
+
+        int i = 0;
+
+        for (const auto& t : targets)
+        {
+            std::ostringstream path;
+
+            ASSERT_EQ(t->getPos(), i);
+
+            if (0 == i)
+            {
+                path << masterDir;
+            }
+            else
+            {
+                path << _directory << "/slave@0" << i << ":00/raw";
+            }
+
+            ASSERT_EQ(t->getPath(), path.str());
+            i++;
+        }
+    }
+}