Index: remoting/protocol/jingle_session_unittest.cc |
=================================================================== |
--- remoting/protocol/jingle_session_unittest.cc (revision 96105) |
+++ remoting/protocol/jingle_session_unittest.cc (working copy) |
@@ -13,7 +13,6 @@ |
#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" |
@@ -54,7 +53,6 @@ |
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"; |
@@ -294,6 +292,14 @@ |
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), |
@@ -303,9 +309,10 @@ |
virtual ~ChannelTesterBase() { } |
- void Start() { |
+ void Start(ChannelType channel) { |
MessageLoop::current()->PostTask( |
- FROM_HERE, NewRunnableMethod(this, &ChannelTesterBase::DoStart)); |
+ FROM_HERE, NewRunnableMethod(this, &ChannelTesterBase::DoStart, |
+ channel)); |
} |
bool WaitFinished() { |
@@ -315,12 +322,15 @@ |
virtual void CheckResults() = 0; |
protected: |
- void DoStart() { |
- InitChannels(); |
+ void DoStart(ChannelType channel) { |
+ socket_1_ = SelectChannel(host_session_, channel); |
+ socket_2_ = SelectChannel(client_session_, channel); |
+ |
+ InitBuffers(); |
+ DoRead(); |
+ DoWrite(); |
} |
- virtual void InitChannels() = 0; |
- |
void Done() { |
done_ = true; |
MessageLoop::current()->PostTask(FROM_HERE, base::Bind(&QuitCurrentThread)); |
@@ -330,9 +340,29 @@ |
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_; |
- scoped_ptr<net::Socket> sockets_[2]; |
+ net::Socket* socket_1_; |
+ net::Socket* socket_2_; |
bool done_; |
}; |
@@ -370,36 +400,6 @@ |
} |
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 +415,7 @@ |
break; |
int bytes_to_write = std::min(output_buffer_->BytesRemaining(), |
message_size_); |
- result = sockets_[0]->Write(output_buffer_, bytes_to_write, &write_cb_); |
+ result = socket_1_->Write(output_buffer_, bytes_to_write, &write_cb_); |
HandleWriteResult(result); |
}; |
} |
@@ -439,7 +439,7 @@ |
int result = 1; |
while (result > 0) { |
input_buffer_->SetCapacity(input_buffer_->offset() + message_size_); |
- result = sockets_[1]->Read(input_buffer_, message_size_, &read_cb_); |
+ result = socket_2_->Read(input_buffer_, message_size_, &read_cb_); |
HandleReadResult(result); |
}; |
} |
@@ -536,36 +536,6 @@ |
} |
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() { |
} |
@@ -581,7 +551,7 @@ |
// Put index of this packet in the beginning of the packet body. |
memcpy(packet->data(), &packets_sent_, sizeof(packets_sent_)); |
- int result = sockets_[0]->Write(packet, kMessageSize, &write_cb_); |
+ int result = socket_1_->Write(packet, kMessageSize, &write_cb_); |
HandleWriteResult(result); |
} |
@@ -609,7 +579,7 @@ |
int kReadSize = kMessageSize * 2; |
read_buffer_ = new net::IOBuffer(kReadSize); |
- result = sockets_[1]->Read(read_buffer_, kReadSize, &read_cb_); |
+ result = socket_2_->Read(read_buffer_, kReadSize, &read_cb_); |
HandleReadResult(result); |
}; |
} |
@@ -708,13 +678,13 @@ |
} |
// Verify that data can be transmitted over the event channel. |
-TEST_F(JingleSessionTest, TestTcpChannel) { |
+TEST_F(JingleSessionTest, TestControlChannel) { |
CreateServerPair(); |
ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
scoped_refptr<TCPChannelTester> tester( |
new TCPChannelTester(host_session_.get(), client_session_.get(), |
kMessageSize, kMessages)); |
- tester->Start(); |
+ tester->Start(ChannelTesterBase::CONTROL); |
ASSERT_TRUE(tester->WaitFinished()); |
tester->CheckResults(); |
@@ -722,13 +692,44 @@ |
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); |
+ ASSERT_TRUE(tester->WaitFinished()); |
+ tester->CheckResults(); |
+ |
+ // Connections must be closed while |tester| still exists. |
+ CloseSessions(); |
+} |
+ |
// Verify that data can be transmitted over the video RTP channel. |
-TEST_F(JingleSessionTest, TestUdpChannel) { |
+// Disabled because RTP support is disabled, see crbug.com/91538 . |
+TEST_F(JingleSessionTest, DISABLED_TestVideoRtpChannel) { |
CreateServerPair(); |
ASSERT_TRUE(InitiateConnection(kTestSharedSecret)); |
scoped_refptr<UDPChannelTester> tester( |
new UDPChannelTester(host_session_.get(), client_session_.get())); |
- tester->Start(); |
+ tester->Start(ChannelTesterBase::VIDEO_RTP); |
ASSERT_TRUE(tester->WaitFinished()); |
tester->CheckResults(); |
@@ -745,37 +746,28 @@ |
tester = new ChannelSpeedTester(host_session_.get(), |
client_session_.get(), 512); |
- tester->Start(); |
+ tester->Start(ChannelTesterBase::VIDEO); |
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(); |
+ tester->Start(ChannelTesterBase::VIDEO); |
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(); |
+ tester->Start(ChannelTesterBase::VIDEO); |
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(); |
+ tester->Start(ChannelTesterBase::VIDEO); |
ASSERT_TRUE(tester->WaitFinished()); |
LOG(INFO) << "Time for 500k bytes " |
<< tester->GetElapsedTime().InMilliseconds() << " ms."; |