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