summaryrefslogtreecommitdiffstats
path: root/ppapi/tests/test_transport.cc
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-02 17:28:10 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-02 17:28:10 +0000
commit26d912d33fc645ff2499e3537adad66d46e76b33 (patch)
tree809d8c79564ba2d697b608347cabcf24a8e8857b /ppapi/tests/test_transport.cc
parentc0022e306a82f29b471bc5d0e7700030de3f9cc5 (diff)
downloadchromium_src-26d912d33fc645ff2499e3537adad66d46e76b33.zip
chromium_src-26d912d33fc645ff2499e3537adad66d46e76b33.tar.gz
chromium_src-26d912d33fc645ff2499e3537adad66d46e76b33.tar.bz2
Implement PseudoTCP support in P2P Transport Pepper API.
BUG=None TEST=Unittests Review URL: http://codereview.chromium.org/6893101 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83736 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/tests/test_transport.cc')
-rw-r--r--ppapi/tests/test_transport.cc95
1 files changed, 80 insertions, 15 deletions
diff --git a/ppapi/tests/test_transport.cc b/ppapi/tests/test_transport.cc
index bcf9701..80f9475 100644
--- a/ppapi/tests/test_transport.cc
+++ b/ppapi/tests/test_transport.cc
@@ -22,7 +22,7 @@
REGISTER_TEST_CASE(Transport);
#define RUN_SUBTEST(function) { \
- std::string result = function(); \
+ std::string result = function; \
if (!result.empty()) \
return result; \
}
@@ -96,13 +96,15 @@ bool TestTransport::Init() {
void TestTransport::RunTest() {
RUN_TEST(Create);
RUN_TEST(Connect);
- RUN_TEST(SendData);
- RUN_TEST(ConnectAndClose);
+ RUN_TEST(SendDataUdp);
+ RUN_TEST(SendDataTcp);
+ RUN_TEST(ConnectAndCloseUdp);
+ RUN_TEST(ConnectAndCloseTcp);
}
-std::string TestTransport::InitTargets() {
- transport1_.reset(new pp::Transport_Dev(instance_, kTestChannelName, ""));
- transport2_.reset(new pp::Transport_Dev(instance_, kTestChannelName, ""));
+std::string TestTransport::InitTargets(const char* proto) {
+ transport1_.reset(new pp::Transport_Dev(instance_, kTestChannelName, proto));
+ transport2_.reset(new pp::Transport_Dev(instance_, kTestChannelName, proto));
ASSERT_TRUE(transport1_.get() != NULL);
ASSERT_TRUE(transport2_.get() != NULL);
@@ -149,7 +151,7 @@ std::string TestTransport::Clean() {
}
std::string TestTransport::TestCreate() {
- RUN_SUBTEST(InitTargets);
+ RUN_SUBTEST(InitTargets("udp"));
Clean();
@@ -157,17 +159,17 @@ std::string TestTransport::TestCreate() {
}
std::string TestTransport::TestConnect() {
- RUN_SUBTEST(InitTargets);
- RUN_SUBTEST(Connect);
+ RUN_SUBTEST(InitTargets("udp"));
+ RUN_SUBTEST(Connect());
Clean();
PASS();
}
-std::string TestTransport::TestSendData() {
- RUN_SUBTEST(InitTargets);
- RUN_SUBTEST(Connect);
+std::string TestTransport::TestSendDataUdp() {
+ RUN_SUBTEST(InitTargets("udp"));
+ RUN_SUBTEST(Connect());
StreamReader reader(transport1_.get());
@@ -206,9 +208,72 @@ std::string TestTransport::TestSendData() {
PASS();
}
-std::string TestTransport::TestConnectAndClose() {
- RUN_SUBTEST(InitTargets);
- RUN_SUBTEST(Connect);
+std::string TestTransport::TestSendDataTcp() {
+ RUN_SUBTEST(InitTargets("tcp"));
+ RUN_SUBTEST(Connect());
+
+ StreamReader reader(transport1_.get());
+
+ std::vector<char> sent_data;
+ for (int i = 0; i < kNumPackets; ++i) {
+ std::vector<char> send_buffer(kSendBufferSize);
+ for (size_t j = 0; j < send_buffer.size(); ++j) {
+ send_buffer[j] = rand() % 256;
+ }
+
+ TestCompletionCallback send_cb(instance_->pp_instance());
+ int result = transport2_->Send(&send_buffer[0], send_buffer.size(),
+ send_cb);
+ if (result == PP_OK_COMPLETIONPENDING)
+ result = send_cb.WaitForResult();
+ ASSERT_TRUE(result > 0);
+ sent_data.insert(sent_data.end(), send_buffer.begin(),
+ send_buffer.begin() + result);
+ }
+
+ // Wait for 1 second.
+ TestCompletionCallback wait_cb(instance_->pp_instance());
+ pp::Module::Get()->core()->CallOnMainThread(1000, wait_cb);
+ ASSERT_EQ(wait_cb.WaitForResult(), PP_OK);
+
+ ASSERT_TRUE(reader.errors().size() == 0);
+
+ std::vector<char> received_data;
+ for (std::list<std::vector<char> >::const_iterator it =
+ reader.received().begin(); it != reader.received().end(); ++it) {
+ received_data.insert(received_data.end(), it->begin(), it->end());
+ }
+ ASSERT_EQ(sent_data, received_data);
+
+ Clean();
+
+ PASS();
+}
+
+std::string TestTransport::TestConnectAndCloseUdp() {
+ RUN_SUBTEST(InitTargets("udp"));
+ RUN_SUBTEST(Connect());
+
+ std::vector<char> recv_buffer(kReadBufferSize);
+ TestCompletionCallback recv_cb(instance_->pp_instance());
+ ASSERT_EQ(
+ transport1_->Recv(&recv_buffer[0], recv_buffer.size(), recv_cb),
+ PP_OK_COMPLETIONPENDING);
+
+ // Close the transport and verify that callback is aborted.
+ ASSERT_EQ(transport1_->Close(), PP_OK);
+
+ ASSERT_EQ(recv_cb.run_count(), 1);
+ ASSERT_EQ(recv_cb.result(), PP_ERROR_ABORTED);
+
+ Clean();
+
+ PASS();
+}
+
+std::string TestTransport::TestConnectAndCloseTcp() {
+ RUN_SUBTEST(InitTargets("tcp"));
+ RUN_SUBTEST(Connect());
std::vector<char> recv_buffer(kReadBufferSize);
TestCompletionCallback recv_cb(instance_->pp_instance());