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