Add test cases for VlanInterface
Change-Id: Ifd2507b12f39c44857af8bcf6ea57f7d1daa7ac3
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/test/Makefile.am b/test/Makefile.am
index 7ccb4e1..f1d11d4 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -8,10 +8,9 @@
test_util.cpp \
mock_syscall.cpp \
test_network_manager.cpp \
- test_config_parser.cpp
-# #TODO openbmc/openbmc#2084 \
-# Disable due to test case failure
-# test_ethernet_interface.cpp
+ test_ethernet_interface.cpp \
+ test_config_parser.cpp \
+ test_vlan_interface.cpp
test_CPPFLAGS = -Igtest $(GTEST_CPPFLAGS) $(AM_CPPFLAGS)
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