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

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: Addressed Wez's comments 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 char* input, int length, std::string* output) {
30 z_stream stream = {0};
31
32 stream.next_in = reinterpret_cast<uint8*>(const_cast<char*>(input));
33 stream.avail_in = length;
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
61 bool GetLog(Log* log) {
62 int length = 0;
63 scoped_ptr<char[]> output = logger_->GetLogs(&length);
64 if (!output.get())
65 return false;
66
67 // 100kb should be enough for test purposes.
68 std::string uncompressed(100000, 0);
69 if (!Uncompress(output.get(), length, &uncompressed))
70 return false;
71
72 return log->ParseFromString(uncompressed);
73 }
74
28 protected: 75 protected:
29 base::SimpleTestTickClock* clock_; 76 base::SimpleTestTickClock* clock_;
30 scoped_refptr<Logger> logger_; 77 scoped_refptr<Logger> logger_;
31 }; 78 };
32 79
33 TEST_F(CastChannelLoggerTest, BasicLogging) { 80 TEST_F(CastChannelLoggerTest, BasicLogging) {
34 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); 81 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED);
35 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 82 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
36 logger_->LogSocketEventWithDetails( 83 logger_->LogSocketEventWithDetails(
37 1, EventType::TCP_SOCKET_CONNECT, "TCP socket"); 84 1, EventType::TCP_SOCKET_CONNECT, "TCP socket");
38 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 85 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
39 logger_->LogSocketEvent(2, EventType::CAST_SOCKET_CREATED); 86 logger_->LogSocketEvent(2, EventType::CAST_SOCKET_CREATED);
40 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 87 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
41 logger_->LogSocketEventWithRv(1, EventType::SSL_SOCKET_CONNECT, -1); 88 logger_->LogSocketEventWithRv(1, EventType::SSL_SOCKET_CONNECT, -1);
42 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 89 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
43 logger_->LogSocketEventForMessage( 90 logger_->LogSocketEventForMessage(
44 2, EventType::MESSAGE_ENQUEUED, "foo_namespace", "details"); 91 2, EventType::MESSAGE_ENQUEUED, "foo_namespace", "details");
45 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 92 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
46 93
47 AuthResult auth_result = 94 AuthResult auth_result =
48 AuthResult::Create("No response", AuthResult::ERROR_NO_RESPONSE); 95 AuthResult::Create("No response", AuthResult::ERROR_NO_RESPONSE);
49 96
50 logger_->LogSocketChallengeReplyEvent(2, auth_result); 97 logger_->LogSocketChallengeReplyEvent(2, auth_result);
51 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 98 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
52 99
53 auth_result = AuthResult::CreateWithNSSError( 100 auth_result = AuthResult::CreateWithNSSError(
54 "Parsing failed", AuthResult::ERROR_NSS_CERT_PARSING_FAILED, 4); 101 "Parsing failed", AuthResult::ERROR_NSS_CERT_PARSING_FAILED, 4);
55 logger_->LogSocketChallengeReplyEvent(2, auth_result); 102 logger_->LogSocketChallengeReplyEvent(2, auth_result);
56 103
57 std::string output;
58 bool success = logger_->LogToString(&output);
59 ASSERT_TRUE(success);
60
61 Log log; 104 Log log;
62 success = log.ParseFromString(output); 105 ASSERT_TRUE(GetLog(&log));
mark a. foltz 2014/08/13 22:00:24 I might write this as scoped_ptr<Log> log(GetLog(
imcheng 2014/08/13 23:58:14 Done.
63 ASSERT_TRUE(success);
64 106
65 ASSERT_EQ(2, log.aggregated_socket_event_size()); 107 ASSERT_EQ(2, log.aggregated_socket_event_size());
66 { 108 {
67 const AggregatedSocketEvent& aggregated_socket_event = 109 const AggregatedSocketEvent& aggregated_socket_event =
68 log.aggregated_socket_event(0); 110 log.aggregated_socket_event(0);
69 EXPECT_EQ(1, aggregated_socket_event.id()); 111 EXPECT_EQ(1, aggregated_socket_event.id());
70 EXPECT_EQ(3, aggregated_socket_event.socket_event_size()); 112 EXPECT_EQ(3, aggregated_socket_event.socket_event_size());
71 { 113 {
72 const SocketEvent& event = aggregated_socket_event.socket_event(0); 114 const SocketEvent& event = aggregated_socket_event.socket_event(0);
73 EXPECT_EQ(EventType::CAST_SOCKET_CREATED, event.type()); 115 EXPECT_EQ(EventType::CAST_SOCKET_CREATED, event.type());
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 EXPECT_EQ(4, event.return_value()); 162 EXPECT_EQ(4, event.return_value());
121 } 163 }
122 } 164 }
123 } 165 }
124 166
125 TEST_F(CastChannelLoggerTest, TooManySockets) { 167 TEST_F(CastChannelLoggerTest, TooManySockets) {
126 for (int i = 0; i < kMaxSocketsToLog + 5; i++) { 168 for (int i = 0; i < kMaxSocketsToLog + 5; i++) {
127 logger_->LogSocketEvent(i, EventType::CAST_SOCKET_CREATED); 169 logger_->LogSocketEvent(i, EventType::CAST_SOCKET_CREATED);
128 } 170 }
129 171
130 std::string output;
131 bool success = logger_->LogToString(&output);
132 ASSERT_TRUE(success);
133
134 Log log; 172 Log log;
135 success = log.ParseFromString(output); 173 ASSERT_TRUE(GetLog(&log));
136 ASSERT_TRUE(success);
137 174
138 ASSERT_EQ(kMaxSocketsToLog, log.aggregated_socket_event_size()); 175 ASSERT_EQ(kMaxSocketsToLog, log.aggregated_socket_event_size());
139 EXPECT_EQ(5, log.num_evicted_aggregated_socket_events()); 176 EXPECT_EQ(5, log.num_evicted_aggregated_socket_events());
140 EXPECT_EQ(5, log.num_evicted_socket_events()); 177 EXPECT_EQ(5, log.num_evicted_socket_events());
141 178
142 const AggregatedSocketEvent& aggregated_socket_event = 179 const AggregatedSocketEvent& aggregated_socket_event =
143 log.aggregated_socket_event(0); 180 log.aggregated_socket_event(0);
144 EXPECT_EQ(5, aggregated_socket_event.id()); 181 EXPECT_EQ(5, aggregated_socket_event.id());
145 } 182 }
146 183
147 TEST_F(CastChannelLoggerTest, TooManyEvents) { 184 TEST_F(CastChannelLoggerTest, TooManyEvents) {
148 for (int i = 0; i < kMaxEventsPerSocket + 5; i++) { 185 for (int i = 0; i < kMaxEventsPerSocket + 5; i++) {
149 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); 186 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED);
150 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); 187 clock_->Advance(base::TimeDelta::FromMicroseconds(1));
151 } 188 }
152 189
153 std::string output;
154 bool success = logger_->LogToString(&output);
155 ASSERT_TRUE(success);
156
157 Log log; 190 Log log;
158 success = log.ParseFromString(output); 191 ASSERT_TRUE(GetLog(&log));
159 ASSERT_TRUE(success);
160 192
161 ASSERT_EQ(1, log.aggregated_socket_event_size()); 193 ASSERT_EQ(1, log.aggregated_socket_event_size());
162 EXPECT_EQ(0, log.num_evicted_aggregated_socket_events()); 194 EXPECT_EQ(0, log.num_evicted_aggregated_socket_events());
163 EXPECT_EQ(5, log.num_evicted_socket_events()); 195 EXPECT_EQ(5, log.num_evicted_socket_events());
164 196
165 const AggregatedSocketEvent& aggregated_socket_event = 197 const AggregatedSocketEvent& aggregated_socket_event =
166 log.aggregated_socket_event(0); 198 log.aggregated_socket_event(0);
167 ASSERT_EQ(kMaxEventsPerSocket, aggregated_socket_event.socket_event_size()); 199 ASSERT_EQ(kMaxEventsPerSocket, aggregated_socket_event.socket_event_size());
168 EXPECT_EQ(5, aggregated_socket_event.socket_event(0).timestamp_micros()); 200 EXPECT_EQ(5, aggregated_socket_event.socket_event(0).timestamp_micros());
169 } 201 }
170 202
171 TEST_F(CastChannelLoggerTest, Reset) { 203 TEST_F(CastChannelLoggerTest, Reset) {
172 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED); 204 logger_->LogSocketEvent(1, EventType::CAST_SOCKET_CREATED);
173 205
174 std::string output;
175 bool success = logger_->LogToString(&output);
176 ASSERT_TRUE(success);
177
178 Log log; 206 Log log;
179 success = log.ParseFromString(output); 207 ASSERT_TRUE(GetLog(&log));
180 ASSERT_TRUE(success);
181 208
182 EXPECT_EQ(1, log.aggregated_socket_event_size()); 209 EXPECT_EQ(1, log.aggregated_socket_event_size());
183 210
184 logger_->Reset(); 211 logger_->Reset();
185 212
186 success = logger_->LogToString(&output); 213 ASSERT_TRUE(GetLog(&log));
187 ASSERT_TRUE(success);
188 success = log.ParseFromString(output);
189 ASSERT_TRUE(success);
190 214
191 EXPECT_EQ(0, log.aggregated_socket_event_size()); 215 EXPECT_EQ(0, log.aggregated_socket_event_size());
192 } 216 }
193 217
194 } // namespace cast_channel 218 } // namespace cast_channel
195 } // namespace api 219 } // namespace api
196 } // namespace extensions 220 } // 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