diff --git a/.gitignore b/.gitignore
index 757923d..3cfe4c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,6 @@
 ltmain.sh
 missing
 stamp-h1
+test-driver
+*.log
+utest*
diff --git a/Makefile.am b/Makefile.am
index f1af749..ef50fa1 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -10,3 +10,5 @@
 
 openpower_proc_control_LDFLAGS = $(PHOSPHOR_LOGGING_LIBS) -lstdc++fs
 openpower_proc_control_CXXFLAGS = $(PHOSPHOR_LOGGING_CFLAGS)
+
+SUBDIRS = test
diff --git a/configure.ac b/configure.ac
index 7abbefb..b0b9e85 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,7 +16,28 @@
 # Checks for library functions
 LT_INIT
 
+# Check/set gtest specific functions.
+AX_PTHREAD([GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=1"],[GTEST_CPPFLAGS="-DGTEST_HAS_PTHREAD=0"])
+AC_SUBST(GTEST_CPPFLAGS)
+AC_ARG_ENABLE([oe-sdk],
+    AS_HELP_STRING([--enable-oe-sdk], [Link testcases absolutely against OE SDK so they can be ran within it.])
+)
+AC_ARG_VAR(OECORE_TARGET_SYSROOT,
+    [Path to the OE SDK SYSROOT])
+AS_IF([test "x$enable_oe_sdk" == "xyes"],
+    AS_IF([test "x$OECORE_TARGET_SYSROOT" == "x"],
+          AC_MSG_ERROR([OECORE_TARGET_SYSROOT must be set with --enable-oe-sdk])
+    )
+    AC_MSG_NOTICE([Enabling OE-SDK at $OECORE_TARGET_SYSROOT])
+    [
+        testcase_flags="-Wl,-rpath,\${OECORE_TARGET_SYSROOT}/lib"
+        testcase_flags="${testcase_flags} -Wl,-rpath,\${OECORE_TARGET_SYSROOT}/usr/lib"
+        testcase_flags="${testcase_flags} -Wl,-dynamic-linker,`find \${OECORE_TARGET_SYSROOT}/lib/ld-*.so | sort -r -n | head -n1`"
+    ]
+    AC_SUBST([OESDK_TESTCASE_FLAGS], [$testcase_flags])
+)
+
 PKG_CHECK_MODULES([PHOSPHOR_LOGGING], [phosphor-logging],, [AC_MSG_ERROR([Could not find phosphor-logging...openbmc/phosphor-logging package required])])
 
-AC_CONFIG_FILES([Makefile])
+AC_CONFIG_FILES([Makefile test/Makefile])
 AC_OUTPUT
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 0000000..ce78754
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,16 @@
+AM_CPPFLAGS = -I$(top_srcdir)
+
+# Run all 'check' test programs
+TESTS = $(check_PROGRAMS)
+
+# Basic test suite for hostcontrol interfaces
+check_PROGRAMS = utest
+utest_CPPFLAGS = -Igtest $(GTEST_CPPFLAGS) $(AM_CPPFLAGS) \
+	$(PHOSPHOR_LOGGING_CFLAGS)
+
+utest_CXXFLAGS = $(PTHREAD_CFLAGS) $(PHOSPHOR_LOGGING_CFLAGS)
+utest_LDFLAGS = -lgtest_main -lgtest $(PTHREAD_LIBS) $(OESDK_TESTCASE_FLAGS) \
+	$(PHOSPHOR_LOGGING_LIBS) -lstdc++fs
+
+utest_SOURCES = utest.cpp
+utest_LDADD = $(top_srcdir)/targeting.cpp
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++;
+        }
+    }
+}
