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

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

Issue 456213002: Cast channel: Add cast.channel.getLogs extension API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 4 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
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 "base/test/simple_test_tick_clock.h" 5 #include "base/test/simple_test_tick_clock.h"
6 #include "extensions/browser/api/cast_channel/cast_auth_util.h" 6 #include "extensions/browser/api/cast_channel/cast_auth_util.h"
7 #include "extensions/browser/api/cast_channel/logger.h" 7 #include "extensions/browser/api/cast_channel/logger.h"
8 #include "extensions/browser/api/cast_channel/logger_util.h" 8 #include "extensions/browser/api/cast_channel/logger_util.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/zlib/zlib.h"
10 11
11 namespace extensions { 12 namespace extensions {
12 namespace core_api { 13 namespace core_api {
13 namespace cast_channel { 14 namespace cast_channel {
14 15
15 const int kTestNssErrorCode = -8164; 16 const int kTestNssErrorCode = -8164;
16 17
17 using proto::AggregatedSocketEvent; 18 using proto::AggregatedSocketEvent;
18 using proto::EventType; 19 using proto::EventType;
19 using proto::Log; 20 using proto::Log;
20 using proto::SocketEvent; 21 using proto::SocketEvent;
21 22
22 class CastChannelLoggerTest : public testing::Test { 23 class CastChannelLoggerTest : public testing::Test {
23 public: 24 public:
24 // |logger_| will take ownership of |clock_|. 25 // |logger_| will take ownership of |clock_|.
25 CastChannelLoggerTest() 26 CastChannelLoggerTest()
26 : clock_(new base::SimpleTestTickClock), 27 : clock_(new base::SimpleTestTickClock),
27 logger_(new Logger(scoped_ptr<base::TickClock>(clock_), 28 logger_(new Logger(scoped_ptr<base::TickClock>(clock_),
28 base::TimeTicks())) {} 29 base::TimeTicks())) {}
29 virtual ~CastChannelLoggerTest() {} 30 virtual ~CastChannelLoggerTest() {}
30 31
32 bool Uncompress(const char* input, int length, std::string* output) {
33 z_stream stream = {0};
34
35 stream.next_in = reinterpret_cast<uint8*>(const_cast<char*>(input));
36 stream.avail_in = length;
37 stream.next_out = reinterpret_cast<uint8*>(&(*output)[0]);
38 stream.avail_out = output->size();
39
40 bool success = false;
41 while (stream.avail_in > 0 && stream.avail_out > 0) {
42 // 16 is added to read in gzip format.
43 int result = inflateInit2(&stream, MAX_WBITS + 16);
44 DCHECK_EQ(Z_OK, result);
45
46 result = inflate(&stream, Z_FINISH);
47 success = (result == Z_STREAM_END);
48 if (!success) {
49 DVLOG(2) << "inflate() failed. Result: " << result;
50 break;
51 }
52
53 result = inflateEnd(&stream);
54 DCHECK(result == Z_OK);
55 }
56
57 if (stream.avail_in == 0) {
58 success = true;
59 output->resize(output->size() - stream.avail_out);
60 }
61 return success;
62 }
63
64 scoped_ptr<Log> GetLog() {
65 size_t length = 0;
66 scoped_ptr<char[]> output = logger_->GetLogs(&length);
67 if (!output.get())
68 return scoped_ptr<Log>();
69
70 // 20kb should be enough for test purposes.
71 std::string uncompressed(20000, 0);
72 if (!Uncompress(output.get(), length, &uncompressed))
73 return scoped_ptr<Log>();
74
75 scoped_ptr<Log> log(new Log);
76 if (!log->ParseFromString(uncompressed))
77 return scoped_ptr<Log>();
78
79 return log.Pass();
80 }
81
31 protected: 82 protected:
32 base::SimpleTestTickClock* clock_; 83 base::SimpleTestTickClock* clock_;
33 scoped_refptr<Logger> logger_; 84 scoped_refptr<Logger> logger_;
34 }; 85 };
35 86
36 TEST_F(CastChannelLoggerTest, BasicLogging) { 87 TEST_F(CastChannelLoggerTest, BasicLogging) {
37 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); 88 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED);
38 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 89 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
39 logger_->LogSocketEventWithDetails( 90 logger_->LogSocketEventWithDetails(
40 1, EventType::TCP_SOCKET_CONNECT, "TCP socket"); 91 1, EventType::TCP_SOCKET_CONNECT, "TCP socket");
(...skipping 11 matching lines...) Expand all
52 103
53 logger_->LogSocketChallengeReplyEvent(2, auth_result); 104 logger_->LogSocketChallengeReplyEvent(2, auth_result);
54 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 105 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
55 106
56 auth_result = 107 auth_result =
57 AuthResult::CreateWithNSSError("Parsing failed", 108 AuthResult::CreateWithNSSError("Parsing failed",
58 AuthResult::ERROR_NSS_CERT_PARSING_FAILED, 109 AuthResult::ERROR_NSS_CERT_PARSING_FAILED,
59 kTestNssErrorCode); 110 kTestNssErrorCode);
60 logger_->LogSocketChallengeReplyEvent(2, auth_result); 111 logger_->LogSocketChallengeReplyEvent(2, auth_result);
61 112
62 std::string output;
63 bool success = logger_->LogToString(&output);
64 ASSERT_TRUE(success);
65
66 Log log;
67 success = log.ParseFromString(output);
68 ASSERT_TRUE(success);
69
70 LastErrors last_errors = logger_->GetLastErrors(2); 113 LastErrors last_errors = logger_->GetLastErrors(2);
71 EXPECT_EQ(last_errors.event_type, proto::AUTH_CHALLENGE_REPLY); 114 EXPECT_EQ(last_errors.event_type, proto::AUTH_CHALLENGE_REPLY);
72 EXPECT_EQ(last_errors.net_return_value, 0); 115 EXPECT_EQ(last_errors.net_return_value, 0);
73 EXPECT_EQ(last_errors.challenge_reply_error_type, 116 EXPECT_EQ(last_errors.challenge_reply_error_type,
74 proto::CHALLENGE_REPLY_ERROR_NSS_CERT_PARSING_FAILED); 117 proto::CHALLENGE_REPLY_ERROR_NSS_CERT_PARSING_FAILED);
75 EXPECT_EQ(last_errors.nss_error_code, kTestNssErrorCode); 118 EXPECT_EQ(last_errors.nss_error_code, kTestNssErrorCode);
76 119
77 ASSERT_EQ(2, log.aggregated_socket_event_size()); 120 scoped_ptr<Log> log = GetLog();
121 ASSERT_TRUE(log.get() != NULL);
122
123 ASSERT_EQ(2, log->aggregated_socket_event_size());
78 { 124 {
79 const AggregatedSocketEvent& aggregated_socket_event = 125 const AggregatedSocketEvent& aggregated_socket_event =
80 log.aggregated_socket_event(0); 126 log->aggregated_socket_event(0);
81 EXPECT_EQ(1, aggregated_socket_event.id()); 127 EXPECT_EQ(1, aggregated_socket_event.id());
82 EXPECT_EQ(3, aggregated_socket_event.socket_event_size()); 128 EXPECT_EQ(3, aggregated_socket_event.socket_event_size());
83 { 129 {
84 const SocketEvent& event = aggregated_socket_event.socket_event(0); 130 const SocketEvent& event = aggregated_socket_event.socket_event(0);
85 EXPECT_EQ(EventType::CAST_SOCKET_CREATED, event.type()); 131 EXPECT_EQ(EventType::CAST_SOCKET_CREATED, event.type());
86 EXPECT_EQ(0, event.timestamp_micros()); 132 EXPECT_EQ(0, event.timestamp_micros());
87 } 133 }
88 { 134 {
89 const SocketEvent& event = aggregated_socket_event.socket_event(1); 135 const SocketEvent& event = aggregated_socket_event.socket_event(1);
90 EXPECT_EQ(EventType::TCP_SOCKET_CONNECT, event.type()); 136 EXPECT_EQ(EventType::TCP_SOCKET_CONNECT, event.type());
91 EXPECT_EQ(1, event.timestamp_micros()); 137 EXPECT_EQ(1, event.timestamp_micros());
92 EXPECT_EQ("TCP socket", event.details()); 138 EXPECT_EQ("TCP socket", event.details());
93 } 139 }
94 { 140 {
95 const SocketEvent& event = aggregated_socket_event.socket_event(2); 141 const SocketEvent& event = aggregated_socket_event.socket_event(2);
96 EXPECT_EQ(EventType::SSL_SOCKET_CONNECT, event.type()); 142 EXPECT_EQ(EventType::SSL_SOCKET_CONNECT, event.type());
97 EXPECT_EQ(3, event.timestamp_micros()); 143 EXPECT_EQ(3, event.timestamp_micros());
98 EXPECT_EQ(-1, event.net_return_value()); 144 EXPECT_EQ(-1, event.net_return_value());
99 } 145 }
100 } 146 }
101 { 147 {
102 const AggregatedSocketEvent& aggregated_socket_event = 148 const AggregatedSocketEvent& aggregated_socket_event =
103 log.aggregated_socket_event(1); 149 log->aggregated_socket_event(1);
104 EXPECT_EQ(2, aggregated_socket_event.id()); 150 EXPECT_EQ(2, aggregated_socket_event.id());
105 EXPECT_EQ(4, aggregated_socket_event.socket_event_size()); 151 EXPECT_EQ(4, aggregated_socket_event.socket_event_size());
106 { 152 {
107 const SocketEvent& event = aggregated_socket_event.socket_event(0); 153 const SocketEvent& event = aggregated_socket_event.socket_event(0);
108 EXPECT_EQ(EventType::CAST_SOCKET_CREATED, event.type()); 154 EXPECT_EQ(EventType::CAST_SOCKET_CREATED, event.type());
109 EXPECT_EQ(2, event.timestamp_micros()); 155 EXPECT_EQ(2, event.timestamp_micros());
110 } 156 }
111 { 157 {
112 const SocketEvent& event = aggregated_socket_event.socket_event(1); 158 const SocketEvent& event = aggregated_socket_event.socket_event(1);
113 EXPECT_EQ(EventType::MESSAGE_ENQUEUED, event.type()); 159 EXPECT_EQ(EventType::MESSAGE_ENQUEUED, event.type());
(...skipping 20 matching lines...) Expand all
134 EXPECT_EQ(kTestNssErrorCode, event.nss_error_code()); 180 EXPECT_EQ(kTestNssErrorCode, event.nss_error_code());
135 } 181 }
136 } 182 }
137 } 183 }
138 184
139 TEST_F(CastChannelLoggerTest, TooManySockets) { 185 TEST_F(CastChannelLoggerTest, TooManySockets) {
140 for (int i = 0; i < kMaxSocketsToLog + 5; i++) { 186 for (int i = 0; i < kMaxSocketsToLog + 5; i++) {
141 logger_->LogSocketEvent(i, EventType::CAST_SOCKET_CREATED); 187 logger_->LogSocketEvent(i, EventType::CAST_SOCKET_CREATED);
142 } 188 }
143 189
144 std::string output; 190 scoped_ptr<Log> log = GetLog();
145 bool success = logger_->LogToString(&output); 191 ASSERT_TRUE(log.get() != NULL);
146 ASSERT_TRUE(success);
147 192
148 Log log; 193 ASSERT_EQ(kMaxSocketsToLog, log->aggregated_socket_event_size());
149 success = log.ParseFromString(output); 194 EXPECT_EQ(5, log->num_evicted_aggregated_socket_events());
150 ASSERT_TRUE(success); 195 EXPECT_EQ(5, log->num_evicted_socket_events());
151
152 ASSERT_EQ(kMaxSocketsToLog, log.aggregated_socket_event_size());
153 EXPECT_EQ(5, log.num_evicted_aggregated_socket_events());
154 EXPECT_EQ(5, log.num_evicted_socket_events());
155 196
156 const AggregatedSocketEvent& aggregated_socket_event = 197 const AggregatedSocketEvent& aggregated_socket_event =
157 log.aggregated_socket_event(0); 198 log->aggregated_socket_event(0);
158 EXPECT_EQ(5, aggregated_socket_event.id()); 199 EXPECT_EQ(5, aggregated_socket_event.id());
159 } 200 }
160 201
161 TEST_F(CastChannelLoggerTest, TooManyEvents) { 202 TEST_F(CastChannelLoggerTest, TooManyEvents) {
162 for (int i = 0; i < kMaxEventsPerSocket + 5; i++) { 203 for (int i = 0; i < kMaxEventsPerSocket + 5; i++) {
163 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); 204 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED);
164 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 205 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
165 } 206 }
166 207
167 std::string output; 208 scoped_ptr<Log> log = GetLog();
168 bool success = logger_->LogToString(&output); 209 ASSERT_TRUE(log.get() != NULL);
169 ASSERT_TRUE(success);
170 210
171 Log log; 211 ASSERT_EQ(1, log->aggregated_socket_event_size());
172 success = log.ParseFromString(output); 212 EXPECT_EQ(0, log->num_evicted_aggregated_socket_events());
173 ASSERT_TRUE(success); 213 EXPECT_EQ(5, log->num_evicted_socket_events());
174
175 ASSERT_EQ(1, log.aggregated_socket_event_size());
176 EXPECT_EQ(0, log.num_evicted_aggregated_socket_events());
177 EXPECT_EQ(5, log.num_evicted_socket_events());
178 214
179 const AggregatedSocketEvent& aggregated_socket_event = 215 const AggregatedSocketEvent& aggregated_socket_event =
180 log.aggregated_socket_event(0); 216 log->aggregated_socket_event(0);
181 ASSERT_EQ(kMaxEventsPerSocket, aggregated_socket_event.socket_event_size()); 217 ASSERT_EQ(kMaxEventsPerSocket, aggregated_socket_event.socket_event_size());
182 EXPECT_EQ(5, aggregated_socket_event.socket_event(0).timestamp_micros()); 218 EXPECT_EQ(5, aggregated_socket_event.socket_event(0).timestamp_micros());
183 } 219 }
184 220
185 TEST_F(CastChannelLoggerTest, Reset) { 221 TEST_F(CastChannelLoggerTest, Reset) {
186 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); 222 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED);
187 223
188 std::string output; 224 scoped_ptr<Log> log = GetLog();
189 bool success = logger_->LogToString(&output); 225 ASSERT_TRUE(log.get() != NULL);
190 ASSERT_TRUE(success);
191 226
192 Log log; 227 EXPECT_EQ(1, log->aggregated_socket_event_size());
193 success = log.ParseFromString(output);
194 ASSERT_TRUE(success);
195
196 EXPECT_EQ(1, log.aggregated_socket_event_size());
197 228
198 logger_->Reset(); 229 logger_->Reset();
199 230
200 success = logger_->LogToString(&output); 231 log = GetLog();
201 ASSERT_TRUE(success); 232 ASSERT_TRUE(log.get() != NULL);
202 success = log.ParseFromString(output);
203 ASSERT_TRUE(success);
204 233
205 EXPECT_EQ(0, log.aggregated_socket_event_size()); 234 EXPECT_EQ(0, log->aggregated_socket_event_size());
206 } 235 }
207 236
208 } // namespace cast_channel 237 } // namespace cast_channel
209 } // namespace api 238 } // namespace api
210 } // namespace extensions 239 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/api/cast_channel/logger.cc ('k') | extensions/browser/extension_function_histogram_value.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698