Index: ppapi/tests/test_net_address_private.cc |
diff --git a/ppapi/tests/test_net_address_private.cc b/ppapi/tests/test_net_address_private.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..dc634ce14ce0b7158f70c8fdc04a54704a1795de |
--- /dev/null |
+++ b/ppapi/tests/test_net_address_private.cc |
@@ -0,0 +1,157 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ppapi/tests/test_net_address_private.h" |
+ |
+#include "ppapi/cpp/private/net_address_private.h" |
+#include "ppapi/c/private/ppb_net_address_private.h" |
+#include "ppapi/tests/testing_instance.h" |
+ |
+// Other than |GetAnyAddress()|, there's no way to actually get |
+// |PP_NetAddress_Private| structs from just this interface. We'll cheat and |
+// synthesize some. |
+// TODO(viettrungluu): This is very fragile and implementation-dependent. :( |
+#if defined(_WIN32) |
+#define OS_WIN |
+#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) || \ |
+ defined(__OpenBSD__) || defined(__sun) || defined(__native_client__) |
+#define OS_POSIX |
+#else |
+#error "Unsupported platform." |
+#endif |
+ |
+#if defined(OS_WIN) |
+#include <ws2tcpip.h> |
+#elif defined(OS_POSIX) |
+#include <arpa/inet.h> |
+#include <netdb.h> |
+#include <netinet/in.h> |
+#include <sys/socket.h> |
+#endif |
+ |
+using pp::NetAddressPrivate; |
+ |
+namespace { |
+ |
+PP_NetAddress_Private MakeIPv4NetAddress(const char* host, int port) { |
+ PP_NetAddress_Private addr = PP_NetAddress_Private(); |
+ addr.size = sizeof(sockaddr_in); |
+ sockaddr_in* a = reinterpret_cast<sockaddr_in*>(addr.data); |
+ a->sin_family = AF_INET; |
+ a->sin_port = htons(port); |
+ a->sin_addr.s_addr = inet_addr(host); |
+ return addr; |
+} |
+ |
+// TODO(viettrungluu): Also add IPv6 tests. |
+ |
+} // namespace |
+ |
+REGISTER_TEST_CASE(NetAddressPrivate); |
+ |
+TestNetAddressPrivate::TestNetAddressPrivate(TestingInstance* instance) |
+ : TestCase(instance) { |
+} |
+ |
+bool TestNetAddressPrivate::Init() { |
+ return NetAddressPrivate::IsAvailable(); |
+} |
+ |
+void TestNetAddressPrivate::RunTest() { |
+ RUN_TEST(AreEqual); |
+ RUN_TEST(AreHostsEqual); |
+ RUN_TEST(Describe); |
+ RUN_TEST(ReplacePort); |
+ RUN_TEST(GetAnyAddress); |
+} |
+ |
+std::string TestNetAddressPrivate::TestAreEqual() { |
+ // No comparisons should ever be done with invalid addresses. |
+ PP_NetAddress_Private invalid = PP_NetAddress_Private(); |
+ ASSERT_FALSE(NetAddressPrivate::AreEqual(invalid, invalid)); |
+ |
+ PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress("127.0.0.1", 80); |
+ ASSERT_TRUE(NetAddressPrivate::AreEqual(localhost_80, localhost_80)); |
+ ASSERT_FALSE(NetAddressPrivate::AreEqual(localhost_80, invalid)); |
+ |
+ PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress("127.0.0.1", 1234); |
+ ASSERT_FALSE(NetAddressPrivate::AreEqual(localhost_80, localhost_1234)); |
+ |
+ PP_NetAddress_Private other_80 = MakeIPv4NetAddress("192.168.0.1", 80); |
+ ASSERT_FALSE(NetAddressPrivate::AreEqual(localhost_80, other_80)); |
+ |
+ PASS(); |
+} |
+ |
+std::string TestNetAddressPrivate::TestAreHostsEqual() { |
+ // No comparisons should ever be done with invalid addresses. |
+ PP_NetAddress_Private invalid = PP_NetAddress_Private(); |
+ ASSERT_FALSE(NetAddressPrivate::AreHostsEqual(invalid, invalid)); |
+ |
+ PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress("127.0.0.1", 80); |
+ ASSERT_TRUE(NetAddressPrivate::AreHostsEqual(localhost_80, localhost_80)); |
+ ASSERT_FALSE(NetAddressPrivate::AreHostsEqual(localhost_80, invalid)); |
+ |
+ PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress("127.0.0.1", 1234); |
+ ASSERT_TRUE(NetAddressPrivate::AreHostsEqual(localhost_80, localhost_1234)); |
+ |
+ PP_NetAddress_Private other_80 = MakeIPv4NetAddress("192.168.0.1", 80); |
+ ASSERT_FALSE(NetAddressPrivate::AreHostsEqual(localhost_80, other_80)); |
+ |
+ PASS(); |
+} |
+ |
+std::string TestNetAddressPrivate::TestDescribe() { |
+ PP_NetAddress_Private invalid = PP_NetAddress_Private(); |
+ ASSERT_EQ("", NetAddressPrivate::Describe(invalid, false)); |
+ ASSERT_EQ("", NetAddressPrivate::Describe(invalid, true)); |
+ |
+ PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress("127.0.0.1", 80); |
+ ASSERT_EQ("127.0.0.1", NetAddressPrivate::Describe(localhost_80, false)); |
+ ASSERT_EQ("127.0.0.1:80", NetAddressPrivate::Describe(localhost_80, true)); |
+ |
+ PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress("127.0.0.1", 1234); |
+ ASSERT_EQ("127.0.0.1", NetAddressPrivate::Describe(localhost_1234, false)); |
+ ASSERT_EQ("127.0.0.1:1234", NetAddressPrivate::Describe(localhost_1234, |
+ true)); |
+ |
+ PP_NetAddress_Private other_80 = MakeIPv4NetAddress("192.168.0.1", 80); |
+ ASSERT_EQ("192.168.0.1", NetAddressPrivate::Describe(other_80, false)); |
+ ASSERT_EQ("192.168.0.1:80", NetAddressPrivate::Describe(other_80, true)); |
+ |
+ PASS(); |
+} |
+ |
+std::string TestNetAddressPrivate::TestReplacePort() { |
+ // Assume that |AreEqual()| works correctly. |
+ PP_NetAddress_Private result = PP_NetAddress_Private(); |
+ |
+ PP_NetAddress_Private invalid = PP_NetAddress_Private(); |
+ ASSERT_FALSE(NetAddressPrivate::ReplacePort(invalid, 1234, &result)); |
+ |
+ PP_NetAddress_Private localhost_80 = MakeIPv4NetAddress("127.0.0.1", 80); |
+ ASSERT_TRUE(NetAddressPrivate::ReplacePort(localhost_80, 1234, &result)); |
+ PP_NetAddress_Private localhost_1234 = MakeIPv4NetAddress("127.0.0.1", 1234); |
+ ASSERT_TRUE(NetAddressPrivate::AreEqual(result, localhost_1234)); |
+ |
+ // Test that having the out param being the same as the in param works |
+ // properly. |
+ ASSERT_TRUE(NetAddressPrivate::ReplacePort(result, 80, &result)); |
+ ASSERT_TRUE(NetAddressPrivate::AreEqual(result, localhost_80)); |
+ |
+ PASS(); |
+} |
+ |
+std::string TestNetAddressPrivate::TestGetAnyAddress() { |
+ // Just make sure it doesn't crash and such. |
+ PP_NetAddress_Private result = PP_NetAddress_Private(); |
+ |
+ NetAddressPrivate::GetAnyAddress(false, &result); |
+ ASSERT_TRUE(NetAddressPrivate::AreEqual(result, result)); |
+ |
+ NetAddressPrivate::GetAnyAddress(true, &result); |
+ ASSERT_TRUE(NetAddressPrivate::AreEqual(result, result)); |
+ |
+ PASS(); |
+} |