aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPierre Ossman <ossman@cendio.se>2025-02-14 14:52:41 +0100
committerPierre Ossman <ossman@cendio.se>2025-02-27 12:50:38 +0100
commit4f61d6b55b4d3295b63f3d9072236cf2be31cafa (patch)
tree06336370ad44845cec0ef280f015e6ce487f68c3
parentccb7fe57627356d92b39491f234cb4d6289d911a (diff)
downloadtigervnc-4f61d6b55b4d3295b63f3d9072236cf2be31cafa.tar.gz
tigervnc-4f61d6b55b4d3295b63f3d9072236cf2be31cafa.zip
Convert hostport unit tests to Google Test
-rw-r--r--tests/unit/CMakeLists.txt3
-rw-r--r--tests/unit/hostport.cxx157
2 files changed, 97 insertions, 63 deletions
diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt
index 2ef97211..fb99e820 100644
--- a/tests/unit/CMakeLists.txt
+++ b/tests/unit/CMakeLists.txt
@@ -22,7 +22,8 @@ add_executable(gesturehandler gesturehandler.cxx ../../vncviewer/GestureHandler.
target_link_libraries(gesturehandler core)
add_executable(hostport hostport.cxx)
-target_link_libraries(hostport network)
+target_link_libraries(hostport network GTest::gtest_main)
+gtest_discover_tests(hostport)
add_executable(pixelformat pixelformat.cxx)
target_link_libraries(pixelformat rfb)
diff --git a/tests/unit/hostport.cxx b/tests/unit/hostport.cxx
index 615fd208..164a7877 100644
--- a/tests/unit/hostport.cxx
+++ b/tests/unit/hostport.cxx
@@ -1,4 +1,4 @@
-/* Copyright 2016 Pierre Ossman <ossman@cendio.se> for Cendio AB
+/* Copyright 2016-2025 Pierre Ossman <ossman@cendio.se> for Cendio AB
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,75 +20,108 @@
#include <config.h>
#endif
-#include <stdio.h>
+#include <gtest/gtest.h>
#include <network/TcpSocket.h>
-static void doTest(const char* hostAndPort,
- const char* expectedHost, int expectedPort)
+struct result {
+ std::string host;
+ int port;
+};
+
+static bool operator==(const result& a, const result& b)
+{
+ return a.host == b.host && a.port == b.port;
+}
+
+static std::ostream& operator<<(std::ostream& os, const result& r)
+{
+ return os << r.host << ":" << r.port;
+}
+
+static result getHostAndPort(const char* hostAndPort)
+{
+ std::string host;
+ int port;
+ network::getHostAndPort(hostAndPort, &host, &port);
+ return {host, port};
+}
+
+TEST(HostPost, localDisplay)
+{
+ EXPECT_EQ(getHostAndPort(":5"), result({"localhost", 5905}));
+}
+
+TEST(HostPost, noDisplay)
+{
+ EXPECT_EQ(getHostAndPort("1.2.3.4"), result({"1.2.3.4", 5900}));
+}
+
+TEST(HostPost, display)
+{
+ EXPECT_EQ(getHostAndPort("1.2.3.4:5"), result({"1.2.3.4", 5905}));
+ EXPECT_EQ(getHostAndPort("1.2.3.4:99"), result({"1.2.3.4", 5999}));
+ EXPECT_EQ(getHostAndPort("1.2.3.4:100"), result({"1.2.3.4", 100}));
+ EXPECT_EQ(getHostAndPort("1.2.3.4:5901"), result({"1.2.3.4", 5901}));
+}
+
+TEST(HostPost, port)
{
- std::string host;
- int port;
+ EXPECT_EQ(getHostAndPort("1.2.3.4::5"), result({"1.2.3.4", 5}));
+ EXPECT_EQ(getHostAndPort("1.2.3.4::99"), result({"1.2.3.4", 99}));
+ EXPECT_EQ(getHostAndPort("1.2.3.4::5901"), result({"1.2.3.4", 5901}));
+}
- printf("\"%s\": ", hostAndPort);
+TEST(HostPost, bracketedIpv4)
+{
+ EXPECT_EQ(getHostAndPort("[1.2.3.4]"), result({"1.2.3.4", 5900}));
+ EXPECT_EQ(getHostAndPort("[1.2.3.4]:5"), result({"1.2.3.4", 5905}));
+ EXPECT_EQ(getHostAndPort("[1.2.3.4]:100"), result({"1.2.3.4", 100}));
+ EXPECT_EQ(getHostAndPort("[1.2.3.4]::5"), result({"1.2.3.4", 5}));
+ EXPECT_EQ(getHostAndPort("[1.2.3.4]::100"), result({"1.2.3.4", 100}));
+}
- network::getHostAndPort(hostAndPort, &host, &port);
+TEST(HostPost, portOne)
+{
+ // Ambigiuous. For now we'll keep the old behaviour...
+ EXPECT_EQ(getHostAndPort("::1"), result({"localhost", 1}));
+}
- if (host != expectedHost)
- printf("FAILED (\"%s\" != \"%s\")", host.c_str(), expectedHost);
- else if (port != expectedPort)
- printf("FAILED (%d != %d)", port, expectedPort);
- else
- printf("OK");
- printf("\n");
- fflush(stdout);
+TEST(HostPost, bareIpv6)
+{
+ EXPECT_EQ(getHostAndPort("2001:1234::20:1"), result({"2001:1234::20:1", 5900}));
+}
+
+TEST(HostPost, bracketedIpv6)
+{
+ EXPECT_EQ(getHostAndPort("[::1]"), result({"::1", 5900}));
+ EXPECT_EQ(getHostAndPort("[2001:1234::20:1]"), result({"2001:1234::20:1", 5900}));
+}
+
+TEST(HostPost, ipv6WithDisplay)
+{
+ EXPECT_EQ(getHostAndPort("[2001:1234::20:1]:5"), result({"2001:1234::20:1", 5905}));
+ EXPECT_EQ(getHostAndPort("[2001:1234::20:1]:99"), result({"2001:1234::20:1", 5999}));
+ EXPECT_EQ(getHostAndPort("[2001:1234::20:1]:100"), result({"2001:1234::20:1", 100}));
+ EXPECT_EQ(getHostAndPort("[2001:1234::20:1]:5901"), result({"2001:1234::20:1", 5901}));
+}
+
+TEST(HostPort, padding)
+{
+ EXPECT_EQ(getHostAndPort(" 1.2.3.4 "), result({"1.2.3.4", 5900}));
+ EXPECT_EQ(getHostAndPort(" 1.2.3.4:5901 "), result({"1.2.3.4", 5901}));
+ EXPECT_EQ(getHostAndPort(" 1.2.3.4 :5901 "), result({"1.2.3.4", 5901}));
+ EXPECT_EQ(getHostAndPort(" [1.2.3.4]:5902 "), result({"1.2.3.4", 5902}));
+ EXPECT_EQ(getHostAndPort(" :5903 "), result({"localhost", 5903}));
+ EXPECT_EQ(getHostAndPort(" ::4 "), result({"localhost", 4}));
+ EXPECT_EQ(getHostAndPort(" [::1] "), result({"::1", 5900}));
+ EXPECT_EQ(getHostAndPort(" 2001:1234::20:1 "), result({"2001:1234::20:1", 5900}));
+ EXPECT_EQ(getHostAndPort(" [2001:1234::20:1] "), result({"2001:1234::20:1", 5900}));
+ EXPECT_EQ(getHostAndPort(" [2001:1234::20:1]:5905 "), result({"2001:1234::20:1", 5905}));
}
-int main(int /*argc*/, char** /*argv*/)
+int main(int argc, char** argv)
{
- doTest(":5", "localhost", 5905);
-
- doTest("1.2.3.4", "1.2.3.4", 5900);
-
- doTest("1.2.3.4:5", "1.2.3.4", 5905);
- doTest("1.2.3.4:99", "1.2.3.4", 5999);
- doTest("1.2.3.4:100", "1.2.3.4", 100);
- doTest("1.2.3.4:5901", "1.2.3.4", 5901);
-
- doTest("1.2.3.4::5", "1.2.3.4", 5);
- doTest("1.2.3.4::99", "1.2.3.4", 99);
- doTest("1.2.3.4::5901", "1.2.3.4", 5901);
-
- doTest("[1.2.3.4]", "1.2.3.4", 5900);
- doTest("[1.2.3.4]:5", "1.2.3.4", 5905);
- doTest("[1.2.3.4]:100", "1.2.3.4", 100);
- doTest("[1.2.3.4]::5", "1.2.3.4", 5);
- doTest("[1.2.3.4]::100", "1.2.3.4", 100);
-
- // Ambigiuous. For now we'll keep the old behaviour...
- doTest("::1", "localhost", 1);
-
- doTest("2001:1234::20:1", "2001:1234::20:1", 5900);
-
- doTest("[::1]", "::1", 5900);
- doTest("[2001:1234::20:1]", "2001:1234::20:1", 5900);
-
- doTest("[2001:1234::20:1]:5", "2001:1234::20:1", 5905);
- doTest("[2001:1234::20:1]:99", "2001:1234::20:1", 5999);
- doTest("[2001:1234::20:1]:100", "2001:1234::20:1", 100);
- doTest("[2001:1234::20:1]:5901", "2001:1234::20:1", 5901);
-
- doTest(" 1.2.3.4 ", "1.2.3.4", 5900);
- doTest(" 1.2.3.4:5901 ", "1.2.3.4", 5901);
- doTest(" 1.2.3.4: 5901 ", "1.2.3.4", 5901);
- doTest(" 1.2.3.4 :5901 ", "1.2.3.4", 5901);
- doTest(" [1.2.3.4]:5902 ", "1.2.3.4", 5902);
- doTest(" :5903 ", "localhost", 5903);
- doTest(" ::4 ", "localhost", 4);
- doTest(" [::1] ", "::1", 5900);
- doTest(" 2001:1234::20:1 ", "2001:1234::20:1", 5900);
- doTest(" [2001:1234::20:1] ", "2001:1234::20:1", 5900);
- doTest(" [2001:1234::20:1]:5905 ", "2001:1234::20:1", 5905);
-
- return 0;
+ testing::InitGoogleTest(&argc, argv);
+ return RUN_ALL_TESTS();
}