| OLD | NEW |
| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/test/simple_test_clock.h" | 10 #include "base/test/simple_test_clock.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 using proto::AggregatedSocketEvent; | 22 using proto::AggregatedSocketEvent; |
| 23 using proto::EventType; | 23 using proto::EventType; |
| 24 using proto::Log; | 24 using proto::Log; |
| 25 using proto::SocketEvent; | 25 using proto::SocketEvent; |
| 26 | 26 |
| 27 class CastChannelLoggerTest : public testing::Test { | 27 class CastChannelLoggerTest : public testing::Test { |
| 28 public: | 28 public: |
| 29 // |logger_| will take ownership of |clock_|. | 29 // |logger_| will take ownership of |clock_|. |
| 30 CastChannelLoggerTest() | 30 CastChannelLoggerTest() |
| 31 : clock_(new base::SimpleTestClock), | 31 : clock_(new base::SimpleTestClock), |
| 32 logger_(new Logger(scoped_ptr<base::Clock>(clock_), base::Time())) {} | 32 logger_( |
| 33 new Logger(std::unique_ptr<base::Clock>(clock_), base::Time())) {} |
| 33 ~CastChannelLoggerTest() override {} | 34 ~CastChannelLoggerTest() override {} |
| 34 | 35 |
| 35 bool Uncompress(const char* input, int length, std::string* output) { | 36 bool Uncompress(const char* input, int length, std::string* output) { |
| 36 z_stream stream = {0}; | 37 z_stream stream = {0}; |
| 37 | 38 |
| 38 stream.next_in = reinterpret_cast<uint8_t*>(const_cast<char*>(input)); | 39 stream.next_in = reinterpret_cast<uint8_t*>(const_cast<char*>(input)); |
| 39 stream.avail_in = length; | 40 stream.avail_in = length; |
| 40 stream.next_out = reinterpret_cast<uint8_t*>(&(*output)[0]); | 41 stream.next_out = reinterpret_cast<uint8_t*>(&(*output)[0]); |
| 41 stream.avail_out = output->size(); | 42 stream.avail_out = output->size(); |
| 42 | 43 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 57 DCHECK(result == Z_OK); | 58 DCHECK(result == Z_OK); |
| 58 } | 59 } |
| 59 | 60 |
| 60 if (stream.avail_in == 0) { | 61 if (stream.avail_in == 0) { |
| 61 success = true; | 62 success = true; |
| 62 output->resize(output->size() - stream.avail_out); | 63 output->resize(output->size() - stream.avail_out); |
| 63 } | 64 } |
| 64 return success; | 65 return success; |
| 65 } | 66 } |
| 66 | 67 |
| 67 scoped_ptr<Log> GetLog() { | 68 std::unique_ptr<Log> GetLog() { |
| 68 size_t length = 0; | 69 size_t length = 0; |
| 69 scoped_ptr<char[]> output = logger_->GetLogs(&length); | 70 std::unique_ptr<char[]> output = logger_->GetLogs(&length); |
| 70 if (!output.get()) | 71 if (!output.get()) |
| 71 return scoped_ptr<Log>(); | 72 return std::unique_ptr<Log>(); |
| 72 | 73 |
| 73 // 20kb should be enough for test purposes. | 74 // 20kb should be enough for test purposes. |
| 74 std::string uncompressed(20000, 0); | 75 std::string uncompressed(20000, 0); |
| 75 if (!Uncompress(output.get(), length, &uncompressed)) | 76 if (!Uncompress(output.get(), length, &uncompressed)) |
| 76 return scoped_ptr<Log>(); | 77 return std::unique_ptr<Log>(); |
| 77 | 78 |
| 78 scoped_ptr<Log> log(new Log); | 79 std::unique_ptr<Log> log(new Log); |
| 79 if (!log->ParseFromString(uncompressed)) | 80 if (!log->ParseFromString(uncompressed)) |
| 80 return scoped_ptr<Log>(); | 81 return std::unique_ptr<Log>(); |
| 81 | 82 |
| 82 return log; | 83 return log; |
| 83 } | 84 } |
| 84 | 85 |
| 85 protected: | 86 protected: |
| 86 base::SimpleTestClock* clock_; | 87 base::SimpleTestClock* clock_; |
| 87 scoped_refptr<Logger> logger_; | 88 scoped_refptr<Logger> logger_; |
| 88 }; | 89 }; |
| 89 | 90 |
| 90 TEST_F(CastChannelLoggerTest, BasicLogging) { | 91 TEST_F(CastChannelLoggerTest, BasicLogging) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 110 auth_result = | 111 auth_result = |
| 111 AuthResult("Parsing failed", AuthResult::ERROR_CERT_PARSING_FAILED); | 112 AuthResult("Parsing failed", AuthResult::ERROR_CERT_PARSING_FAILED); |
| 112 logger_->LogSocketChallengeReplyEvent(2, auth_result); | 113 logger_->LogSocketChallengeReplyEvent(2, auth_result); |
| 113 | 114 |
| 114 LastErrors last_errors = logger_->GetLastErrors(2); | 115 LastErrors last_errors = logger_->GetLastErrors(2); |
| 115 EXPECT_EQ(last_errors.event_type, proto::AUTH_CHALLENGE_REPLY); | 116 EXPECT_EQ(last_errors.event_type, proto::AUTH_CHALLENGE_REPLY); |
| 116 EXPECT_EQ(last_errors.net_return_value, net::OK); | 117 EXPECT_EQ(last_errors.net_return_value, net::OK); |
| 117 EXPECT_EQ(last_errors.challenge_reply_error_type, | 118 EXPECT_EQ(last_errors.challenge_reply_error_type, |
| 118 proto::CHALLENGE_REPLY_ERROR_CERT_PARSING_FAILED); | 119 proto::CHALLENGE_REPLY_ERROR_CERT_PARSING_FAILED); |
| 119 | 120 |
| 120 scoped_ptr<Log> log = GetLog(); | 121 std::unique_ptr<Log> log = GetLog(); |
| 121 ASSERT_TRUE(log); | 122 ASSERT_TRUE(log); |
| 122 | 123 |
| 123 ASSERT_EQ(2, log->aggregated_socket_event_size()); | 124 ASSERT_EQ(2, log->aggregated_socket_event_size()); |
| 124 { | 125 { |
| 125 const AggregatedSocketEvent& aggregated_socket_event = | 126 const AggregatedSocketEvent& aggregated_socket_event = |
| 126 log->aggregated_socket_event(0); | 127 log->aggregated_socket_event(0); |
| 127 EXPECT_EQ(1, aggregated_socket_event.id()); | 128 EXPECT_EQ(1, aggregated_socket_event.id()); |
| 128 EXPECT_EQ(3, aggregated_socket_event.socket_event_size()); | 129 EXPECT_EQ(3, aggregated_socket_event.socket_event_size()); |
| 129 { | 130 { |
| 130 const SocketEvent& event = aggregated_socket_event.socket_event(0); | 131 const SocketEvent& event = aggregated_socket_event.socket_event(0); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 logger_->LogSocketEventWithRv(1, EventType::SOCKET_WRITE, 20); | 241 logger_->LogSocketEventWithRv(1, EventType::SOCKET_WRITE, 20); |
| 241 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); | 242 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); |
| 242 | 243 |
| 243 logger_->LogSocketEventWithRv(2, EventType::SOCKET_READ, 100); | 244 logger_->LogSocketEventWithRv(2, EventType::SOCKET_READ, 100); |
| 244 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); | 245 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); |
| 245 logger_->LogSocketEventWithRv(2, EventType::SOCKET_WRITE, 100); | 246 logger_->LogSocketEventWithRv(2, EventType::SOCKET_WRITE, 100); |
| 246 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); | 247 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); |
| 247 logger_->LogSocketEventWithRv(2, EventType::SOCKET_WRITE, -5); | 248 logger_->LogSocketEventWithRv(2, EventType::SOCKET_WRITE, -5); |
| 248 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); | 249 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); |
| 249 | 250 |
| 250 scoped_ptr<Log> log = GetLog(); | 251 std::unique_ptr<Log> log = GetLog(); |
| 251 ASSERT_TRUE(log); | 252 ASSERT_TRUE(log); |
| 252 | 253 |
| 253 ASSERT_EQ(2, log->aggregated_socket_event_size()); | 254 ASSERT_EQ(2, log->aggregated_socket_event_size()); |
| 254 { | 255 { |
| 255 const AggregatedSocketEvent& aggregated_socket_event = | 256 const AggregatedSocketEvent& aggregated_socket_event = |
| 256 log->aggregated_socket_event(0); | 257 log->aggregated_socket_event(0); |
| 257 EXPECT_EQ(1, aggregated_socket_event.id()); | 258 EXPECT_EQ(1, aggregated_socket_event.id()); |
| 258 EXPECT_EQ(4, aggregated_socket_event.socket_event_size()); | 259 EXPECT_EQ(4, aggregated_socket_event.socket_event_size()); |
| 259 EXPECT_EQ(80, aggregated_socket_event.bytes_read()); | 260 EXPECT_EQ(80, aggregated_socket_event.bytes_read()); |
| 260 EXPECT_EQ(20, aggregated_socket_event.bytes_written()); | 261 EXPECT_EQ(20, aggregated_socket_event.bytes_written()); |
| 261 } | 262 } |
| 262 { | 263 { |
| 263 const AggregatedSocketEvent& aggregated_socket_event = | 264 const AggregatedSocketEvent& aggregated_socket_event = |
| 264 log->aggregated_socket_event(1); | 265 log->aggregated_socket_event(1); |
| 265 EXPECT_EQ(2, aggregated_socket_event.id()); | 266 EXPECT_EQ(2, aggregated_socket_event.id()); |
| 266 EXPECT_EQ(3, aggregated_socket_event.socket_event_size()); | 267 EXPECT_EQ(3, aggregated_socket_event.socket_event_size()); |
| 267 EXPECT_EQ(100, aggregated_socket_event.bytes_read()); | 268 EXPECT_EQ(100, aggregated_socket_event.bytes_read()); |
| 268 EXPECT_EQ(100, aggregated_socket_event.bytes_written()); | 269 EXPECT_EQ(100, aggregated_socket_event.bytes_written()); |
| 269 } | 270 } |
| 270 } | 271 } |
| 271 | 272 |
| 272 TEST_F(CastChannelLoggerTest, TooManySockets) { | 273 TEST_F(CastChannelLoggerTest, TooManySockets) { |
| 273 for (int i = 0; i < kMaxSocketsToLog + 5; i++) { | 274 for (int i = 0; i < kMaxSocketsToLog + 5; i++) { |
| 274 logger_->LogSocketEvent(i, EventType::CAST_SOCKET_CREATED); | 275 logger_->LogSocketEvent(i, EventType::CAST_SOCKET_CREATED); |
| 275 } | 276 } |
| 276 | 277 |
| 277 scoped_ptr<Log> log = GetLog(); | 278 std::unique_ptr<Log> log = GetLog(); |
| 278 ASSERT_TRUE(log); | 279 ASSERT_TRUE(log); |
| 279 | 280 |
| 280 ASSERT_EQ(kMaxSocketsToLog, log->aggregated_socket_event_size()); | 281 ASSERT_EQ(kMaxSocketsToLog, log->aggregated_socket_event_size()); |
| 281 EXPECT_EQ(5, log->num_evicted_aggregated_socket_events()); | 282 EXPECT_EQ(5, log->num_evicted_aggregated_socket_events()); |
| 282 EXPECT_EQ(5, log->num_evicted_socket_events()); | 283 EXPECT_EQ(5, log->num_evicted_socket_events()); |
| 283 | 284 |
| 284 const AggregatedSocketEvent& aggregated_socket_event = | 285 const AggregatedSocketEvent& aggregated_socket_event = |
| 285 log->aggregated_socket_event(0); | 286 log->aggregated_socket_event(0); |
| 286 EXPECT_EQ(5, aggregated_socket_event.id()); | 287 EXPECT_EQ(5, aggregated_socket_event.id()); |
| 287 } | 288 } |
| 288 | 289 |
| 289 TEST_F(CastChannelLoggerTest, TooManyEvents) { | 290 TEST_F(CastChannelLoggerTest, TooManyEvents) { |
| 290 for (int i = 0; i < kMaxEventsPerSocket + 5; i++) { | 291 for (int i = 0; i < kMaxEventsPerSocket + 5; i++) { |
| 291 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); | 292 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); |
| 292 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); | 293 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); |
| 293 } | 294 } |
| 294 | 295 |
| 295 scoped_ptr<Log> log = GetLog(); | 296 std::unique_ptr<Log> log = GetLog(); |
| 296 ASSERT_TRUE(log); | 297 ASSERT_TRUE(log); |
| 297 | 298 |
| 298 ASSERT_EQ(1, log->aggregated_socket_event_size()); | 299 ASSERT_EQ(1, log->aggregated_socket_event_size()); |
| 299 EXPECT_EQ(0, log->num_evicted_aggregated_socket_events()); | 300 EXPECT_EQ(0, log->num_evicted_aggregated_socket_events()); |
| 300 EXPECT_EQ(5, log->num_evicted_socket_events()); | 301 EXPECT_EQ(5, log->num_evicted_socket_events()); |
| 301 | 302 |
| 302 const AggregatedSocketEvent& aggregated_socket_event = | 303 const AggregatedSocketEvent& aggregated_socket_event = |
| 303 log->aggregated_socket_event(0); | 304 log->aggregated_socket_event(0); |
| 304 ASSERT_EQ(kMaxEventsPerSocket, aggregated_socket_event.socket_event_size()); | 305 ASSERT_EQ(kMaxEventsPerSocket, aggregated_socket_event.socket_event_size()); |
| 305 EXPECT_EQ(5, aggregated_socket_event.socket_event(0).timestamp_micros()); | 306 EXPECT_EQ(5, aggregated_socket_event.socket_event(0).timestamp_micros()); |
| 306 } | 307 } |
| 307 | 308 |
| 308 TEST_F(CastChannelLoggerTest, Reset) { | 309 TEST_F(CastChannelLoggerTest, Reset) { |
| 309 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); | 310 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); |
| 310 | 311 |
| 311 scoped_ptr<Log> log = GetLog(); | 312 std::unique_ptr<Log> log = GetLog(); |
| 312 ASSERT_TRUE(log); | 313 ASSERT_TRUE(log); |
| 313 | 314 |
| 314 EXPECT_EQ(1, log->aggregated_socket_event_size()); | 315 EXPECT_EQ(1, log->aggregated_socket_event_size()); |
| 315 | 316 |
| 316 logger_->Reset(); | 317 logger_->Reset(); |
| 317 | 318 |
| 318 log = GetLog(); | 319 log = GetLog(); |
| 319 ASSERT_TRUE(log); | 320 ASSERT_TRUE(log); |
| 320 | 321 |
| 321 EXPECT_EQ(0, log->aggregated_socket_event_size()); | 322 EXPECT_EQ(0, log->aggregated_socket_event_size()); |
| 322 } | 323 } |
| 323 | 324 |
| 324 } // namespace cast_channel | 325 } // namespace cast_channel |
| 325 } // namespace api | 326 } // namespace api |
| 326 } // namespace extensions | 327 } // namespace extensions |
| OLD | NEW |