From 5ed18a2531d19f84d5fb2cd414930ea6f0c87e45 Mon Sep 17 00:00:00 2001 From: Qi Luo Date: Thu, 15 Sep 2016 17:57:54 -0700 Subject: [PATCH 1/4] Add unit test --- Makefile.am | 4 +++ configure.ac | 9 +++++++ tests/Makefile.am | 21 +++++++++++++++ tests/swssnet_ut.cpp | 64 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+) create mode 100644 tests/Makefile.am create mode 100644 tests/swssnet_ut.cpp diff --git a/Makefile.am b/Makefile.am index 6fe8c09e357..20553983e15 100644 --- a/Makefile.am +++ b/Makefile.am @@ -3,3 +3,7 @@ SUBDIRS = fpmsyncd neighsyncd intfsyncd portsyncd orchagent swssconfig if HAVE_LIBTEAM SUBDIRS += teamsyncd endif + +if GTEST +SUBDIRS += tests +endif diff --git a/configure.ac b/configure.ac index 9b26acfa5e9..d0f537795ad 100644 --- a/configure.ac +++ b/configure.ac @@ -29,6 +29,14 @@ AC_ARG_ENABLE(debug, esac],[debug=false]) AM_CONDITIONAL(DEBUG, test x$debug = xtrue) +AC_ARG_ENABLE(gtest, +[ --enable-gtest Compile with googletest flags], +[case "${enableval}" in + yes) gtest=true ;; + no) gtest=false ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-gtest) ;; +esac],[gtest=false]) +AM_CONDITIONAL(GTEST, test x$gtest = xtrue) CFLAGS_COMMON="-std=c++11 -Wall -fPIC -Wno-write-strings -I/usr/include/libnl3 -I/usr/include/swss" AC_SUBST(CFLAGS_COMMON) @@ -42,6 +50,7 @@ AC_CONFIG_FILES([ portsyncd/Makefile teamsyncd/Makefile swssconfig/Makefile + tests/Makefile ]) AC_OUTPUT diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 00000000000..72a005e97de --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,21 @@ +CFLAGS_SAI = -I /usr/include/sai +INCLUDES = -I ../orchagent + +bin_PROGRAMS = tests + +if DEBUG +DBGFLAGS = -ggdb -DDEBUG +else +DBGFLAGS = -g -DNDEBUG +endif + +CFLAGS_GTEST = +LDADD_GTEST = + +tests_SOURCES = swssnet_ut.cpp + +tests_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI) +tests_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI) +tests_LDADD = $(LDADD_GTEST) -lnl-genl-3 -lhiredis -lhiredis -lpthread \ + -lswsscommon -lswsscommon -lgtest -lgtest_main + \ No newline at end of file diff --git a/tests/swssnet_ut.cpp b/tests/swssnet_ut.cpp new file mode 100644 index 00000000000..7c96ff28ce1 --- /dev/null +++ b/tests/swssnet_ut.cpp @@ -0,0 +1,64 @@ +#include +#include +#include +#include +#include "swssnet.h" + +using namespace std; +using namespace swss; + +TEST(IpAddress, copy) +{ + IpAddress ip("2001:4898:f0:f153:357c:77b2:49c9:627c"); + sai_ip_address_t dst; + copy(dst, ip); + EXPECT_EQ(dst.addr_family, SAI_IP_ADDR_FAMILY_IPV6); + + char buf[INET6_ADDRSTRLEN]; + inet_ntop(AF_INET6, dst.addr.ip6, buf, INET6_ADDRSTRLEN); + EXPECT_STREQ(buf, "2001:4898:f0:f153:357c:77b2:49c9:627c"); +} + +TEST(IpPrefix, copy) +{ + IpPrefix ip("2001:4898:f0:f153:357c:77b2:49c9:627c/27"); + sai_ip_prefix_t dst; + copy(dst, ip); + EXPECT_EQ(dst.addr_family, SAI_IP_ADDR_FAMILY_IPV6); + + char buf[INET6_ADDRSTRLEN]; + inet_ntop(AF_INET6, dst.addr.ip6, buf, INET6_ADDRSTRLEN); + EXPECT_STREQ(buf, "2001:4898:f0:f153:357c:77b2:49c9:627c"); + inet_ntop(AF_INET6, dst.mask.ip6, buf, INET6_ADDRSTRLEN); + printf("%s\n", buf); + EXPECT_STREQ(buf, "ffff:ffe0::"); +} + +TEST(IpAddress, copy2) +{ + IpAddress ip("2001:4898:f0:f153:357c:77b2:49c9:627c"); + sai_ip_prefix_t dst; + copy(dst, ip); + EXPECT_EQ(dst.addr_family, SAI_IP_ADDR_FAMILY_IPV6); + + char buf[INET6_ADDRSTRLEN]; + inet_ntop(AF_INET6, dst.addr.ip6, buf, INET6_ADDRSTRLEN); + EXPECT_STREQ(buf, "2001:4898:f0:f153:357c:77b2:49c9:627c"); + inet_ntop(AF_INET6, dst.mask.ip6, buf, INET6_ADDRSTRLEN); + EXPECT_STREQ(buf, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"); +} + +TEST(sai_ip_prefix_t, subnet) +{ + sai_ip_prefix_t dst, src; + src.addr_family = SAI_IP_ADDR_FAMILY_IPV6; + inet_pton(AF_INET6, "2001:4898:f0:f153:357c:77b2:49c9:627c", src.addr.ip6); + inet_pton(AF_INET6, "ffff:ffe0::", src.mask.ip6); + + subnet(dst, src); + char buf[INET6_ADDRSTRLEN]; + inet_ntop(AF_INET6, dst.addr.ip6, buf, INET6_ADDRSTRLEN); + EXPECT_STREQ(buf, "2001:4880::"); + inet_ntop(AF_INET6, dst.mask.ip6, buf, INET6_ADDRSTRLEN); + EXPECT_STREQ(buf, "ffff:ffe0::"); +} \ No newline at end of file From bcc054d25c3cbf14f4e26d37624aa29702374911 Mon Sep 17 00:00:00 2001 From: Qi Luo Date: Wed, 14 Sep 2016 10:58:10 -0700 Subject: [PATCH 2/4] Remove namespace modifier --- fpmsyncd/routesync.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fpmsyncd/routesync.cpp b/fpmsyncd/routesync.cpp index 88014b87014..e8303a120a2 100644 --- a/fpmsyncd/routesync.cpp +++ b/fpmsyncd/routesync.cpp @@ -53,7 +53,7 @@ void RouteSync::onMsg(int nlmsg_type, struct nl_object *obj) { case RTN_BLACKHOLE: { - std::vector fvVector; + vector fvVector; FieldValueTuple fv("blackhole", "true"); fvVector.push_back(fv); m_routeTable.set(destipprefix, fvVector); @@ -114,7 +114,7 @@ void RouteSync::onMsg(int nlmsg_type, struct nl_object *obj) } } - std::vector fvVector; + vector fvVector; FieldValueTuple nh("nexthop", nexthops); FieldValueTuple idx("ifname", ifnames); fvVector.push_back(nh); From a0f01e6315e97580922a6df767108af12b878caa Mon Sep 17 00:00:00 2001 From: Qi Luo Date: Thu, 15 Sep 2016 18:11:46 -0700 Subject: [PATCH 3/4] Refine test --- tests/Makefile.am | 1 - tests/swssnet_ut.cpp | 9 ++++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/Makefile.am b/tests/Makefile.am index 72a005e97de..d96e3f5c3ef 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -18,4 +18,3 @@ tests_CFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAG tests_CPPFLAGS = $(DBGFLAGS) $(AM_CFLAGS) $(CFLAGS_COMMON) $(CFLAGS_GTEST) $(CFLAGS_SAI) tests_LDADD = $(LDADD_GTEST) -lnl-genl-3 -lhiredis -lhiredis -lpthread \ -lswsscommon -lswsscommon -lgtest -lgtest_main - \ No newline at end of file diff --git a/tests/swssnet_ut.cpp b/tests/swssnet_ut.cpp index 7c96ff28ce1..99fd321c4cb 100644 --- a/tests/swssnet_ut.cpp +++ b/tests/swssnet_ut.cpp @@ -7,7 +7,7 @@ using namespace std; using namespace swss; -TEST(IpAddress, copy) +TEST(swssnet, copy1) { IpAddress ip("2001:4898:f0:f153:357c:77b2:49c9:627c"); sai_ip_address_t dst; @@ -19,7 +19,7 @@ TEST(IpAddress, copy) EXPECT_STREQ(buf, "2001:4898:f0:f153:357c:77b2:49c9:627c"); } -TEST(IpPrefix, copy) +TEST(swssnet, copy2) { IpPrefix ip("2001:4898:f0:f153:357c:77b2:49c9:627c/27"); sai_ip_prefix_t dst; @@ -30,11 +30,10 @@ TEST(IpPrefix, copy) inet_ntop(AF_INET6, dst.addr.ip6, buf, INET6_ADDRSTRLEN); EXPECT_STREQ(buf, "2001:4898:f0:f153:357c:77b2:49c9:627c"); inet_ntop(AF_INET6, dst.mask.ip6, buf, INET6_ADDRSTRLEN); - printf("%s\n", buf); EXPECT_STREQ(buf, "ffff:ffe0::"); } -TEST(IpAddress, copy2) +TEST(swssnet, copy3) { IpAddress ip("2001:4898:f0:f153:357c:77b2:49c9:627c"); sai_ip_prefix_t dst; @@ -48,7 +47,7 @@ TEST(IpAddress, copy2) EXPECT_STREQ(buf, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"); } -TEST(sai_ip_prefix_t, subnet) +TEST(swssnet, subnet) { sai_ip_prefix_t dst, src; src.addr_family = SAI_IP_ADDR_FAMILY_IPV6; From 0a19df67a975770cae98881771508479d9f66967 Mon Sep 17 00:00:00 2001 From: Qi Luo Date: Thu, 15 Sep 2016 18:25:38 -0700 Subject: [PATCH 4/4] Add more test cases for ipv4 --- tests/swssnet_ut.cpp | 73 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 64 insertions(+), 9 deletions(-) diff --git a/tests/swssnet_ut.cpp b/tests/swssnet_ut.cpp index 99fd321c4cb..cc137349a0f 100644 --- a/tests/swssnet_ut.cpp +++ b/tests/swssnet_ut.cpp @@ -7,25 +7,37 @@ using namespace std; using namespace swss; -TEST(swssnet, copy1) +TEST(swssnet, copy1_v6) { IpAddress ip("2001:4898:f0:f153:357c:77b2:49c9:627c"); sai_ip_address_t dst; copy(dst, ip); EXPECT_EQ(dst.addr_family, SAI_IP_ADDR_FAMILY_IPV6); - + char buf[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, dst.addr.ip6, buf, INET6_ADDRSTRLEN); EXPECT_STREQ(buf, "2001:4898:f0:f153:357c:77b2:49c9:627c"); } -TEST(swssnet, copy2) +TEST(swssnet, copy1_v4) +{ + IpAddress ip("10.23.45.126"); + sai_ip_address_t dst; + copy(dst, ip); + EXPECT_EQ(dst.addr_family, SAI_IP_ADDR_FAMILY_IPV4); + + char buf[INET6_ADDRSTRLEN]; + inet_ntop(AF_INET, &dst.addr.ip4, buf, INET_ADDRSTRLEN); + EXPECT_STREQ(buf, "10.23.45.126"); +} + +TEST(swssnet, copy2_v6) { IpPrefix ip("2001:4898:f0:f153:357c:77b2:49c9:627c/27"); sai_ip_prefix_t dst; copy(dst, ip); EXPECT_EQ(dst.addr_family, SAI_IP_ADDR_FAMILY_IPV6); - + char buf[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, dst.addr.ip6, buf, INET6_ADDRSTRLEN); EXPECT_STREQ(buf, "2001:4898:f0:f153:357c:77b2:49c9:627c"); @@ -33,13 +45,27 @@ TEST(swssnet, copy2) EXPECT_STREQ(buf, "ffff:ffe0::"); } -TEST(swssnet, copy3) +TEST(swssnet, copy2_v4) +{ + IpPrefix ip("10.23.45.126/31"); + sai_ip_prefix_t dst; + copy(dst, ip); + EXPECT_EQ(dst.addr_family, SAI_IP_ADDR_FAMILY_IPV4); + + char buf[INET6_ADDRSTRLEN]; + inet_ntop(AF_INET, &dst.addr.ip4, buf, INET_ADDRSTRLEN); + EXPECT_STREQ(buf, "10.23.45.126"); + inet_ntop(AF_INET, &dst.mask.ip4, buf, INET_ADDRSTRLEN); + EXPECT_STREQ(buf, "255.255.255.254"); +} + +TEST(swssnet, copy3_v6) { IpAddress ip("2001:4898:f0:f153:357c:77b2:49c9:627c"); sai_ip_prefix_t dst; copy(dst, ip); EXPECT_EQ(dst.addr_family, SAI_IP_ADDR_FAMILY_IPV6); - + char buf[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, dst.addr.ip6, buf, INET6_ADDRSTRLEN); EXPECT_STREQ(buf, "2001:4898:f0:f153:357c:77b2:49c9:627c"); @@ -47,17 +73,46 @@ TEST(swssnet, copy3) EXPECT_STREQ(buf, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"); } -TEST(swssnet, subnet) +TEST(swssnet, copy3_v4) +{ + IpAddress ip("10.23.45.126"); + sai_ip_prefix_t dst; + copy(dst, ip); + EXPECT_EQ(dst.addr_family, SAI_IP_ADDR_FAMILY_IPV4); + + char buf[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &dst.addr.ip4, buf, INET_ADDRSTRLEN); + EXPECT_STREQ(buf, "10.23.45.126"); + inet_ntop(AF_INET, &dst.mask.ip4, buf, INET_ADDRSTRLEN); + EXPECT_STREQ(buf, "255.255.255.255"); +} + +TEST(swssnet, subnet_v6) { sai_ip_prefix_t dst, src; src.addr_family = SAI_IP_ADDR_FAMILY_IPV6; inet_pton(AF_INET6, "2001:4898:f0:f153:357c:77b2:49c9:627c", src.addr.ip6); inet_pton(AF_INET6, "ffff:ffe0::", src.mask.ip6); - + subnet(dst, src); char buf[INET6_ADDRSTRLEN]; inet_ntop(AF_INET6, dst.addr.ip6, buf, INET6_ADDRSTRLEN); EXPECT_STREQ(buf, "2001:4880::"); inet_ntop(AF_INET6, dst.mask.ip6, buf, INET6_ADDRSTRLEN); EXPECT_STREQ(buf, "ffff:ffe0::"); -} \ No newline at end of file +} + +TEST(swssnet, subnet_v4) +{ + sai_ip_prefix_t dst, src; + src.addr_family = SAI_IP_ADDR_FAMILY_IPV4; + inet_pton(AF_INET, "10.23.45.126", &src.addr.ip4); + inet_pton(AF_INET, "255.254.0.0", &src.mask.ip4); + + subnet(dst, src); + char buf[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, &dst.addr.ip4, buf, INET_ADDRSTRLEN); + EXPECT_STREQ(buf, "10.22.0.0"); + inet_ntop(AF_INET, &dst.mask.ip4, buf, INET_ADDRSTRLEN); + EXPECT_STREQ(buf, "255.254.0.0"); +}