Implement the INI config parser

Parse the systemd.network file
to get the configuration parameter.

Change-Id: Ic9c15a46158d2f1c0948e6eca729663e87051491
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/test/test_config_parser.cpp b/test/test_config_parser.cpp
new file mode 100644
index 0000000..a07390b
--- /dev/null
+++ b/test/test_config_parser.cpp
@@ -0,0 +1,98 @@
+#include <gtest/gtest.h>
+
+#include "config_parser.hpp"
+
+#include "xyz/openbmc_project/Common/error.hpp"
+#include <phosphor-logging/elog-errors.hpp>
+
+#include "config.h"
+#include <exception>
+#include <stdexcept>
+#include <fstream>
+
+namespace phosphor
+{
+namespace network
+{
+
+class TestConfigParser : public testing::Test
+{
+    public:
+        config::Parser parser;
+        TestConfigParser()
+        {
+            remove("/tmp/eth0.network");
+            std::ofstream filestream("/tmp/eth0.network");
+
+            filestream << "[Match]\nName=eth0\n" <<
+                          "[Network]\nDHCP=true\n[DHCP]\nClientIdentifier= mac\n";
+            filestream.close();
+            parser.setFile("/tmp/eth0.network");
+        }
+
+        bool isValueFound(const std::vector<std::string>& values,
+                          const std::string& expectedValue)
+        {
+            for (const auto& value : values)
+            {
+                if (expectedValue == value)
+                {
+                    return  true;
+                }
+            }
+            return false;
+        }
+};
+
+TEST_F(TestConfigParser, ReadConfigDataFromFile)
+{
+    auto values = parser.getValues("Network", "DHCP");
+    std::string expectedValue = "true";
+    bool found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    values = parser.getValues("DHCP", "ClientIdentifier");
+    expectedValue = "mac";
+    found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    values = parser.getValues("Match", "Name");
+    expectedValue = "eth0";
+    found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+}
+
+TEST_F(TestConfigParser, SectionNotExist)
+{
+    using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+    bool caughtException = false;
+    try
+    {
+        parser.getValues("abc", "ipaddress");
+    }
+    catch (const std::exception& e)
+    {
+        caughtException = true;
+    }
+    EXPECT_EQ(true, caughtException);
+}
+
+TEST_F(TestConfigParser, KeyNotFound)
+{
+    using namespace sdbusplus::xyz::openbmc_project::Common::Error;
+    bool caughtException = false;
+    try
+    {
+        parser.getValues("Network", "abc");
+    }
+    catch (const std::exception& e)
+    {
+        caughtException = true;
+    }
+    EXPECT_EQ(true, caughtException);
+    remove("/tmp/eth0.network");
+}
+
+}//namespace network
+}//namespace phosphor
+