Add test cases for VlanInterface

Change-Id: Ifd2507b12f39c44857af8bcf6ea57f7d1daa7ac3
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/test/test_vlan_interface.cpp b/test/test_vlan_interface.cpp
new file mode 100644
index 0000000..9711a1a
--- /dev/null
+++ b/test/test_vlan_interface.cpp
@@ -0,0 +1,199 @@
+#include "network_manager.hpp"
+#include "mock_syscall.hpp"
+#include "config_parser.hpp"
+#include "vlan_interface.hpp"
+#include "ipaddress.hpp"
+
+#include <gtest/gtest.h>
+#include <sdbusplus/bus.hpp>
+
+#include <net/if.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <exception>
+#include <experimental/filesystem>
+
+namespace phosphor
+{
+namespace network
+{
+
+namespace fs = std::experimental::filesystem;
+
+class TestVlanInterface : public testing::Test
+{
+    public:
+
+        sdbusplus::bus::bus bus;
+        Manager manager;
+        EthernetInterface interface;
+        std::string confDir;
+        TestVlanInterface()
+            : bus(sdbusplus::bus::new_default()),
+              manager(bus, "/xyz/openbmc_test/network", "/tmp"),
+              interface(bus, "/xyz/openbmc_test/network/test0", false, manager)
+
+        {
+            setConfDir();
+        }
+
+        ~TestVlanInterface()
+        {
+            if(confDir != "")
+            {
+                fs::remove_all(confDir);
+            }
+        }
+
+        void setConfDir()
+        {
+            char tmp[] = "/tmp/VlanInterface.XXXXXX";
+            confDir = mkdtemp(tmp);
+            manager.setConfDir(confDir);
+        }
+
+        void createVlan(VlanId id)
+        {
+            interface.createVLAN(id);
+        }
+
+        void deleteVlan(const std::string& interfaceName)
+        {
+            interface.deleteVLANObject(interfaceName);
+        }
+
+        int countIPObjects()
+        {
+            return interface.getAddresses().size();
+        }
+
+        bool isIPObjectExist(const std::string& ipaddress)
+        {
+            auto address = interface.getAddresses().find(ipaddress);
+            if (address == interface.getAddresses().end())
+            {
+                return false;
+            }
+            return true;
+
+        }
+
+        bool deleteIPObject(const std::string& ipaddress)
+        {
+            auto address = interface.getAddresses().find(ipaddress);
+            if (address == interface.getAddresses().end())
+            {
+                return false;
+            }
+            address->second->delete_();
+            return true;
+        }
+
+        void createIPObject(IP::Protocol addressType,
+                            const std::string& ipaddress,
+                            uint8_t subnetMask,
+                            const std::string& gateway)
+        {
+            interface.iP(addressType,
+                         ipaddress,
+                         subnetMask,
+                         gateway
+                        );
+
+        }
+
+        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(TestVlanInterface, createVLAN)
+{
+    createVlan(50);
+    fs::path filePath = confDir;
+    filePath /= "test0.50.netdev";
+
+    config::Parser parser(filePath.string());
+    auto values = parser.getValues("NetDev", "Name");
+    std::string expectedValue = "test0.50";
+    bool found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    values = parser.getValues("NetDev", "Kind");
+    expectedValue = "vlan";
+    found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    values = parser.getValues("VLAN", "Id");
+    expectedValue = "50";
+    found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+}
+
+TEST_F(TestVlanInterface, deleteVLAN)
+{
+    createVlan(50);
+    deleteVlan("test0.50");
+    bool fileFound = false;
+
+    fs::path filePath = confDir;
+    filePath /= "test0.50.netdev";
+    if (fs::is_regular_file(filePath.string()))
+    {
+       fileFound = true;
+    }
+    EXPECT_EQ(fileFound, false);
+}
+
+TEST_F(TestVlanInterface, createMultipleVLAN)
+{
+    createVlan(50);
+    createVlan(60);
+
+    fs::path filePath = confDir;
+    filePath /= "test0.50.netdev";
+    config::Parser parser(filePath.string());
+    auto values = parser.getValues("NetDev", "Name");
+    std::string expectedValue = "test0.50";
+    bool found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    values = parser.getValues("NetDev", "Kind");
+    expectedValue = "vlan";
+    found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    values = parser.getValues("VLAN", "Id");
+    expectedValue = "50";
+    found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    filePath = confDir;
+    filePath /= "test0.60.netdev";
+    parser.setFile(filePath.string());
+    values = parser.getValues("NetDev", "Name");
+    expectedValue = "test0.60";
+    found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    values = parser.getValues("VLAN", "Id");
+    expectedValue = "60";
+    found = isValueFound(values, expectedValue);
+    EXPECT_EQ(found, true);
+
+    deleteVlan("test0.50");
+    deleteVlan("test0.60");
+}
+
+}// namespce network
+}// namespace phosphor