test_netlink: Add basic request test
This adds a basic request / response test for netlink by faking out the
enumeration of network interfaces.
Change-Id: I6a2d4f8e162bb127976a6ea8721f663bce662f18
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/test/test_netlink.cpp b/test/test_netlink.cpp
index 41cd1ca..8d20c39 100644
--- a/test/test_netlink.cpp
+++ b/test/test_netlink.cpp
@@ -286,6 +286,46 @@
EXPECT_EQ(0, memcmp(&nextbuf, data.data(), sizeof(nextbuf)));
}
+class PerformRequest : public testing::Test
+{
+ public:
+ void doLinkDump(size_t ifs)
+ {
+ mock_clear();
+ for (size_t i = 0; i < ifs; ++i)
+ {
+ mock_addIF("eth" + std::to_string(i), 1 + i);
+ }
+
+ size_t cbCalls = 0;
+ auto cb = [&](const nlmsghdr&, std::string_view) { cbCalls++; };
+ ifinfomsg msg{};
+ netlink::performRequest(NETLINK_ROUTE, RTM_GETLINK, NLM_F_DUMP, msg,
+ cb);
+ EXPECT_EQ(ifs, cbCalls);
+ }
+};
+
+TEST_F(PerformRequest, NoResponse)
+{
+ doLinkDump(0);
+}
+
+TEST_F(PerformRequest, SingleResponse)
+{
+ doLinkDump(1);
+}
+
+TEST_F(PerformRequest, MultiResponse)
+{
+ doLinkDump(3);
+}
+
+TEST_F(PerformRequest, MultiMsg)
+{
+ doLinkDump(1000);
+}
+
} // namespace netlink
} // namespace network
} // namespace phosphor