diff options
author | Pierre Ossman <ossman@cendio.se> | 2025-02-14 14:52:41 +0100 |
---|---|---|
committer | Pierre Ossman <ossman@cendio.se> | 2025-02-27 12:50:38 +0100 |
commit | 4f61d6b55b4d3295b63f3d9072236cf2be31cafa (patch) | |
tree | 06336370ad44845cec0ef280f015e6ce487f68c3 | |
parent | ccb7fe57627356d92b39491f234cb4d6289d911a (diff) | |
download | tigervnc-4f61d6b55b4d3295b63f3d9072236cf2be31cafa.tar.gz tigervnc-4f61d6b55b4d3295b63f3d9072236cf2be31cafa.zip |
Convert hostport unit tests to Google Test
-rw-r--r-- | tests/unit/CMakeLists.txt | 3 | ||||
-rw-r--r-- | tests/unit/hostport.cxx | 157 |
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(); } |