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..1a53c6e3168555bf68d436fc3d0e8121a236807f 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"; |
@@ -214,12 +216,12 @@ class JingleSessionTest : public testing::Test { |
{ |
InSequence dummy; |
- EXPECT_CALL(host_connection_callback_, |
- OnStateChange(Session::CONNECTING)) |
- .Times(1); |
if (shared_secret == kTestSharedSecret) { |
EXPECT_CALL(host_connection_callback_, |
OnStateChange(Session::CONNECTED)) |
+ .Times(1); |
+ EXPECT_CALL(host_connection_callback_, |
+ OnStateChange(Session::CONNECTED_CHANNELS)) |
.Times(1) |
.WillOnce(QuitThreadOnCounter(¬_connected_peers)); |
// Expect that the connection will be closed eventually. |
@@ -231,6 +233,9 @@ class JingleSessionTest : public testing::Test { |
EXPECT_CALL(host_connection_callback_, |
OnStateChange(Session::CONNECTED)) |
.Times(AtMost(1)); |
+ EXPECT_CALL(host_connection_callback_, |
+ OnStateChange(Session::CONNECTED_CHANNELS)) |
+ .Times(AtMost(1)); |
// Expect that the connection will be closed eventually. |
EXPECT_CALL(host_connection_callback_, |
OnStateChange(Session::FAILED)) |
@@ -248,12 +253,18 @@ class JingleSessionTest : public testing::Test { |
if (shared_secret == kTestSharedSecret) { |
EXPECT_CALL(client_connection_callback_, |
OnStateChange(Session::CONNECTED)) |
+ .Times(1); |
+ EXPECT_CALL(client_connection_callback_, |
+ OnStateChange(Session::CONNECTED_CHANNELS)) |
.Times(1) |
.WillOnce(QuitThreadOnCounter(¬_connected_peers)); |
} else { |
EXPECT_CALL(client_connection_callback_, |
OnStateChange(Session::CONNECTED)) |
.Times(AtMost(1)); |
+ EXPECT_CALL(client_connection_callback_, |
+ OnStateChange(Session::CONNECTED_CHANNELS)) |
+ .Times(AtMost(1)); |
} |
// Expect that the connection will be closed eventually. |
EXPECT_CALL(client_connection_callback_, |
@@ -292,14 +303,6 @@ 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), |
@@ -309,10 +312,9 @@ class ChannelTesterBase : public base::RefCountedThreadSafe<ChannelTesterBase> { |
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 +324,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,29 +339,9 @@ 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_; |
- net::Socket* socket_2_; |
+ scoped_ptr<net::Socket> sockets_[2]; |
bool done_; |
}; |
@@ -400,6 +379,36 @@ 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; |
+ } |
+ |
+ DCHECK(id >= 0 && id < 2); |
+ sockets_[id].reset(socket); |
+ |
+ if (sockets_[0].get() && sockets_[1].get()) { |
+ InitBuffers(); |
+ DoRead(); |
+ DoWrite(); |
+ } |
+ } |
+ |
virtual void InitBuffers() { |
output_buffer_ = new net::DrainableIOBuffer( |
new net::IOBuffer(test_data_size_), test_data_size_); |
@@ -415,7 +424,7 @@ class TCPChannelTester : public ChannelTesterBase { |
break; |
int bytes_to_write = std::min(output_buffer_->BytesRemaining(), |
message_size_); |
- result = socket_1_->Write(output_buffer_, bytes_to_write, &write_cb_); |
+ result = sockets_[0]->Write(output_buffer_, bytes_to_write, &write_cb_); |
HandleWriteResult(result); |
}; |
} |
@@ -439,7 +448,7 @@ class TCPChannelTester : public ChannelTesterBase { |
int result = 1; |
while (result > 0) { |
input_buffer_->SetCapacity(input_buffer_->offset() + message_size_); |
- result = socket_2_->Read(input_buffer_, message_size_, &read_cb_); |
+ result = sockets_[1]->Read(input_buffer_, message_size_, &read_cb_); |
HandleReadResult(result); |
}; |
} |
@@ -536,6 +545,36 @@ 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; |
+ } |
+ |
+ DCHECK(id >= 0 && id < 2); |
+ sockets_[id].reset(socket); |
+ |
+ if (sockets_[0].get() && sockets_[1].get()) { |
+ InitBuffers(); |
+ DoRead(); |
+ DoWrite(); |
+ } |
+ } |
+ |
+ |
virtual void InitBuffers() { |
} |
@@ -551,7 +590,7 @@ class UDPChannelTester : public ChannelTesterBase { |
// Put index of this packet in the beginning of the packet body. |
memcpy(packet->data(), &packets_sent_, sizeof(packets_sent_)); |
- int result = socket_1_->Write(packet, kMessageSize, &write_cb_); |
+ int result = sockets_[0]->Write(packet, kMessageSize, &write_cb_); |
HandleWriteResult(result); |
} |
@@ -579,7 +618,7 @@ class UDPChannelTester : public ChannelTesterBase { |
int kReadSize = kMessageSize * 2; |
read_buffer_ = new net::IOBuffer(kReadSize); |
- result = socket_2_->Read(read_buffer_, kReadSize, &read_cb_); |
+ result = sockets_[1]->Read(read_buffer_, kReadSize, &read_cb_); |
HandleReadResult(result); |
}; |
} |
@@ -678,43 +717,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 +732,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 +754,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."; |