Chromium Code Reviews| Index: remoting/protocol/jingle_session_unittest.cc |
| diff --git a/remoting/protocol/jingle_session_unittest.cc b/remoting/protocol/jingle_session_unittest.cc |
| index 1d09521f759a6ed78090aee1cd4246aa329f91d2..103d735212bc14d7844ee596c84a1571ae04fbab 100644 |
| --- a/remoting/protocol/jingle_session_unittest.cc |
| +++ b/remoting/protocol/jingle_session_unittest.cc |
| @@ -13,6 +13,7 @@ |
| #include "net/base/io_buffer.h" |
| #include "net/base/net_errors.h" |
| #include "net/socket/socket.h" |
| +#include "net/socket/stream_socket.h" |
| #include "remoting/protocol/jingle_session.h" |
| #include "remoting/protocol/jingle_session_manager.h" |
| #include "remoting/jingle_glue/jingle_thread.h" |
| @@ -53,6 +54,7 @@ const int kMessages = 100; |
| const int kTestDataSize = kMessages * kMessageSize; |
| const int kUdpWriteDelayMs = 10; |
| const char kTestToken[] = "a_dummy_token"; |
| +const char kChannelName[] = "test_channel"; |
| const char kHostJid[] = "host1@gmail.com/123"; |
| const char kClientJid[] = "host2@gmail.com/321"; |
| @@ -292,27 +294,20 @@ class JingleSessionTest : public testing::Test { |
| class ChannelTesterBase : public base::RefCountedThreadSafe<ChannelTesterBase> { |
| public: |
| - enum ChannelType { |
| - CONTROL, |
| - EVENT, |
| - VIDEO, |
| - VIDEO_RTP, |
| - VIDEO_RTCP, |
| - }; |
| - |
| ChannelTesterBase(Session* host_session, |
| Session* client_session) |
| : host_session_(host_session), |
| client_session_(client_session), |
| + socket_1_(NULL), |
| + socket_2_(NULL), |
| done_(false) { |
| } |
| virtual ~ChannelTesterBase() { } |
| - void Start(ChannelType channel) { |
| + void Start() { |
| MessageLoop::current()->PostTask( |
| - FROM_HERE, NewRunnableMethod(this, &ChannelTesterBase::DoStart, |
| - channel)); |
| + FROM_HERE, NewRunnableMethod(this, &ChannelTesterBase::DoStart)); |
| } |
| bool WaitFinished() { |
| @@ -322,15 +317,12 @@ class ChannelTesterBase : public base::RefCountedThreadSafe<ChannelTesterBase> { |
| virtual void CheckResults() = 0; |
| protected: |
| - void DoStart(ChannelType channel) { |
| - socket_1_ = SelectChannel(host_session_, channel); |
| - socket_2_ = SelectChannel(client_session_, channel); |
| - |
| - InitBuffers(); |
| - DoRead(); |
| - DoWrite(); |
| + void DoStart() { |
| + InitChannels(); |
| } |
| + virtual void InitChannels() = 0; |
| + |
| void Done() { |
| done_ = true; |
| MessageLoop::current()->PostTask(FROM_HERE, base::Bind(&QuitCurrentThread)); |
| @@ -340,25 +332,6 @@ class ChannelTesterBase : public base::RefCountedThreadSafe<ChannelTesterBase> { |
| virtual void DoWrite() = 0; |
| virtual void DoRead() = 0; |
| - net::Socket* SelectChannel(Session* session, |
| - ChannelType channel) { |
| - switch (channel) { |
| - case CONTROL: |
| - return session->control_channel(); |
| - case EVENT: |
| - return session->event_channel(); |
| - case VIDEO: |
| - return session->video_channel(); |
| - case VIDEO_RTP: |
| - return session->video_rtp_channel(); |
| - case VIDEO_RTCP: |
| - return session->video_rtcp_channel(); |
| - default: |
| - NOTREACHED(); |
| - return NULL; |
| - } |
| - } |
| - |
| Session* host_session_; |
| Session* client_session_; |
| net::Socket* socket_1_; |
| @@ -400,6 +373,46 @@ class TCPChannelTester : public ChannelTesterBase { |
| } |
| protected: |
| + virtual void InitChannels() OVERRIDE { |
| + host_session_->CreateStreamChannel( |
| + kChannelName, |
| + base::Bind(&TCPChannelTester::OnChannelReady, |
| + base::Unretained(this), 0)); |
| + client_session_->CreateStreamChannel( |
| + kChannelName, |
| + base::Bind(&TCPChannelTester::OnChannelReady, |
| + base::Unretained(this), 1)); |
| + } |
| + |
| + void OnChannelReady(int id, const std::string name, |
| + net::StreamSocket* socket) { |
| + ASSERT_TRUE(socket); |
| + ASSERT_EQ(name, kChannelName); |
| + if (!socket) { |
| + Done(); |
| + return; |
| + } |
| + |
| + switch (id) { |
| + case 0: |
| + socket_1_ = socket; |
| + break; |
| + |
| + case 1: |
| + socket_2_ = socket; |
| + break; |
| + |
| + default: |
| + NOTREACHED(); |
| + } |
| + |
| + if (socket_1_ && socket_2_) { |
| + InitBuffers(); |
| + DoRead(); |
| + DoWrite(); |
| + } |
| + } |
| + |
| virtual void InitBuffers() { |
| output_buffer_ = new net::DrainableIOBuffer( |
| new net::IOBuffer(test_data_size_), test_data_size_); |
| @@ -536,6 +549,46 @@ class UDPChannelTester : public ChannelTesterBase { |
| } |
| protected: |
| + virtual void InitChannels() OVERRIDE { |
| + host_session_->CreateDatagramChannel( |
| + kChannelName, |
| + base::Bind(&UDPChannelTester::OnChannelReady, |
| + base::Unretained(this), 0)); |
| + client_session_->CreateDatagramChannel( |
| + kChannelName, |
| + base::Bind(&UDPChannelTester::OnChannelReady, |
| + base::Unretained(this), 1)); |
| + } |
| + |
| + void OnChannelReady(int id, const std::string name, net::Socket* socket) { |
| + ASSERT_TRUE(socket); |
| + ASSERT_EQ(name, kChannelName); |
| + if (!socket) { |
| + Done(); |
| + return; |
| + } |
| + |
| + switch (id) { |
| + case 0: |
| + socket_1_ = socket; |
|
Wez
2011/08/04 23:49:52
nit: Simpler to use an array of two sockets, here
Sergey Ulanov
2011/08/09 19:41:10
Done.
|
| + break; |
| + |
| + case 1: |
| + socket_2_ = socket; |
| + break; |
| + |
| + default: |
| + NOTREACHED(); |
| + } |
| + |
| + if (socket_1_ && socket_2_) { |
| + InitBuffers(); |
| + DoRead(); |
| + DoWrite(); |
| + } |
| + } |
| + |
| + |
| virtual void InitBuffers() { |
| } |
| @@ -678,43 +731,13 @@ TEST_F(JingleSessionTest, ConnectBadChannelAuth) { |
| } |
| // Verify that data can be transmitted over the event channel. |
| -TEST_F(JingleSessionTest, TestControlChannel) { |
| +TEST_F(JingleSessionTest, TestTcpChannel) { |
| CreateServerPair(); |
| ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
| scoped_refptr<TCPChannelTester> tester( |
| new TCPChannelTester(host_session_.get(), client_session_.get(), |
| kMessageSize, kMessages)); |
| - tester->Start(ChannelTesterBase::CONTROL); |
| - ASSERT_TRUE(tester->WaitFinished()); |
| - tester->CheckResults(); |
| - |
| - // Connections must be closed while |tester| still exists. |
| - CloseSessions(); |
| -} |
| - |
| -// Verify that data can be transmitted over the video channel. |
| -TEST_F(JingleSessionTest, TestVideoChannel) { |
| - CreateServerPair(); |
| - ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
| - scoped_refptr<TCPChannelTester> tester( |
| - new TCPChannelTester(host_session_.get(), client_session_.get(), |
| - kMessageSize, kMessageSize)); |
| - tester->Start(ChannelTesterBase::VIDEO); |
| - ASSERT_TRUE(tester->WaitFinished()); |
| - tester->CheckResults(); |
| - |
| - // Connections must be closed while |tester| still exists. |
| - CloseSessions(); |
| -} |
| - |
| -// Verify that data can be transmitted over the event channel. |
| -TEST_F(JingleSessionTest, TestEventChannel) { |
| - CreateServerPair(); |
| - ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
| - scoped_refptr<TCPChannelTester> tester( |
| - new TCPChannelTester(host_session_.get(), client_session_.get(), |
| - kMessageSize, kMessageSize)); |
| - tester->Start(ChannelTesterBase::EVENT); |
| + tester->Start(); |
| ASSERT_TRUE(tester->WaitFinished()); |
| tester->CheckResults(); |
| @@ -723,13 +746,12 @@ TEST_F(JingleSessionTest, TestEventChannel) { |
| } |
| // Verify that data can be transmitted over the video RTP channel. |
| -// Disabled because RTP support is disabled, see crbug.com/91538 . |
| -TEST_F(JingleSessionTest, DISABLED_TestVideoRtpChannel) { |
| +TEST_F(JingleSessionTest, TestUdpChannel) { |
| CreateServerPair(); |
| ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
| scoped_refptr<UDPChannelTester> tester( |
| new UDPChannelTester(host_session_.get(), client_session_.get())); |
| - tester->Start(ChannelTesterBase::VIDEO_RTP); |
| + tester->Start(); |
| ASSERT_TRUE(tester->WaitFinished()); |
| tester->CheckResults(); |
| @@ -746,28 +768,37 @@ TEST_F(JingleSessionTest, TestSpeed) { |
| tester = new ChannelSpeedTester(host_session_.get(), |
| client_session_.get(), 512); |
| - tester->Start(ChannelTesterBase::VIDEO); |
| + tester->Start(); |
| ASSERT_TRUE(tester->WaitFinished()); |
| LOG(INFO) << "Time for 512 bytes " |
| << tester->GetElapsedTime().InMilliseconds() << " ms."; |
| + CloseSessions(); |
| + ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
| + |
| tester = new ChannelSpeedTester(host_session_.get(), |
| client_session_.get(), 1024); |
| - tester->Start(ChannelTesterBase::VIDEO); |
| + tester->Start(); |
| ASSERT_TRUE(tester->WaitFinished()); |
| LOG(INFO) << "Time for 1024 bytes " |
| << tester->GetElapsedTime().InMilliseconds() << " ms."; |
| + CloseSessions(); |
| + ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
| + |
| tester = new ChannelSpeedTester(host_session_.get(), |
| client_session_.get(), 51200); |
| - tester->Start(ChannelTesterBase::VIDEO); |
| + tester->Start(); |
| ASSERT_TRUE(tester->WaitFinished()); |
| LOG(INFO) << "Time for 50k bytes " |
| << tester->GetElapsedTime().InMilliseconds() << " ms."; |
| + CloseSessions(); |
| + ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
| + |
| tester = new ChannelSpeedTester(host_session_.get(), |
| client_session_.get(), 512000); |
| - tester->Start(ChannelTesterBase::VIDEO); |
| + tester->Start(); |
| ASSERT_TRUE(tester->WaitFinished()); |
| LOG(INFO) << "Time for 500k bytes " |
| << tester->GetElapsedTime().InMilliseconds() << " ms."; |