Index: extensions/browser/api/cast_channel/logger_unittest.cc |
diff --git a/extensions/browser/api/cast_channel/logger_unittest.cc b/extensions/browser/api/cast_channel/logger_unittest.cc |
index d1c310d6015382b1a2bbe102a670ca4b8060292f..a8117096b7a0ac85cde9635d96b1d84eedda3e84 100644 |
--- a/extensions/browser/api/cast_channel/logger_unittest.cc |
+++ b/extensions/browser/api/cast_channel/logger_unittest.cc |
@@ -7,6 +7,7 @@ |
#include "extensions/browser/api/cast_channel/logger.h" |
#include "extensions/browser/api/cast_channel/logger_util.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/zlib/zlib.h" |
namespace extensions { |
namespace core_api { |
@@ -28,6 +29,56 @@ class CastChannelLoggerTest : public testing::Test { |
base::TimeTicks())) {} |
virtual ~CastChannelLoggerTest() {} |
+ bool Uncompress(const char* input, int length, std::string* output) { |
+ z_stream stream = {0}; |
+ |
+ stream.next_in = reinterpret_cast<uint8*>(const_cast<char*>(input)); |
+ stream.avail_in = length; |
+ stream.next_out = reinterpret_cast<uint8*>(&(*output)[0]); |
+ stream.avail_out = output->size(); |
+ |
+ bool success = false; |
+ while (stream.avail_in > 0 && stream.avail_out > 0) { |
+ // 16 is added to read in gzip format. |
+ int result = inflateInit2(&stream, MAX_WBITS + 16); |
+ DCHECK_EQ(Z_OK, result); |
+ |
+ result = inflate(&stream, Z_FINISH); |
+ success = (result == Z_STREAM_END); |
+ if (!success) { |
+ DVLOG(2) << "inflate() failed. Result: " << result; |
+ break; |
+ } |
+ |
+ result = inflateEnd(&stream); |
+ DCHECK(result == Z_OK); |
+ } |
+ |
+ if (stream.avail_in == 0) { |
+ success = true; |
+ output->resize(output->size() - stream.avail_out); |
+ } |
+ return success; |
+ } |
+ |
+ scoped_ptr<Log> GetLog() { |
+ size_t length = 0; |
+ scoped_ptr<char[]> output = logger_->GetLogs(&length); |
+ if (!output.get()) |
+ return scoped_ptr<Log>(); |
+ |
+ // 20kb should be enough for test purposes. |
+ std::string uncompressed(20000, 0); |
+ if (!Uncompress(output.get(), length, &uncompressed)) |
+ return scoped_ptr<Log>(); |
+ |
+ scoped_ptr<Log> log(new Log); |
+ if (!log->ParseFromString(uncompressed)) |
+ return scoped_ptr<Log>(); |
+ |
+ return log.Pass(); |
+ } |
+ |
protected: |
base::SimpleTestTickClock* clock_; |
scoped_refptr<Logger> logger_; |
@@ -59,14 +110,6 @@ TEST_F(CastChannelLoggerTest, BasicLogging) { |
kTestNssErrorCode); |
logger_->LogSocketChallengeReplyEvent(2, auth_result); |
- std::string output; |
- bool success = logger_->LogToString(&output); |
- ASSERT_TRUE(success); |
- |
- Log log; |
- success = log.ParseFromString(output); |
- ASSERT_TRUE(success); |
- |
LastErrors last_errors = logger_->GetLastErrors(2); |
EXPECT_EQ(last_errors.event_type, proto::AUTH_CHALLENGE_REPLY); |
EXPECT_EQ(last_errors.net_return_value, 0); |
@@ -74,10 +117,13 @@ TEST_F(CastChannelLoggerTest, BasicLogging) { |
proto::CHALLENGE_REPLY_ERROR_NSS_CERT_PARSING_FAILED); |
EXPECT_EQ(last_errors.nss_error_code, kTestNssErrorCode); |
- ASSERT_EQ(2, log.aggregated_socket_event_size()); |
+ scoped_ptr<Log> log = GetLog(); |
+ ASSERT_TRUE(log.get() != NULL); |
+ |
+ ASSERT_EQ(2, log->aggregated_socket_event_size()); |
{ |
const AggregatedSocketEvent& aggregated_socket_event = |
- log.aggregated_socket_event(0); |
+ log->aggregated_socket_event(0); |
EXPECT_EQ(1, aggregated_socket_event.id()); |
EXPECT_EQ(3, aggregated_socket_event.socket_event_size()); |
{ |
@@ -100,7 +146,7 @@ TEST_F(CastChannelLoggerTest, BasicLogging) { |
} |
{ |
const AggregatedSocketEvent& aggregated_socket_event = |
- log.aggregated_socket_event(1); |
+ log->aggregated_socket_event(1); |
EXPECT_EQ(2, aggregated_socket_event.id()); |
EXPECT_EQ(4, aggregated_socket_event.socket_event_size()); |
{ |
@@ -141,20 +187,15 @@ TEST_F(CastChannelLoggerTest, TooManySockets) { |
logger_->LogSocketEvent(i, EventType::CAST_SOCKET_CREATED); |
} |
- std::string output; |
- bool success = logger_->LogToString(&output); |
- ASSERT_TRUE(success); |
- |
- Log log; |
- success = log.ParseFromString(output); |
- ASSERT_TRUE(success); |
+ scoped_ptr<Log> log = GetLog(); |
+ ASSERT_TRUE(log.get() != NULL); |
- ASSERT_EQ(kMaxSocketsToLog, log.aggregated_socket_event_size()); |
- EXPECT_EQ(5, log.num_evicted_aggregated_socket_events()); |
- EXPECT_EQ(5, log.num_evicted_socket_events()); |
+ ASSERT_EQ(kMaxSocketsToLog, log->aggregated_socket_event_size()); |
+ EXPECT_EQ(5, log->num_evicted_aggregated_socket_events()); |
+ EXPECT_EQ(5, log->num_evicted_socket_events()); |
const AggregatedSocketEvent& aggregated_socket_event = |
- log.aggregated_socket_event(0); |
+ log->aggregated_socket_event(0); |
EXPECT_EQ(5, aggregated_socket_event.id()); |
} |
@@ -164,20 +205,15 @@ TEST_F(CastChannelLoggerTest, TooManyEvents) { |
clock_->Advance(base::TimeDelta::FromMicroseconds(1)); |
} |
- std::string output; |
- bool success = logger_->LogToString(&output); |
- ASSERT_TRUE(success); |
+ scoped_ptr<Log> log = GetLog(); |
+ ASSERT_TRUE(log.get() != NULL); |
- Log log; |
- success = log.ParseFromString(output); |
- ASSERT_TRUE(success); |
- |
- ASSERT_EQ(1, log.aggregated_socket_event_size()); |
- EXPECT_EQ(0, log.num_evicted_aggregated_socket_events()); |
- EXPECT_EQ(5, log.num_evicted_socket_events()); |
+ ASSERT_EQ(1, log->aggregated_socket_event_size()); |
+ EXPECT_EQ(0, log->num_evicted_aggregated_socket_events()); |
+ EXPECT_EQ(5, log->num_evicted_socket_events()); |
const AggregatedSocketEvent& aggregated_socket_event = |
- log.aggregated_socket_event(0); |
+ log->aggregated_socket_event(0); |
ASSERT_EQ(kMaxEventsPerSocket, aggregated_socket_event.socket_event_size()); |
EXPECT_EQ(5, aggregated_socket_event.socket_event(0).timestamp_micros()); |
} |
@@ -185,24 +221,17 @@ TEST_F(CastChannelLoggerTest, TooManyEvents) { |
TEST_F(CastChannelLoggerTest, Reset) { |
logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); |
- std::string output; |
- bool success = logger_->LogToString(&output); |
- ASSERT_TRUE(success); |
- |
- Log log; |
- success = log.ParseFromString(output); |
- ASSERT_TRUE(success); |
+ scoped_ptr<Log> log = GetLog(); |
+ ASSERT_TRUE(log.get() != NULL); |
- EXPECT_EQ(1, log.aggregated_socket_event_size()); |
+ EXPECT_EQ(1, log->aggregated_socket_event_size()); |
logger_->Reset(); |
- success = logger_->LogToString(&output); |
- ASSERT_TRUE(success); |
- success = log.ParseFromString(output); |
- ASSERT_TRUE(success); |
+ log = GetLog(); |
+ ASSERT_TRUE(log.get() != NULL); |
- EXPECT_EQ(0, log.aggregated_socket_event_size()); |
+ EXPECT_EQ(0, log->aggregated_socket_event_size()); |
} |
} // namespace cast_channel |