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/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); diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 00000000000..d96e3f5c3ef --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,20 @@ +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 diff --git a/tests/swssnet_ut.cpp b/tests/swssnet_ut.cpp new file mode 100644 index 00000000000..cc137349a0f --- /dev/null +++ b/tests/swssnet_ut.cpp @@ -0,0 +1,118 @@ +#include +#include +#include +#include +#include "swssnet.h" + +using namespace std; +using namespace swss; + +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, 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"); + inet_ntop(AF_INET6, dst.mask.ip6, buf, INET6_ADDRSTRLEN); + EXPECT_STREQ(buf, "ffff:ffe0::"); +} + +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"); + inet_ntop(AF_INET6, dst.mask.ip6, buf, INET6_ADDRSTRLEN); + EXPECT_STREQ(buf, "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"); +} + +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::"); +} + +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"); +}