Validate the client address
Address could be hostname or IPaddress,Address validation
is being done by calling the gethostbyname system function.
Change-Id: I7d7eecd164c471c80af0b440a4b541badd2f966f
Signed-off-by: Ratan Gupta <ratagupt@in.ibm.com>
diff --git a/test/Makefile.am.include b/test/Makefile.am.include
index 7926d09..f99ab24 100644
--- a/test/Makefile.am.include
+++ b/test/Makefile.am.include
@@ -29,10 +29,12 @@
test_notification_SOURCES = \
%reldir%/test_error_notification.cpp \
- %reldir%/test_snmp_conf_manager.cpp
+ %reldir%/test_snmp_conf_manager.cpp \
+ %reldir%/test_snmp_util.cpp
test_notification_LDADD = $(top_builddir)/phosphor_network_snmpconf-snmp_conf_manager.o \
$(top_builddir)/phosphor_network_snmpconf-snmp_client.o \
+ $(top_builddir)/phosphor_network_snmpconf-snmp_util.o \
$(top_builddir)/xyz/openbmc_project/Network/Client/Create/phosphor_network_snmpconf-server.o
check_PROGRAMS += %reldir%/notification
diff --git a/test/test_snmp_util.cpp b/test/test_snmp_util.cpp
new file mode 100644
index 0000000..e486b7a
--- /dev/null
+++ b/test/test_snmp_util.cpp
@@ -0,0 +1,71 @@
+#include <gtest/gtest.h>
+#include <netinet/in.h>
+#include "snmp_util.hpp"
+#include <xyz/openbmc_project/Common/error.hpp>
+
+namespace phosphor
+{
+namespace network
+{
+namespace snmp
+{
+
+using InternalFailure =
+ sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
+
+TEST(TestUtil, IpValidation)
+{
+ // valid IPv4 address
+ std::string ipaddress = "0.0.0.0";
+ EXPECT_EQ(ipaddress, resolveAddress(ipaddress));
+
+ ipaddress = "9.3.185.83";
+ EXPECT_EQ(ipaddress, resolveAddress(ipaddress));
+
+ // Invalid IPv4 address
+ ipaddress = "9.3.185.a";
+ EXPECT_THROW(resolveAddress(ipaddress), InternalFailure);
+
+ ipaddress = "9.3.a.83";
+ EXPECT_THROW(resolveAddress(ipaddress), InternalFailure);
+
+ ipaddress = "x.x.x.x";
+ EXPECT_THROW(resolveAddress(ipaddress), InternalFailure);
+
+ // valid IPv6 address
+ ipaddress = "0:0:0:0:0:0:0:0";
+ EXPECT_EQ("::", resolveAddress(ipaddress));
+
+ ipaddress = "1:0:0:0:0:0:0:8";
+ EXPECT_EQ("1::8", resolveAddress(ipaddress));
+
+ ipaddress = "1::8";
+ EXPECT_EQ(ipaddress, resolveAddress(ipaddress));
+
+ ipaddress = "0:0:0:0:0:FFFF:204.152.189.116";
+ EXPECT_EQ("::ffff:204.152.189.116", resolveAddress(ipaddress));
+
+ ipaddress = "::ffff:204.152.189.116";
+ EXPECT_EQ(ipaddress, resolveAddress(ipaddress));
+
+ ipaddress = "a:0:0:0:0:FFFF:204.152.189.116";
+ EXPECT_EQ("a::ffff:cc98:bd74", resolveAddress(ipaddress));
+
+ // Invalid IPv6 address
+ ipaddress = "abcd::xyz::";
+ EXPECT_THROW(resolveAddress(ipaddress), InternalFailure);
+
+ // resolve the local host
+ ipaddress = "localhost";
+ auto isLocal = false;
+ auto addr = resolveAddress(ipaddress);
+ if (addr == "127.0.0.1" || addr == "::1")
+ {
+ isLocal = true;
+ }
+ EXPECT_TRUE(isLocal);
+}
+
+} // namespae snmp
+} // namespce network
+} // namespace phosphor