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

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: ADd missing files 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 "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "third_party/zlib/zlib.h"
9 10
10 namespace extensions { 11 namespace extensions {
11 namespace core_api { 12 namespace core_api {
12 namespace cast_channel { 13 namespace cast_channel {
13 14
14 using proto::AggregatedSocketEvent; 15 using proto::AggregatedSocketEvent;
15 using proto::EventType; 16 using proto::EventType;
16 using proto::Log; 17 using proto::Log;
17 using proto::SocketEvent; 18 using proto::SocketEvent;
18 19
19 class CastChannelLoggerTest : public testing::Test { 20 class CastChannelLoggerTest : public testing::Test {
20 public: 21 public:
21 // |logger_| will take ownership of |clock_|. 22 // |logger_| will take ownership of |clock_|.
22 CastChannelLoggerTest() 23 CastChannelLoggerTest()
23 : clock_(new base::SimpleTestTickClock), 24 : clock_(new base::SimpleTestTickClock),
24 logger_(new Logger(scoped_ptr<base::TickClock>(clock_), 25 logger_(new Logger(scoped_ptr<base::TickClock>(clock_),
25 base::TimeTicks())) {} 26 base::TimeTicks())) {}
26 virtual ~CastChannelLoggerTest() {} 27 virtual ~CastChannelLoggerTest() {}
27 28
29 bool Uncompress(const std::string& input, std::string* output) {
30 z_stream stream = {0};
31
32 stream.next_in = reinterpret_cast<uint8*>(const_cast<char*>(&input[0]));
33 stream.avail_in = input.size();
34 stream.next_out = reinterpret_cast<uint8*>(&(*output)[0]);
35 stream.avail_out = output->size();
36
37 bool success = false;
38 while (stream.avail_in > 0 && stream.avail_out > 0) {
39 // 16 is added to read in gzip format.
40 int result = inflateInit2(&stream, MAX_WBITS + 16);
41 DCHECK_EQ(Z_OK, result);
42
43 result = inflate(&stream, Z_FINISH);
44 success = (result == Z_STREAM_END);
45 if (!success) {
46 DVLOG(2) << "inflate() failed. Result: " << result;
47 break;
48 }
49
50 result = inflateEnd(&stream);
51 DCHECK(result == Z_OK);
52 }
53
54 if (stream.avail_in == 0) {
55 success = true;
56 output->resize(output->size() - stream.avail_out);
57 }
58 return success;
59 }
60
28 protected: 61 protected:
29 base::SimpleTestTickClock* clock_; 62 base::SimpleTestTickClock* clock_;
30 scoped_refptr<Logger> logger_; 63 scoped_refptr<Logger> logger_;
31 }; 64 };
32 65
33 TEST_F(CastChannelLoggerTest, BasicLogging) { 66 TEST_F(CastChannelLoggerTest, BasicLogging) {
34 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); 67 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED);
35 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 68 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
36 logger_->LogSocketEventWithDetails( 69 logger_->LogSocketEventWithDetails(
37 1, EventType::TCP_SOCKET_CONNECT, "TCP socket"); 70 1, EventType::TCP_SOCKET_CONNECT, "TCP socket");
38 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 71 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
39 logger_->LogSocketEvent(2, EventType::CAST_SOCKET_CREATED); 72 logger_->LogSocketEvent(2, EventType::CAST_SOCKET_CREATED);
40 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 73 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
41 logger_->LogSocketEventWithRv(1, EventType::SSL_SOCKET_CONNECT, -1); 74 logger_->LogSocketEventWithRv(1, EventType::SSL_SOCKET_CONNECT, -1);
42 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 75 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
43 logger_->LogSocketEventForMessage( 76 logger_->LogSocketEventForMessage(
44 2, EventType::MESSAGE_ENQUEUED, "foo_namespace", "details"); 77 2, EventType::MESSAGE_ENQUEUED, "foo_namespace", "details");
45 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 78 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
46 79
47 AuthResult auth_result = 80 AuthResult auth_result =
48 AuthResult::Create("No response", AuthResult::ERROR_NO_RESPONSE); 81 AuthResult::Create("No response", AuthResult::ERROR_NO_RESPONSE);
49 82
50 logger_->LogSocketChallengeReplyEvent(2, auth_result); 83 logger_->LogSocketChallengeReplyEvent(2, auth_result);
51 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 84 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
52 85
53 auth_result = AuthResult::CreateWithNSSError( 86 auth_result = AuthResult::CreateWithNSSError(
54 "Parsing failed", AuthResult::ERROR_NSS_CERT_PARSING_FAILED, 4); 87 "Parsing failed", AuthResult::ERROR_NSS_CERT_PARSING_FAILED, 4);
55 logger_->LogSocketChallengeReplyEvent(2, auth_result); 88 logger_->LogSocketChallengeReplyEvent(2, auth_result);
56 89
57 std::string output; 90 std::string output;
mark a. foltz 2014/08/11 23:01:44 Lines 90-101 could be encapsulated in a utility fu
imcheng 2014/08/12 07:42:10 Added utility function in this test. Since we don'
58 bool success = logger_->LogToString(&output); 91 bool success = logger_->LogToString(&output);
59 ASSERT_TRUE(success); 92 ASSERT_TRUE(success);
60 93
94 // 10kb should be enough for test purposes.
95 std::string uncompressed(10000, 0);
96 success = Uncompress(output, &uncompressed);
97 ASSERT_TRUE(success);
98
61 Log log; 99 Log log;
62 success = log.ParseFromString(output); 100 success = log.ParseFromString(uncompressed);
63 ASSERT_TRUE(success); 101 ASSERT_TRUE(success);
64 102
65 ASSERT_EQ(2, log.aggregated_socket_event_size()); 103 ASSERT_EQ(2, log.aggregated_socket_event_size());
66 { 104 {
67 const AggregatedSocketEvent& aggregated_socket_event = 105 const AggregatedSocketEvent& aggregated_socket_event =
68 log.aggregated_socket_event(0); 106 log.aggregated_socket_event(0);
69 EXPECT_EQ(1, aggregated_socket_event.id()); 107 EXPECT_EQ(1, aggregated_socket_event.id());
70 EXPECT_EQ(3, aggregated_socket_event.socket_event_size()); 108 EXPECT_EQ(3, aggregated_socket_event.socket_event_size());
71 { 109 {
72 const SocketEvent& event = aggregated_socket_event.socket_event(0); 110 const SocketEvent& event = aggregated_socket_event.socket_event(0);
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 162
125 TEST_F(CastChannelLoggerTest, TooManySockets) { 163 TEST_F(CastChannelLoggerTest, TooManySockets) {
126 for (int i = 0; i < kMaxSocketsToLog + 5; i++) { 164 for (int i = 0; i < kMaxSocketsToLog + 5; i++) {
127 logger_->LogSocketEvent(i, EventType::CAST_SOCKET_CREATED); 165 logger_->LogSocketEvent(i, EventType::CAST_SOCKET_CREATED);
128 } 166 }
129 167
130 std::string output; 168 std::string output;
131 bool success = logger_->LogToString(&output); 169 bool success = logger_->LogToString(&output);
132 ASSERT_TRUE(success); 170 ASSERT_TRUE(success);
133 171
172 // 10kb should be enough for test purposes.
173 std::string uncompressed(10000, 0);
174 success = Uncompress(output, &uncompressed);
175 ASSERT_TRUE(success);
176
134 Log log; 177 Log log;
135 success = log.ParseFromString(output); 178 success = log.ParseFromString(uncompressed);
136 ASSERT_TRUE(success); 179 ASSERT_TRUE(success);
137 180
138 ASSERT_EQ(kMaxSocketsToLog, log.aggregated_socket_event_size()); 181 ASSERT_EQ(kMaxSocketsToLog, log.aggregated_socket_event_size());
139 EXPECT_EQ(5, log.num_evicted_aggregated_socket_events()); 182 EXPECT_EQ(5, log.num_evicted_aggregated_socket_events());
140 EXPECT_EQ(5, log.num_evicted_socket_events()); 183 EXPECT_EQ(5, log.num_evicted_socket_events());
141 184
142 const AggregatedSocketEvent& aggregated_socket_event = 185 const AggregatedSocketEvent& aggregated_socket_event =
143 log.aggregated_socket_event(0); 186 log.aggregated_socket_event(0);
144 EXPECT_EQ(5, aggregated_socket_event.id()); 187 EXPECT_EQ(5, aggregated_socket_event.id());
145 } 188 }
146 189
147 TEST_F(CastChannelLoggerTest, TooManyEvents) { 190 TEST_F(CastChannelLoggerTest, TooManyEvents) {
148 for (int i = 0; i < kMaxEventsPerSocket + 5; i++) { 191 for (int i = 0; i < kMaxEventsPerSocket + 5; i++) {
149 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); 192 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED);
150 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 193 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
151 } 194 }
152 195
153 std::string output; 196 std::string output;
154 bool success = logger_->LogToString(&output); 197 bool success = logger_->LogToString(&output);
155 ASSERT_TRUE(success); 198 ASSERT_TRUE(success);
156 199
200 // 100kb should be enough for test purposes.
201 std::string uncompressed(100000, 0);
202 success = Uncompress(output, &uncompressed);
203 ASSERT_TRUE(success);
204
157 Log log; 205 Log log;
158 success = log.ParseFromString(output); 206 success = log.ParseFromString(uncompressed);
159 ASSERT_TRUE(success); 207 ASSERT_TRUE(success);
160 208
161 ASSERT_EQ(1, log.aggregated_socket_event_size()); 209 ASSERT_EQ(1, log.aggregated_socket_event_size());
162 EXPECT_EQ(0, log.num_evicted_aggregated_socket_events()); 210 EXPECT_EQ(0, log.num_evicted_aggregated_socket_events());
163 EXPECT_EQ(5, log.num_evicted_socket_events()); 211 EXPECT_EQ(5, log.num_evicted_socket_events());
164 212
165 const AggregatedSocketEvent& aggregated_socket_event = 213 const AggregatedSocketEvent& aggregated_socket_event =
166 log.aggregated_socket_event(0); 214 log.aggregated_socket_event(0);
167 ASSERT_EQ(kMaxEventsPerSocket, aggregated_socket_event.socket_event_size()); 215 ASSERT_EQ(kMaxEventsPerSocket, aggregated_socket_event.socket_event_size());
168 EXPECT_EQ(5, aggregated_socket_event.socket_event(0).timestamp_micros()); 216 EXPECT_EQ(5, aggregated_socket_event.socket_event(0).timestamp_micros());
169 } 217 }
170 218
171 TEST_F(CastChannelLoggerTest, Reset) { 219 TEST_F(CastChannelLoggerTest, Reset) {
172 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); 220 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED);
173 221
174 std::string output; 222 std::string output;
175 bool success = logger_->LogToString(&output); 223 bool success = logger_->LogToString(&output);
176 ASSERT_TRUE(success); 224 ASSERT_TRUE(success);
177 225
226 // 10kb should be enough for test purposes.
227 std::string uncompressed(10000, 0);
228 success = Uncompress(output, &uncompressed);
229 ASSERT_TRUE(success);
230
178 Log log; 231 Log log;
179 success = log.ParseFromString(output); 232 success = log.ParseFromString(uncompressed);
180 ASSERT_TRUE(success); 233 ASSERT_TRUE(success);
181 234
182 EXPECT_EQ(1, log.aggregated_socket_event_size()); 235 EXPECT_EQ(1, log.aggregated_socket_event_size());
183 236
184 logger_->Reset(); 237 logger_->Reset();
185 238
186 success = logger_->LogToString(&output); 239 success = logger_->LogToString(&output);
187 ASSERT_TRUE(success); 240 ASSERT_TRUE(success);
188 success = log.ParseFromString(output); 241 success = Uncompress(output, &uncompressed);
242 ASSERT_TRUE(success);
243 success = log.ParseFromString(uncompressed);
189 ASSERT_TRUE(success); 244 ASSERT_TRUE(success);
190 245
191 EXPECT_EQ(0, log.aggregated_socket_event_size()); 246 EXPECT_EQ(0, log.aggregated_socket_event_size());
192 } 247 }
193 248
194 } // namespace cast_channel 249 } // namespace cast_channel
195 } // namespace api 250 } // namespace api
196 } // namespace extensions 251 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698