test: Add unit test cases for util

Change-Id: I75cc1c1642bd4160191853d6ebfa5427e7f534c3
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/Makefile.am b/Makefile.am
index f2a9174..003ba37 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -67,3 +67,5 @@
 	@mkdir -p `dirname $@`
 	$(SDBUSPLUSPLUS) -r $(srcdir) interface server-header xyz.openbmc_project.Network.IP.Create > $@
 	sed -i '5i #include \"xyz\/openbmc_project\/Network\/IP\/server.hpp\"' $@
+
+SUBDIRS = test
diff --git a/configure.ac b/configure.ac
index 93df373..0ddf0ad 100644
--- a/configure.ac
+++ b/configure.ac
@@ -82,5 +82,5 @@
 AC_DEFINE_UNQUOTED([NETWORK_CONF_DIR], ["$NETWORK_CONF_DIR"], [Network configuration directory])
 
 # Create configured output.
-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..5899847
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,18 @@
+AM_CPPFLAGS = -I${top_srcdir}
+
+TESTS = $(check_PROGRAMS)
+
+check_PROGRAMS = test
+
+test_SOURCES = \
+	test_util.cpp
+
+test_CPPFLAGS = -Igtest $(GTEST_CPPFLAGS) $(AM_CPPFLAGS)
+test_CXXFLAGS = $(PTHREAD_CFLAGS)
+
+test_LDFLAGS =	-lgtest_main -lgtest -lstdc++fs \
+				$(OESDK_TESTCASE_FLAGS) \
+				$(SYSTEMD_LIBS) \
+				$(SDBUSPLUS_LIBS)
+
+test_LDADD = $(top_builddir)/util.cpp
diff --git a/test/test_util.cpp b/test/test_util.cpp
new file mode 100644
index 0000000..d0888ca
--- /dev/null
+++ b/test/test_util.cpp
@@ -0,0 +1,89 @@
+#include <gtest/gtest.h>
+#include <netinet/in.h>
+#include "util.hpp"
+
+namespace phosphor
+{
+namespace network
+{
+
+class TestUtil : public testing::Test
+{
+    public:
+        TestUtil()
+        {
+            // Empty
+        }
+
+};
+
+TEST_F(TestUtil, ConvertV4MasktoPrefix)
+{
+    std::string mask = "255.255.255.0";
+    uint8_t prefix = toCidr(AF_INET, mask);
+    EXPECT_EQ(prefix, 24);
+
+    mask = "255.255.0.0";
+    prefix = toCidr(AF_INET, mask);
+    EXPECT_EQ(prefix, 16);
+
+    mask = "255.0.0.0";
+    prefix = toCidr(AF_INET, mask);
+    EXPECT_EQ(prefix, 8);
+
+    mask = "255.224.0.0";
+    prefix = toCidr(AF_INET, mask);
+    EXPECT_EQ(prefix, 11);
+
+    //Invalid Mask
+    mask = "255.0.255.0";
+    prefix = toCidr(AF_INET, mask);
+    EXPECT_EQ(prefix, 0);
+}
+
+TEST_F(TestUtil, convertV6MasktoPrefix)
+{
+    std::string mask = "ffff:ffff::";
+    uint8_t prefix = toCidr(AF_INET6, mask);
+    EXPECT_EQ(prefix, 32);
+
+    mask = "ffff:ffff:ffff::";
+    prefix = toCidr(AF_INET6, mask);
+    EXPECT_EQ(prefix, 48);
+
+    mask = "ffff:ffff:fc00::";
+    prefix = toCidr(AF_INET6, mask);
+    EXPECT_EQ(prefix, 38);
+
+    //Invalid Mask
+    mask = "ffff:0fff::";
+    prefix = toCidr(AF_INET6, mask);
+    EXPECT_EQ(prefix, 0);
+}
+
+TEST_F(TestUtil, isLinLocaladdress)
+{
+    std::string ipaddress = "fe80:fec0::";
+    EXPECT_TRUE(isLinkLocal(ipaddress));
+
+    ipaddress = "2000:4567:789::";
+    EXPECT_FALSE(isLinkLocal(ipaddress));
+
+    ipaddress = "2000:fe80::";
+    EXPECT_FALSE(isLinkLocal(ipaddress));
+}
+
+TEST_F(TestUtil, convertPrefixToMask)
+{
+    std::string mask = toMask(AF_INET, 24);
+    EXPECT_EQ(mask, "255.255.255.0");
+
+    mask = toMask(AF_INET, 8);
+    EXPECT_EQ(mask, "255.0.0.0");
+
+    mask = toMask(AF_INET, 27);
+    EXPECT_EQ(mask, "255.255.255.224");
+}
+
+}// namespce network
+}// namespace phosphor