Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: extensions/browser/api/cast_channel/cast_socket_unittest.cc

Issue 505453002: Create dedicated class for handling wire message formatting and parsing. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Resync to origin/master Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « extensions/browser/api/cast_channel/cast_socket.cc ('k') | extensions/extensions.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/api/cast_channel/cast_socket.h" 5 #include "extensions/browser/api/cast_channel/cast_socket.h"
6 6
7 #include <vector>
8
7 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
8 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
9 #include "base/run_loop.h" 11 #include "base/run_loop.h"
10 #include "base/strings/string_number_conversions.h" 12 #include "base/strings/string_number_conversions.h"
11 #include "base/sys_byteorder.h" 13 #include "base/sys_byteorder.h"
12 #include "base/test/simple_test_tick_clock.h" 14 #include "base/test/simple_test_tick_clock.h"
13 #include "base/timer/mock_timer.h" 15 #include "base/timer/mock_timer.h"
14 #include "extensions/browser/api/cast_channel/cast_channel.pb.h" 16 #include "extensions/browser/api/cast_channel/cast_channel.pb.h"
17 #include "extensions/browser/api/cast_channel/cast_framer.h"
15 #include "extensions/browser/api/cast_channel/cast_message_util.h" 18 #include "extensions/browser/api/cast_channel/cast_message_util.h"
16 #include "extensions/browser/api/cast_channel/logger.h" 19 #include "extensions/browser/api/cast_channel/logger.h"
17 #include "net/base/address_list.h" 20 #include "net/base/address_list.h"
18 #include "net/base/capturing_net_log.h" 21 #include "net/base/capturing_net_log.h"
19 #include "net/base/net_errors.h" 22 #include "net/base/net_errors.h"
20 #include "net/base/net_util.h" 23 #include "net/base/net_util.h"
21 #include "net/socket/socket_test_util.h" 24 #include "net/socket/socket_test_util.h"
22 #include "net/socket/ssl_client_socket.h" 25 #include "net/socket/ssl_client_socket.h"
23 #include "net/socket/tcp_client_socket.h" 26 #include "net/socket/tcp_client_socket.h"
24 #include "net/ssl/ssl_info.h" 27 #include "net/ssl/ssl_info.h"
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 net::IPAddressNumber number; 194 net::IPAddressNumber number;
192 number.push_back(192); 195 number.push_back(192);
193 number.push_back(0); 196 number.push_back(0);
194 number.push_back(0); 197 number.push_back(0);
195 number.push_back(1); 198 number.push_back(1);
196 return net::IPEndPoint(number, 8009); 199 return net::IPEndPoint(number, 8009);
197 } 200 }
198 201
199 // Returns the size of the body (in bytes) of the given serialized message. 202 // Returns the size of the body (in bytes) of the given serialized message.
200 static size_t ComputeBodySize(const std::string& msg) { 203 static size_t ComputeBodySize(const std::string& msg) {
201 return msg.length() - CastSocket::MessageHeader::header_size(); 204 return msg.length() - MessageFramer::MessageHeader::header_size();
202 } 205 }
203 206
204 virtual ~TestCastSocket() { 207 virtual ~TestCastSocket() {
205 } 208 }
206 209
207 // Helpers to set mock results for various operations. 210 // Helpers to set mock results for various operations.
208 void SetupTcp1Connect(net::IoMode mode, int result) { 211 void SetupTcp1Connect(net::IoMode mode, int result) {
209 tcp_connect_data_[0].reset(new net::MockConnect(mode, result)); 212 tcp_connect_data_[0].reset(new net::MockConnect(mode, result));
210 } 213 }
211 void SetupSsl1Connect(net::IoMode mode, int result) { 214 void SetupSsl1Connect(net::IoMode mode, int result) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 } 248 }
246 void AddReadResult(net::IoMode mode, int result) { 249 void AddReadResult(net::IoMode mode, int result) {
247 AddReadResult(net::MockRead(mode, result)); 250 AddReadResult(net::MockRead(mode, result));
248 } 251 }
249 void AddReadResult(net::IoMode mode, const char* data, int data_len) { 252 void AddReadResult(net::IoMode mode, const char* data, int data_len) {
250 AddReadResult(net::MockRead(mode, data, data_len)); 253 AddReadResult(net::MockRead(mode, data, data_len));
251 } 254 }
252 void AddReadResultForMessage(net::IoMode mode, const std::string& msg) { 255 void AddReadResultForMessage(net::IoMode mode, const std::string& msg) {
253 size_t body_size = ComputeBodySize(msg); 256 size_t body_size = ComputeBodySize(msg);
254 const char* data = msg.c_str(); 257 const char* data = msg.c_str();
255 AddReadResult(mode, data, MessageHeader::header_size()); 258 AddReadResult(mode, data, MessageFramer::MessageHeader::header_size());
256 AddReadResult(mode, data + MessageHeader::header_size(), body_size); 259 AddReadResult(
260 mode, data + MessageFramer::MessageHeader::header_size(), body_size);
257 } 261 }
258 void AddReadResultForMessage(net::IoMode mode, 262 void AddReadResultForMessage(net::IoMode mode,
259 const std::string& msg, 263 const std::string& msg,
260 size_t ch_size) { 264 size_t ch_size) {
261 size_t msg_size = msg.size(); 265 size_t msg_size = msg.size();
262 const char* data = msg.c_str(); 266 const char* data = msg.c_str();
263 for (size_t offset = 0; offset < msg_size; offset += ch_size) { 267 for (size_t offset = 0; offset < msg_size; offset += ch_size) {
264 if (offset + ch_size > msg_size) 268 if (offset + ch_size > msg_size)
265 ch_size = msg_size - offset; 269 ch_size = msg_size - offset;
266 AddReadResult(mode, data + offset, ch_size); 270 AddReadResult(mode, data + offset, ch_size);
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 base::TimeTicks())) {} 354 base::TimeTicks())) {}
351 virtual ~CastSocketTest() {} 355 virtual ~CastSocketTest() {}
352 356
353 virtual void SetUp() OVERRIDE { 357 virtual void SetUp() OVERRIDE {
354 // Create a few test messages 358 // Create a few test messages
355 for (size_t i = 0; i < arraysize(test_messages_); i++) { 359 for (size_t i = 0; i < arraysize(test_messages_); i++) {
356 CreateStringMessage("urn:cast", "1", "2", kTestData[i], 360 CreateStringMessage("urn:cast", "1", "2", kTestData[i],
357 &test_messages_[i]); 361 &test_messages_[i]);
358 ASSERT_TRUE(MessageInfoToCastMessage( 362 ASSERT_TRUE(MessageInfoToCastMessage(
359 test_messages_[i], &test_protos_[i])); 363 test_messages_[i], &test_protos_[i]));
360 ASSERT_TRUE(CastSocket::Serialize(test_protos_[i], &test_proto_strs_[i])); 364 ASSERT_TRUE(
365 MessageFramer::Serialize(test_protos_[i], &test_proto_strs_[i]));
361 } 366 }
362 } 367 }
363 368
364 virtual void TearDown() OVERRIDE { 369 virtual void TearDown() OVERRIDE {
365 EXPECT_CALL(handler_, OnCloseComplete(net::OK)); 370 if (socket_.get()) {
366 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete, 371 EXPECT_CALL(handler_, OnCloseComplete(net::OK));
367 base::Unretained(&handler_))); 372 socket_->Close(base::Bind(&CompleteHandler::OnCloseComplete,
373 base::Unretained(&handler_)));
374 }
368 } 375 }
369 376
370 // The caller can specify non-standard namespaces by setting "auth_namespace" 377 // The caller can specify non-standard namespaces by setting "auth_namespace"
371 // (useful for negative test cases.) 378 // (useful for negative test cases.)
372 void SetupAuthMessage( 379 void SetupAuthMessage(
373 const char* auth_namespace = "urn:x-cast:com.google.cast.tp.deviceauth") { 380 const char* auth_namespace = "urn:x-cast:com.google.cast.tp.deviceauth") {
374 // Create a test auth request. 381 // Create a test auth request.
375 CastMessage request; 382 CastMessage request;
376 CreateAuthChallengeMessage(&request); 383 CreateAuthChallengeMessage(&request);
377 ASSERT_TRUE(CastSocket::Serialize(request, &auth_request_)); 384 ASSERT_TRUE(MessageFramer::Serialize(request, &auth_request_));
378 385
379 // Create a test auth reply. 386 // Create a test auth reply.
380 MessageInfo reply; 387 MessageInfo reply;
381 CreateBinaryMessage( 388 CreateBinaryMessage(
382 auth_namespace, "sender-0", "receiver-0", "abcd", &reply); 389 auth_namespace, "sender-0", "receiver-0", "abcd", &reply);
383 CastMessage reply_msg; 390 CastMessage reply_msg;
384 ASSERT_TRUE(MessageInfoToCastMessage(reply, &reply_msg)); 391 ASSERT_TRUE(MessageInfoToCastMessage(reply, &reply_msg));
385 ASSERT_TRUE(CastSocket::Serialize(reply_msg, &auth_reply_)); 392 ASSERT_TRUE(MessageFramer::Serialize(reply_msg, &auth_reply_));
386 } 393 }
387 394
388 void CreateCastSocket() { 395 void CreateCastSocket() {
389 socket_ = TestCastSocket::Create(&mock_delegate_, logger_.get()); 396 socket_ = TestCastSocket::Create(&mock_delegate_, logger_.get());
390 } 397 }
391 398
392 void CreateCastSocketSecure() { 399 void CreateCastSocketSecure() {
393 socket_ = TestCastSocket::CreateSecure(&mock_delegate_, logger_.get()); 400 socket_ = TestCastSocket::CreateSecure(&mock_delegate_, logger_.get());
394 } 401 }
395 402
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 945 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
939 } 946 }
940 947
941 // Test write error - very large message 948 // Test write error - very large message
942 TEST_F(CastSocketTest, TestWriteErrorLargeMessage) { 949 TEST_F(CastSocketTest, TestWriteErrorLargeMessage) {
943 CreateCastSocket(); 950 CreateCastSocket();
944 ConnectHelper(); 951 ConnectHelper();
945 SetupAuthMessage(); 952 SetupAuthMessage();
946 953
947 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED)); 954 EXPECT_CALL(handler_, OnWriteComplete(net::ERR_FAILED));
948 size_t size = CastSocket::MessageHeader::max_message_size() + 1; 955 size_t size = MessageFramer::MessageHeader::max_message_size() + 1;
949 test_messages_[0].data.reset( 956 test_messages_[0].data.reset(
950 new base::StringValue(std::string(size, 'a'))); 957 new base::StringValue(std::string(size, 'a')));
951 socket_->SendMessage(test_messages_[0], 958 socket_->SendMessage(test_messages_[0],
952 base::Bind(&CompleteHandler::OnWriteComplete, 959 base::Bind(&CompleteHandler::OnWriteComplete,
953 base::Unretained(&handler_))); 960 base::Unretained(&handler_)));
954 961
955 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state()); 962 EXPECT_EQ(cast_channel::READY_STATE_OPEN, socket_->ready_state());
956 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state()); 963 EXPECT_EQ(cast_channel::CHANNEL_ERROR_NONE, socket_->error_state());
957 } 964 }
958 965
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1156 ConnectHelper(); 1163 ConnectHelper();
1157 1164
1158 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 1165 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state());
1159 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state()); 1166 EXPECT_EQ(cast_channel::CHANNEL_ERROR_SOCKET_ERROR, socket_->error_state());
1160 } 1167 }
1161 1168
1162 // Test read error - header parse error 1169 // Test read error - header parse error
1163 TEST_F(CastSocketTest, TestReadHeaderParseError) { 1170 TEST_F(CastSocketTest, TestReadHeaderParseError) {
1164 CreateCastSocket(); 1171 CreateCastSocket();
1165 SetupAuthMessage(); 1172 SetupAuthMessage();
1166 uint32 body_size = base::HostToNet32( 1173
1167 CastSocket::MessageHeader::max_message_size() + 1); 1174 uint32 body_size =
1175 base::HostToNet32(MessageFramer::MessageHeader::max_message_size() + 1);
1168 // TODO(munjal): Add a method to cast_message_util.h to serialize messages 1176 // TODO(munjal): Add a method to cast_message_util.h to serialize messages
1169 char header[sizeof(body_size)]; 1177 char header[sizeof(body_size)];
1170 memcpy(&header, &body_size, arraysize(header)); 1178 memcpy(&header, &body_size, arraysize(header));
1171 socket_->AddReadResult(net::SYNCHRONOUS, header, arraysize(header)); 1179 socket_->AddReadResult(net::SYNCHRONOUS, header, arraysize(header));
1172 EXPECT_CALL(mock_delegate_, 1180 EXPECT_CALL(mock_delegate_,
1173 OnError(socket_.get(), 1181 OnError(socket_.get(),
1174 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, 1182 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE,
1175 A<const LastErrors&>())); 1183 A<const LastErrors&>()));
1176 ConnectHelper(); 1184 ConnectHelper();
1177 1185
(...skipping 15 matching lines...) Expand all
1193 EXPECT_CALL(mock_delegate_, 1201 EXPECT_CALL(mock_delegate_,
1194 OnError(socket_.get(), 1202 OnError(socket_.get(),
1195 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, 1203 cast_channel::CHANNEL_ERROR_INVALID_MESSAGE,
1196 A<const LastErrors&>())); 1204 A<const LastErrors&>()));
1197 ConnectHelper(); 1205 ConnectHelper();
1198 1206
1199 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state()); 1207 EXPECT_EQ(cast_channel::READY_STATE_CLOSED, socket_->ready_state());
1200 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE, 1208 EXPECT_EQ(cast_channel::CHANNEL_ERROR_INVALID_MESSAGE,
1201 socket_->error_state()); 1209 socket_->error_state());
1202 } 1210 }
1203
1204 } // namespace cast_channel 1211 } // namespace cast_channel
1205 } // namespace core_api 1212 } // namespace core_api
1206 } // namespace extensions 1213 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/api/cast_channel/cast_socket.cc ('k') | extensions/extensions.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698