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."; |