| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ppapi/tests/test_transport.h" | 5 #include "ppapi/tests/test_transport.h" |
| 6 | 6 |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <list> | 10 #include <list> |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 const char kTestChannelName[] = "test"; | 33 const char kTestChannelName[] = "test"; |
| 34 const int kReadBufferSize = 65536; | 34 const int kReadBufferSize = 65536; |
| 35 | 35 |
| 36 class StreamReader { | 36 class StreamReader { |
| 37 public: | 37 public: |
| 38 StreamReader(pp::Transport_Dev* transport, | 38 StreamReader(pp::Transport_Dev* transport, |
| 39 int expected_size, | 39 int expected_size, |
| 40 pp::CompletionCallback done_callback) | 40 pp::CompletionCallback done_callback) |
| 41 : expected_size_(expected_size), | 41 : expected_size_(expected_size), |
| 42 done_callback_(done_callback), | 42 done_callback_(done_callback), |
| 43 ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)), | 43 PP_ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)), |
| 44 transport_(transport), | 44 transport_(transport), |
| 45 received_size_(0) { | 45 received_size_(0) { |
| 46 Read(); | 46 Read(); |
| 47 } | 47 } |
| 48 | 48 |
| 49 const std::list<std::vector<char> >& received() { return received_; } | 49 const std::list<std::vector<char> >& received() { return received_; } |
| 50 std::list<std::string> errors() { return errors_; } | 50 std::list<std::string> errors() { return errors_; } |
| 51 | 51 |
| 52 private: | 52 private: |
| 53 void Read() { | 53 void Read() { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 pp::CompletionCallbackFactory<StreamReader> callback_factory_; | 89 pp::CompletionCallbackFactory<StreamReader> callback_factory_; |
| 90 pp::Transport_Dev* transport_; | 90 pp::Transport_Dev* transport_; |
| 91 std::vector<char> buffer_; | 91 std::vector<char> buffer_; |
| 92 std::list<std::vector<char> > received_; | 92 std::list<std::vector<char> > received_; |
| 93 int received_size_; | 93 int received_size_; |
| 94 std::list<std::string> errors_; | 94 std::list<std::string> errors_; |
| 95 }; | 95 }; |
| 96 | 96 |
| 97 } // namespace | 97 } // namespace |
| 98 | 98 |
| 99 TestTransport::~TestTransport() { |
| 100 delete transport1_; |
| 101 delete transport2_; |
| 102 } |
| 103 |
| 99 bool TestTransport::Init() { | 104 bool TestTransport::Init() { |
| 100 transport_interface_ = reinterpret_cast<PPB_Transport_Dev const*>( | 105 transport_interface_ = reinterpret_cast<PPB_Transport_Dev const*>( |
| 101 pp::Module::Get()->GetBrowserInterface(PPB_TRANSPORT_DEV_INTERFACE)); | 106 pp::Module::Get()->GetBrowserInterface(PPB_TRANSPORT_DEV_INTERFACE)); |
| 102 return transport_interface_ && InitTestingInterface(); | 107 return transport_interface_ && InitTestingInterface(); |
| 103 } | 108 } |
| 104 | 109 |
| 105 void TestTransport::RunTests(const std::string& filter) { | 110 void TestTransport::RunTests(const std::string& filter) { |
| 106 RUN_TEST(Create, filter); | 111 RUN_TEST(Create, filter); |
| 107 RUN_TEST_FORCEASYNC_AND_NOT(Connect, filter); | 112 RUN_TEST_FORCEASYNC_AND_NOT(Connect, filter); |
| 108 RUN_TEST(SetProperty, filter); | 113 RUN_TEST(SetProperty, filter); |
| 109 RUN_TEST_FORCEASYNC_AND_NOT(SendDataUdp, filter); | 114 RUN_TEST_FORCEASYNC_AND_NOT(SendDataUdp, filter); |
| 110 RUN_TEST_FORCEASYNC_AND_NOT(SendDataTcp, filter); | 115 RUN_TEST_FORCEASYNC_AND_NOT(SendDataTcp, filter); |
| 111 RUN_TEST_FORCEASYNC_AND_NOT(ConnectAndCloseUdp, filter); | 116 RUN_TEST_FORCEASYNC_AND_NOT(ConnectAndCloseUdp, filter); |
| 112 RUN_TEST_FORCEASYNC_AND_NOT(ConnectAndCloseTcp, filter); | 117 RUN_TEST_FORCEASYNC_AND_NOT(ConnectAndCloseTcp, filter); |
| 113 } | 118 } |
| 114 | 119 |
| 115 std::string TestTransport::InitTargets(PP_TransportType type) { | 120 std::string TestTransport::InitTargets(PP_TransportType type) { |
| 116 transport1_.reset(new pp::Transport_Dev(instance_, kTestChannelName, type)); | 121 transport1_ = new pp::Transport_Dev(instance_, kTestChannelName, type); |
| 117 transport2_.reset(new pp::Transport_Dev(instance_, kTestChannelName, type)); | 122 transport2_ = new pp::Transport_Dev(instance_, kTestChannelName, type); |
| 118 | 123 |
| 119 ASSERT_TRUE(transport1_.get() != NULL); | 124 ASSERT_NE(NULL, transport1_); |
| 120 ASSERT_TRUE(transport2_.get() != NULL); | 125 ASSERT_NE(NULL, transport2_); |
| 121 | 126 |
| 122 PASS(); | 127 PASS(); |
| 123 } | 128 } |
| 124 | 129 |
| 125 std::string TestTransport::Connect() { | 130 std::string TestTransport::Connect() { |
| 126 TestCompletionCallback connect_cb1(instance_->pp_instance()); | 131 TestCompletionCallback connect_cb1(instance_->pp_instance()); |
| 127 TestCompletionCallback connect_cb2(instance_->pp_instance()); | 132 TestCompletionCallback connect_cb2(instance_->pp_instance()); |
| 128 ASSERT_EQ(transport1_->Connect(connect_cb1), PP_OK_COMPLETIONPENDING); | 133 ASSERT_EQ(transport1_->Connect(connect_cb1), PP_OK_COMPLETIONPENDING); |
| 129 ASSERT_EQ(transport2_->Connect(connect_cb2), PP_OK_COMPLETIONPENDING); | 134 ASSERT_EQ(transport2_->Connect(connect_cb2), PP_OK_COMPLETIONPENDING); |
| 130 | 135 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 148 ASSERT_EQ(connect_cb1.WaitForResult(), PP_OK); | 153 ASSERT_EQ(connect_cb1.WaitForResult(), PP_OK); |
| 149 ASSERT_EQ(connect_cb2.WaitForResult(), PP_OK); | 154 ASSERT_EQ(connect_cb2.WaitForResult(), PP_OK); |
| 150 | 155 |
| 151 ASSERT_TRUE(transport1_->IsWritable()); | 156 ASSERT_TRUE(transport1_->IsWritable()); |
| 152 ASSERT_TRUE(transport2_->IsWritable()); | 157 ASSERT_TRUE(transport2_->IsWritable()); |
| 153 | 158 |
| 154 PASS(); | 159 PASS(); |
| 155 } | 160 } |
| 156 | 161 |
| 157 std::string TestTransport::Clean() { | 162 std::string TestTransport::Clean() { |
| 158 transport1_.reset(); | 163 delete transport1_; |
| 159 transport2_.reset(); | 164 transport1_ = NULL; |
| 165 delete transport2_; |
| 166 transport2_ = NULL; |
| 160 | 167 |
| 161 PASS(); | 168 PASS(); |
| 162 } | 169 } |
| 163 | 170 |
| 164 std::string TestTransport::TestCreate() { | 171 std::string TestTransport::TestCreate() { |
| 165 RUN_SUBTEST(InitTargets(PP_TRANSPORTTYPE_DATAGRAM)); | 172 RUN_SUBTEST(InitTargets(PP_TRANSPORTTYPE_DATAGRAM)); |
| 166 | 173 |
| 167 Clean(); | 174 Clean(); |
| 168 | 175 |
| 169 PASS(); | 176 PASS(); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 // that at least some packets are received (some packets may be lost). | 241 // that at least some packets are received (some packets may be lost). |
| 235 std::string TestTransport::TestSendDataUdp() { | 242 std::string TestTransport::TestSendDataUdp() { |
| 236 RUN_SUBTEST(InitTargets(PP_TRANSPORTTYPE_DATAGRAM)); | 243 RUN_SUBTEST(InitTargets(PP_TRANSPORTTYPE_DATAGRAM)); |
| 237 RUN_SUBTEST(Connect()); | 244 RUN_SUBTEST(Connect()); |
| 238 | 245 |
| 239 const int kNumPackets = 100; | 246 const int kNumPackets = 100; |
| 240 const int kSendBufferSize = 1200; | 247 const int kSendBufferSize = 1200; |
| 241 const int kUdpWaitTimeMs = 1000; // 1 second. | 248 const int kUdpWaitTimeMs = 1000; // 1 second. |
| 242 | 249 |
| 243 TestCompletionCallback done_cb(instance_->pp_instance()); | 250 TestCompletionCallback done_cb(instance_->pp_instance()); |
| 244 StreamReader reader(transport1_.get(), kSendBufferSize * kNumPackets, | 251 StreamReader reader(transport1_, kSendBufferSize * kNumPackets, done_cb); |
| 245 done_cb); | |
| 246 | 252 |
| 247 std::map<int, std::vector<char> > sent_packets; | 253 std::map<int, std::vector<char> > sent_packets; |
| 248 for (int i = 0; i < kNumPackets; ++i) { | 254 for (int i = 0; i < kNumPackets; ++i) { |
| 249 std::vector<char> send_buffer(kSendBufferSize); | 255 std::vector<char> send_buffer(kSendBufferSize); |
| 250 for (size_t j = 0; j < send_buffer.size(); ++j) { | 256 for (size_t j = 0; j < send_buffer.size(); ++j) { |
| 251 send_buffer[j] = rand() % 256; | 257 send_buffer[j] = rand() % 256; |
| 252 } | 258 } |
| 253 // Put packet index in the beginning. | 259 // Put packet index in the beginning. |
| 254 memcpy(&send_buffer[0], &i, sizeof(i)); | 260 memcpy(&send_buffer[0], &i, sizeof(i)); |
| 255 | 261 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 286 | 292 |
| 287 // Creating reliable (TCP-like) connection and try sending data over | 293 // Creating reliable (TCP-like) connection and try sending data over |
| 288 // it. Verify that all data is received correctly. | 294 // it. Verify that all data is received correctly. |
| 289 std::string TestTransport::TestSendDataTcp() { | 295 std::string TestTransport::TestSendDataTcp() { |
| 290 RUN_SUBTEST(InitTargets(PP_TRANSPORTTYPE_STREAM)); | 296 RUN_SUBTEST(InitTargets(PP_TRANSPORTTYPE_STREAM)); |
| 291 RUN_SUBTEST(Connect()); | 297 RUN_SUBTEST(Connect()); |
| 292 | 298 |
| 293 const int kTcpSendSize = 100000; | 299 const int kTcpSendSize = 100000; |
| 294 | 300 |
| 295 TestCompletionCallback done_cb(instance_->pp_instance()); | 301 TestCompletionCallback done_cb(instance_->pp_instance()); |
| 296 StreamReader reader(transport1_.get(), kTcpSendSize, | 302 StreamReader reader(transport1_, kTcpSendSize, done_cb); |
| 297 done_cb); | |
| 298 | 303 |
| 299 std::vector<char> send_buffer(kTcpSendSize); | 304 std::vector<char> send_buffer(kTcpSendSize); |
| 300 for (size_t j = 0; j < send_buffer.size(); ++j) { | 305 for (size_t j = 0; j < send_buffer.size(); ++j) { |
| 301 send_buffer[j] = rand() % 256; | 306 send_buffer[j] = rand() % 256; |
| 302 } | 307 } |
| 303 | 308 |
| 304 int pos = 0; | 309 int pos = 0; |
| 305 while (pos < static_cast<int>(send_buffer.size())) { | 310 while (pos < static_cast<int>(send_buffer.size())) { |
| 306 TestCompletionCallback send_cb(instance_->pp_instance(), force_async_); | 311 TestCompletionCallback send_cb(instance_->pp_instance(), force_async_); |
| 307 int result = transport2_->Send( | 312 int result = transport2_->Send( |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 // Close the transport and verify that callback is aborted. | 369 // Close the transport and verify that callback is aborted. |
| 365 ASSERT_EQ(transport1_->Close(), PP_OK); | 370 ASSERT_EQ(transport1_->Close(), PP_OK); |
| 366 | 371 |
| 367 ASSERT_EQ(recv_cb.run_count(), 1); | 372 ASSERT_EQ(recv_cb.run_count(), 1); |
| 368 ASSERT_EQ(recv_cb.result(), PP_ERROR_ABORTED); | 373 ASSERT_EQ(recv_cb.result(), PP_ERROR_ABORTED); |
| 369 | 374 |
| 370 Clean(); | 375 Clean(); |
| 371 | 376 |
| 372 PASS(); | 377 PASS(); |
| 373 } | 378 } |
| OLD | NEW |