| Index: extensions/browser/api/cast_channel/cast_socket_unittest.cc
|
| diff --git a/extensions/browser/api/cast_channel/cast_socket_unittest.cc b/extensions/browser/api/cast_channel/cast_socket_unittest.cc
|
| index 499647eb5bd17b31c8c36a81cde7f128644a2064..5f379e6e5f397f29a1f6be31a25b08a0c8b332ca 100644
|
| --- a/extensions/browser/api/cast_channel/cast_socket_unittest.cc
|
| +++ b/extensions/browser/api/cast_channel/cast_socket_unittest.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "extensions/browser/api/cast_channel/cast_socket.h"
|
|
|
| +#include <vector>
|
| +
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/run_loop.h"
|
| @@ -198,7 +200,7 @@ class TestCastSocket : public CastSocket {
|
|
|
| // Returns the size of the body (in bytes) of the given serialized message.
|
| static size_t ComputeBodySize(const std::string& msg) {
|
| - return msg.length() - CastSocket::MessageHeader::header_size();
|
| + return msg.length() - MessageFramer::MessageHeader::header_size();
|
| }
|
|
|
| virtual ~TestCastSocket() {
|
| @@ -252,8 +254,9 @@ class TestCastSocket : public CastSocket {
|
| void AddReadResultForMessage(net::IoMode mode, const std::string& msg) {
|
| size_t body_size = ComputeBodySize(msg);
|
| const char* data = msg.c_str();
|
| - AddReadResult(mode, data, MessageHeader::header_size());
|
| - AddReadResult(mode, data + MessageHeader::header_size(), body_size);
|
| + AddReadResult(mode, data, MessageFramer::MessageHeader::header_size());
|
| + AddReadResult(
|
| + mode, data + MessageFramer::MessageHeader::header_size(), body_size);
|
| }
|
| void AddReadResultForMessage(net::IoMode mode,
|
| const std::string& msg,
|
| @@ -357,14 +360,17 @@ class CastSocketTest : public testing::Test {
|
| &test_messages_[i]);
|
| ASSERT_TRUE(MessageInfoToCastMessage(
|
| test_messages_[i], &test_protos_[i]));
|
| - ASSERT_TRUE(CastSocket::Serialize(test_protos_[i], &test_proto_strs_[i]));
|
| + ASSERT_TRUE(
|
| + MessageFramer::Serialize(test_protos_[i], &test_proto_strs_[i]));
|
| }
|
| }
|
|
|
| virtual void TearDown() OVERRIDE {
|
| - EXPECT_CALL(handler_, OnCloseComplete(net::OK));
|
| - socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete,
|
| - base::Unretained(&handler_)));
|
| + if (socket_.get()) {
|
| + EXPECT_CALL(handler_, OnCloseComplete(net::OK));
|
| + socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete,
|
| + base::Unretained(&handler_)));
|
| + }
|
| }
|
|
|
| // The caller can specify non-standard namespaces by setting "auth_namespace"
|
| @@ -374,7 +380,7 @@ class CastSocketTest : public testing::Test {
|
| // Create a test auth request.
|
| CastMessage request;
|
| CreateAuthChallengeMessage(&request);
|
| - ASSERT_TRUE(CastSocket::Serialize(request, &auth_request_));
|
| + ASSERT_TRUE(MessageFramer::Serialize(request, &auth_request_));
|
|
|
| // Create a test auth reply.
|
| MessageInfo reply;
|
| @@ -382,7 +388,7 @@ class CastSocketTest : public testing::Test {
|
| auth_namespace, "sender-0", "receiver-0", "abcd", &reply);
|
| CastMessage reply_msg;
|
| ASSERT_TRUE(MessageInfoToCastMessage(reply, &reply_msg));
|
| - ASSERT_TRUE(CastSocket::Serialize(reply_msg, &auth_reply_));
|
| + ASSERT_TRUE(MessageFramer::Serialize(reply_msg, &auth_reply_));
|
| }
|
|
|
| void CreateCastSocket() {
|
| @@ -945,7 +951,7 @@ TEST_F(CastSocketTest, TestWriteErrorLargeMessage) {
|
| SetupAuthMessage();
|
|
|
| EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED));
|
| - size_t size = CastSocket::MessageHeader::max_message_size() + 1;
|
| + size_t size = MessageFramer::MessageHeader::max_message_size() + 1;
|
| test_messages_[0].data.reset(
|
| new base::StringValue(std::string(size, 'a')));
|
| socket_->SendMessage(test_messages_[0],
|
| @@ -1163,8 +1169,9 @@ TEST_F(CastSocketTest, TestReadErrorSync) {
|
| TEST_F(CastSocketTest, TestReadHeaderParseError) {
|
| CreateCastSocket();
|
| SetupAuthMessage();
|
| - uint32 body_size = base::HostToNet32(
|
| - CastSocket::MessageHeader::max_message_size() + 1);
|
| +
|
| + uint32 body_size =
|
| + base::HostToNet32(MessageFramer::MessageHeader::max_message_size() + 1);
|
| // TODO(munjal): Add a method to cast_message_util.h to serialize messages
|
| char header[sizeof(body_size)];
|
| memcpy(&header, &body_size, arraysize(header));
|
| @@ -1201,6 +1208,38 @@ TEST_F(CastSocketTest, TestReadBodyParseError) {
|
| socket_->error_state());
|
| }
|
|
|
| +TEST_F(CastSocketTest, TestMessageFramerCompleteMessage) {
|
| + scoped_refptr<net::GrowableIOBuffer> buffer(new net::GrowableIOBuffer);
|
| + MessageFramer framer(buffer);
|
| + ChannelError error;
|
| + size_t message_length;
|
| +
|
| + buffer->SetCapacity(MessageFramer::MessageHeader::max_message_size());
|
| + uint32 packet_len = test_proto_strs_[0].size();
|
| + memcpy(buffer->StartOfBuffer(), test_proto_strs_[0].data(), packet_len);
|
| +
|
| + // Receive 1 byte of the header, framer demands 3 more bytes.
|
| + EXPECT_EQ(4u, framer.BytesRequested());
|
| + EXPECT_EQ(NULL, framer.Ingest(1, &message_length, &error).get());
|
| + EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, error);
|
| + EXPECT_EQ(3u, framer.BytesRequested());
|
| +
|
| + // Ingest remaining 3, expect that the framer has moved on to requesting the
|
| + // body contents.
|
| + EXPECT_EQ(NULL, framer.Ingest(3, &message_length, &error).get());
|
| + EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, error);
|
| + EXPECT_EQ(packet_len - MessageFramer::MessageHeader::header_size(),
|
| + framer.BytesRequested());
|
| +
|
| + // Remainder of packet sent over the wire.
|
| + scoped_ptr<CastMessage> message;
|
| + message = framer.Ingest(framer.BytesRequested(), &message_length, &error);
|
| + EXPECT_NE(static_cast<CastMessage*>(NULL), message.get());
|
| + EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, error);
|
| + EXPECT_EQ(message->SerializeAsString(), test_protos_[0].SerializeAsString());
|
| + EXPECT_EQ(4u, framer.BytesRequested());
|
| + EXPECT_EQ(message->SerializeAsString().size(), message_length);
|
| +}
|
| } // namespace cast_channel
|
| } // namespace core_api
|
| } // namespace extensions
|
|
|