test_net_address_private_untrusted.cc 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ppapi/tests/test_net_address_private_untrusted.h"
  5. #include <limits>
  6. #include <sstream>
  7. #include "ppapi/c/pp_errors.h"
  8. #include "ppapi/cpp/private/net_address_private.h"
  9. #include "ppapi/tests/test_utils.h"
  10. #include "ppapi/tests/testing_instance.h"
  11. REGISTER_TEST_CASE(NetAddressPrivateUntrusted);
  12. using pp::NetAddressPrivate;
  13. using pp::TCPSocketPrivate;
  14. TestNetAddressPrivateUntrusted::TestNetAddressPrivateUntrusted(
  15. TestingInstance* instance) : TestCase(instance), port_(0) {
  16. }
  17. bool TestNetAddressPrivateUntrusted::Init() {
  18. bool net_address_private_is_available = NetAddressPrivate::IsAvailable();
  19. if (!net_address_private_is_available)
  20. instance_->AppendError("PPB_NetAddress_Private interface not available");
  21. bool tcp_socket_private_is_available = TCPSocketPrivate::IsAvailable();
  22. if (!tcp_socket_private_is_available)
  23. instance_->AppendError("PPB_TCPSocket_Private interface not available");
  24. bool init_host_port =
  25. GetLocalHostPort(instance_->pp_instance(), &host_, &port_);
  26. if (!init_host_port)
  27. instance_->AppendError("Can't init host and port");
  28. return net_address_private_is_available &&
  29. tcp_socket_private_is_available &&
  30. init_host_port &&
  31. CheckTestingInterface();
  32. }
  33. void TestNetAddressPrivateUntrusted::RunTests(const std::string& filter) {
  34. RUN_TEST(AreEqual, filter);
  35. RUN_TEST(AreHostsEqual, filter);
  36. RUN_TEST(Describe, filter);
  37. RUN_TEST(ReplacePort, filter);
  38. RUN_TEST(GetAnyAddress, filter);
  39. RUN_TEST(GetFamily, filter);
  40. RUN_TEST(GetPort, filter);
  41. RUN_TEST(GetAddress, filter);
  42. }
  43. int32_t TestNetAddressPrivateUntrusted::Connect(TCPSocketPrivate* socket,
  44. const std::string& host,
  45. uint16_t port) {
  46. TestCompletionCallback callback(instance_->pp_instance(), false);
  47. callback.WaitForResult(
  48. socket->Connect(host.c_str(), port, callback.GetCallback()));
  49. return callback.result();
  50. }
  51. std::string TestNetAddressPrivateUntrusted::TestAreEqual() {
  52. pp::TCPSocketPrivate socket(instance_);
  53. int32_t rv = Connect(&socket, host_, port_);
  54. if (rv != PP_OK)
  55. return ReportError("pp::TCPSocketPrivate::Connect", rv);
  56. PP_NetAddress_Private local_address, remote_address;
  57. ASSERT_TRUE(socket.GetLocalAddress(&local_address));
  58. ASSERT_TRUE(socket.GetRemoteAddress(&remote_address));
  59. ASSERT_TRUE(NetAddressPrivate::AreEqual(local_address, local_address));
  60. ASSERT_FALSE(NetAddressPrivate::AreEqual(local_address, remote_address));
  61. socket.Disconnect();
  62. PASS();
  63. }
  64. std::string TestNetAddressPrivateUntrusted::TestAreHostsEqual() {
  65. pp::TCPSocketPrivate socket(instance_);
  66. int32_t rv = Connect(&socket, host_, port_);
  67. if (rv != PP_OK)
  68. return ReportError("pp::TCPSocketPrivate::Connect", rv);
  69. PP_NetAddress_Private local_address, remote_address;
  70. ASSERT_TRUE(socket.GetLocalAddress(&local_address));
  71. ASSERT_TRUE(socket.GetRemoteAddress(&remote_address));
  72. ASSERT_TRUE(NetAddressPrivate::AreHostsEqual(local_address, local_address));
  73. ASSERT_TRUE(NetAddressPrivate::AreHostsEqual(local_address, remote_address));
  74. socket.Disconnect();
  75. PASS();
  76. }
  77. std::string TestNetAddressPrivateUntrusted::TestDescribe() {
  78. pp::TCPSocketPrivate socket(instance_);
  79. int32_t rv = Connect(&socket, host_, port_);
  80. if (rv != PP_OK)
  81. return ReportError("pp::TCPSocketPrivate::Connect", rv);
  82. PP_NetAddress_Private remote_address;
  83. ASSERT_TRUE(socket.GetRemoteAddress(&remote_address));
  84. std::ostringstream os;
  85. os << host_;
  86. ASSERT_EQ(os.str(), NetAddressPrivate::Describe(remote_address, false));
  87. os << ':' << port_;
  88. ASSERT_EQ(os.str(), NetAddressPrivate::Describe(remote_address, true));
  89. socket.Disconnect();
  90. PASS();
  91. }
  92. std::string TestNetAddressPrivateUntrusted::TestReplacePort() {
  93. pp::TCPSocketPrivate socket(instance_);
  94. int32_t rv = Connect(&socket, host_, port_);
  95. if (rv != PP_OK)
  96. return ReportError("pp::TCPSocketPrivate::Connect", rv);
  97. PP_NetAddress_Private src_addr, dst_addr;
  98. ASSERT_TRUE(socket.GetRemoteAddress(&src_addr));
  99. uint16_t nport = port_;
  100. if (nport == std::numeric_limits<uint16_t>::max())
  101. --nport;
  102. else
  103. ++nport;
  104. ASSERT_TRUE(NetAddressPrivate::ReplacePort(src_addr, nport, &dst_addr));
  105. std::ostringstream os;
  106. os << host_ << ':' << nport;
  107. ASSERT_EQ(os.str(), NetAddressPrivate::Describe(dst_addr, true));
  108. socket.Disconnect();
  109. PASS();
  110. }
  111. std::string TestNetAddressPrivateUntrusted::TestGetAnyAddress() {
  112. PP_NetAddress_Private address;
  113. NetAddressPrivate::GetAnyAddress(false, &address);
  114. ASSERT_TRUE(NetAddressPrivate::AreEqual(address, address));
  115. NetAddressPrivate::GetAnyAddress(true, &address);
  116. ASSERT_TRUE(NetAddressPrivate::AreEqual(address, address));
  117. PASS();
  118. }
  119. std::string TestNetAddressPrivateUntrusted::TestGetFamily() {
  120. pp::TCPSocketPrivate socket(instance_);
  121. int32_t rv = Connect(&socket, host_, port_);
  122. if (rv != PP_OK)
  123. return ReportError("pp::TCPSocketPrivate::Connect", rv);
  124. PP_NetAddress_Private remote_address;
  125. ASSERT_TRUE(socket.GetRemoteAddress(&remote_address));
  126. ASSERT_EQ(NetAddressPrivate::GetFamily(remote_address),
  127. NetAddressPrivate::GetFamily(remote_address));
  128. socket.Disconnect();
  129. PASS();
  130. }
  131. std::string TestNetAddressPrivateUntrusted::TestGetPort() {
  132. pp::TCPSocketPrivate socket(instance_);
  133. int32_t rv = Connect(&socket, host_, port_);
  134. if (rv != PP_OK)
  135. return ReportError("pp::TCPSocketPrivate::Connect", rv);
  136. PP_NetAddress_Private remote_address;
  137. ASSERT_TRUE(socket.GetRemoteAddress(&remote_address));
  138. ASSERT_EQ(NetAddressPrivate::GetPort(remote_address), port_);
  139. socket.Disconnect();
  140. PASS();
  141. }
  142. std::string TestNetAddressPrivateUntrusted::TestGetAddress() {
  143. pp::TCPSocketPrivate socket(instance_);
  144. int32_t rv = Connect(&socket, host_, port_);
  145. if (rv != PP_OK)
  146. return ReportError("pp::TCPSocketPrivate::Connect", rv);
  147. PP_NetAddress_Private remote_address;
  148. ASSERT_TRUE(socket.GetRemoteAddress(&remote_address));
  149. static const uint16_t buffer_size = sizeof(remote_address.data);
  150. char buffer[buffer_size];
  151. ASSERT_TRUE(NetAddressPrivate::GetAddress(remote_address, buffer,
  152. buffer_size));
  153. socket.Disconnect();
  154. PASS();
  155. }