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

Side by Side Diff: blimp/client/session/assignment_source_unittest.cc

Issue 1757153002: Revert of Blimp: add support for SSL connections. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « blimp/client/session/assignment_source.cc ('k') | blimp/client/session/blimp_client_session.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "blimp/client/session/assignment_source.h" 5 #include "blimp/client/session/assignment_source.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/files/file_path.h"
9 #include "base/files/file_util.h"
10 #include "base/json/json_reader.h" 8 #include "base/json/json_reader.h"
11 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
12 #include "base/message_loop/message_loop.h"
13 #include "base/path_service.h"
14 #include "base/run_loop.h"
15 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
16 #include "base/thread_task_runner_handle.h" 11 #include "base/thread_task_runner_handle.h"
17 #include "base/values.h" 12 #include "base/values.h"
18 #include "blimp/client/app/blimp_client_switches.h" 13 #include "blimp/client/app/blimp_client_switches.h"
19 #include "blimp/common/protocol_version.h" 14 #include "blimp/common/protocol_version.h"
20 #include "components/safe_json/testing_json_parser.h"
21 #include "net/base/test_data_directory.h"
22 #include "net/url_request/test_url_fetcher_factory.h" 15 #include "net/url_request/test_url_fetcher_factory.h"
23 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
25 18
26 using testing::_; 19 using testing::_;
27 using testing::DoAll;
28 using testing::InSequence; 20 using testing::InSequence;
29 using testing::NotNull;
30 using testing::Return;
31 using testing::SetArgPointee;
32 21
33 namespace blimp { 22 namespace blimp {
34 namespace client { 23 namespace client {
35 namespace { 24 namespace {
36 25
37 const uint8_t kTestIpAddress[] = {127, 0, 0, 1};
38 const uint16_t kTestPort = 8086;
39 const char kTestIpAddressString[] = "127.0.0.1";
40 const char kTcpTransportName[] = "tcp";
41 const char kSslTransportName[] = "ssl";
42 const char kCertRelativePath[] =
43 "blimp/client/session/test_selfsigned_cert.pem";
44 const char kTestClientToken[] = "secrett0ken";
45 const char kTestAuthToken[] = "UserAuthT0kenz";
46
47 MATCHER_P(AssignmentEquals, assignment, "") { 26 MATCHER_P(AssignmentEquals, assignment, "") {
48 return arg.transport_protocol == assignment.transport_protocol && 27 return arg.transport_protocol == assignment.transport_protocol &&
49 arg.engine_endpoint == assignment.engine_endpoint && 28 arg.ip_endpoint == assignment.ip_endpoint &&
50 arg.client_token == assignment.client_token && 29 arg.client_token == assignment.client_token &&
51 ((!assignment.cert && !arg.cert) || 30 arg.certificate == assignment.certificate &&
52 (arg.cert && assignment.cert && 31 arg.certificate_fingerprint == assignment.certificate_fingerprint;
53 arg.cert->Equals(assignment.cert.get())));
54 } 32 }
55 33
56 // Converts |value| to a JSON string. 34 net::IPEndPoint BuildIPEndPoint(const std::string& ip, int port) {
57 std::string ValueToString(const base::Value& value) { 35 net::IPAddress ip_address;
36 EXPECT_TRUE(ip_address.AssignFromIPLiteral(ip));
37
38 return net::IPEndPoint(ip_address, port);
39 }
40
41 Assignment BuildValidAssignment() {
42 Assignment assignment;
43 assignment.transport_protocol = Assignment::TransportProtocol::SSL;
44 assignment.ip_endpoint = BuildIPEndPoint("100.150.200.250", 500);
45 assignment.client_token = "SecretT0kenz";
46 assignment.certificate_fingerprint = "WhaleWhaleWhale";
47 assignment.certificate = "whaaaaaaaaaaaaale";
48 return assignment;
49 }
50
51 std::string BuildResponseFromAssignment(const Assignment& assignment) {
52 base::DictionaryValue dict;
53 dict.SetString("clientToken", assignment.client_token);
54 dict.SetString("host", assignment.ip_endpoint.address().ToString());
55 dict.SetInteger("port", assignment.ip_endpoint.port());
56 dict.SetString("certificateFingerprint", assignment.certificate_fingerprint);
57 dict.SetString("certificate", assignment.certificate);
58
58 std::string json; 59 std::string json;
59 base::JSONWriter::Write(value, &json); 60 base::JSONWriter::Write(dict, &json);
60 return json; 61 return json;
61 } 62 }
62 63
63 class AssignmentSourceTest : public testing::Test { 64 class AssignmentSourceTest : public testing::Test {
64 public: 65 public:
65 AssignmentSourceTest() 66 AssignmentSourceTest()
66 : source_(message_loop_.task_runner(), message_loop_.task_runner()) {} 67 : task_runner_(new base::TestSimpleTaskRunner),
67 68 task_runner_handle_(task_runner_),
68 void SetUp() override { 69 source_(task_runner_, task_runner_) {}
69 base::FilePath src_root;
70 PathService::Get(base::DIR_SOURCE_ROOT, &src_root);
71 ASSERT_FALSE(src_root.empty());
72 cert_path_ = src_root.Append(kCertRelativePath);
73 ASSERT_TRUE(base::ReadFileToString(cert_path_, &cert_pem_));
74 net::CertificateList cert_list =
75 net::X509Certificate::CreateCertificateListFromBytes(
76 cert_pem_.data(), cert_pem_.size(),
77 net::X509Certificate::FORMAT_PEM_CERT_SEQUENCE);
78 ASSERT_FALSE(cert_list.empty());
79 cert_ = std::move(cert_list[0]);
80 ASSERT_TRUE(cert_);
81 }
82 70
83 // This expects the AssignmentSource::GetAssignment to return a custom 71 // This expects the AssignmentSource::GetAssignment to return a custom
84 // endpoint without having to hit the network. This will typically be used 72 // endpoint without having to hit the network. This will typically be used
85 // for testing that specifying an assignment via the command line works as 73 // for testing that specifying an assignment via the command line works as
86 // expected. 74 // expected.
87 void GetAlternateAssignment() { 75 void GetAlternateAssignment() {
88 source_.GetAssignment("", 76 source_.GetAssignment("",
89 base::Bind(&AssignmentSourceTest::AssignmentResponse, 77 base::Bind(&AssignmentSourceTest::AssignmentResponse,
90 base::Unretained(this))); 78 base::Unretained(this)));
91 EXPECT_EQ(nullptr, factory_.GetFetcherByID(0)); 79 EXPECT_EQ(nullptr, factory_.GetFetcherByID(0));
92 base::RunLoop().RunUntilIdle(); 80 task_runner_->RunUntilIdle();
93 } 81 }
94 82
95 // See net/base/net_errors.h for possible status errors. 83 // See net/base/net_errors.h for possible status errors.
96 void GetNetworkAssignmentAndWaitForResponse( 84 void GetNetworkAssignmentAndWaitForResponse(
97 net::HttpStatusCode response_code, 85 net::HttpStatusCode response_code,
98 int status, 86 int status,
99 const std::string& response, 87 const std::string& response,
100 const std::string& client_auth_token, 88 const std::string& client_auth_token,
101 const std::string& protocol_version) { 89 const std::string& protocol_version) {
102 source_.GetAssignment(client_auth_token, 90 source_.GetAssignment(client_auth_token,
103 base::Bind(&AssignmentSourceTest::AssignmentResponse, 91 base::Bind(&AssignmentSourceTest::AssignmentResponse,
104 base::Unretained(this))); 92 base::Unretained(this)));
105 base::RunLoop().RunUntilIdle();
106 93
107 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 94 net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
108 95
96 task_runner_->RunUntilIdle();
97
109 EXPECT_NE(nullptr, fetcher); 98 EXPECT_NE(nullptr, fetcher);
110 EXPECT_EQ(kDefaultAssignerURL, fetcher->GetOriginalURL().spec()); 99 EXPECT_EQ(kDefaultAssignerURL, fetcher->GetOriginalURL().spec());
111 100
112 // Check that the request has a valid protocol_version. 101 // Check that the request has a valid protocol_version.
113 scoped_ptr<base::Value> json = 102 scoped_ptr<base::Value> json =
114 base::JSONReader::Read(fetcher->upload_data()); 103 base::JSONReader::Read(fetcher->upload_data());
115 EXPECT_NE(nullptr, json.get()); 104 EXPECT_NE(nullptr, json.get());
116 105
117 const base::DictionaryValue* dict; 106 const base::DictionaryValue* dict;
118 EXPECT_TRUE(json->GetAsDictionary(&dict)); 107 EXPECT_TRUE(json->GetAsDictionary(&dict));
(...skipping 10 matching lines...) Expand all
129 std::string authorization; 118 std::string authorization;
130 EXPECT_TRUE(headers.GetHeader("Authorization", &authorization)); 119 EXPECT_TRUE(headers.GetHeader("Authorization", &authorization));
131 EXPECT_EQ("Bearer " + client_auth_token, authorization); 120 EXPECT_EQ("Bearer " + client_auth_token, authorization);
132 121
133 // Send the fake response back. 122 // Send the fake response back.
134 fetcher->set_response_code(response_code); 123 fetcher->set_response_code(response_code);
135 fetcher->set_status(net::URLRequestStatus::FromError(status)); 124 fetcher->set_status(net::URLRequestStatus::FromError(status));
136 fetcher->SetResponseString(response); 125 fetcher->SetResponseString(response);
137 fetcher->delegate()->OnURLFetchComplete(fetcher); 126 fetcher->delegate()->OnURLFetchComplete(fetcher);
138 127
139 base::RunLoop().RunUntilIdle(); 128 task_runner_->RunUntilIdle();
140 } 129 }
141 130
142 MOCK_METHOD2(AssignmentResponse, 131 MOCK_METHOD2(AssignmentResponse,
143 void(AssignmentSource::Result, const Assignment&)); 132 void(AssignmentSource::Result, const Assignment&));
144 133
145 protected: 134 protected:
146 Assignment BuildSslAssignment();
147
148 // Builds simulated JSON response from the Assigner service.
149 scoped_ptr<base::DictionaryValue> BuildAssignerResponse();
150
151 // Used to drive all AssignmentSource tasks. 135 // Used to drive all AssignmentSource tasks.
152 // MessageLoop is required by TestingJsonParser's self-deletion logic. 136 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
153 // TODO(bauerb): Replace this with a TestSimpleTaskRunner once 137 base::ThreadTaskRunnerHandle task_runner_handle_;
154 // TestingJsonParser no longer requires having a MessageLoop.
155 base::MessageLoop message_loop_;
156 138
157 net::TestURLFetcherFactory factory_; 139 net::TestURLFetcherFactory factory_;
158 140
159 // Path to the PEM-encoded certificate chain.
160 base::FilePath cert_path_;
161
162 // Payload of PEM certificate chain at |cert_path_|.
163 std::string cert_pem_;
164
165 // X509 certificate decoded from |cert_path_|.
166 scoped_refptr<net::X509Certificate> cert_;
167
168 AssignmentSource source_; 141 AssignmentSource source_;
169
170 // Allows safe_json to parse JSON in-process, instead of depending on a
171 // utility proces.
172 safe_json::TestingJsonParser::ScopedFactoryOverride json_parsing_factory_;
173 }; 142 };
174 143
175 Assignment AssignmentSourceTest::BuildSslAssignment() {
176 Assignment assignment;
177 assignment.transport_protocol = Assignment::TransportProtocol::SSL;
178 assignment.engine_endpoint = net::IPEndPoint(kTestIpAddress, kTestPort);
179 assignment.client_token = kTestClientToken;
180 assignment.cert = cert_;
181 return assignment;
182 }
183
184 scoped_ptr<base::DictionaryValue>
185 AssignmentSourceTest::BuildAssignerResponse() {
186 scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
187 dict->SetString("clientToken", kTestClientToken);
188 dict->SetString("host", kTestIpAddressString);
189 dict->SetInteger("port", kTestPort);
190 dict->SetString("certificate", cert_pem_);
191 return dict;
192 }
193
194 TEST_F(AssignmentSourceTest, TestTCPAlternateEndpointSuccess) { 144 TEST_F(AssignmentSourceTest, TestTCPAlternateEndpointSuccess) {
195 Assignment assignment; 145 Assignment assignment;
196 assignment.transport_protocol = Assignment::TransportProtocol::TCP; 146 assignment.transport_protocol = Assignment::TransportProtocol::TCP;
197 assignment.engine_endpoint = net::IPEndPoint(kTestIpAddress, kTestPort); 147 assignment.ip_endpoint = BuildIPEndPoint("100.150.200.250", 500);
198 assignment.client_token = kDummyClientToken; 148 assignment.client_token = kDummyClientToken;
199 assignment.cert = scoped_refptr<net::X509Certificate>(nullptr);
200 149
201 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 150 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
202 switches::kEngineIP, kTestIpAddressString); 151 switches::kBlimpletEndpoint, "tcp:100.150.200.250:500");
203 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
204 switches::kEnginePort, std::to_string(kTestPort));
205 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
206 switches::kEngineTransport, kTcpTransportName);
207 152
208 EXPECT_CALL(*this, AssignmentResponse(AssignmentSource::Result::RESULT_OK, 153 EXPECT_CALL(*this, AssignmentResponse(AssignmentSource::Result::RESULT_OK,
209 AssignmentEquals(assignment))) 154 AssignmentEquals(assignment)))
210 .Times(1); 155 .Times(1);
211 156
212 GetAlternateAssignment(); 157 GetAlternateAssignment();
213 } 158 }
214 159
215 TEST_F(AssignmentSourceTest, TestSSLAlternateEndpointSuccess) { 160 TEST_F(AssignmentSourceTest, TestSSLAlternateEndpointSuccess) {
216 Assignment assignment; 161 Assignment assignment;
217 assignment.transport_protocol = Assignment::TransportProtocol::SSL; 162 assignment.transport_protocol = Assignment::TransportProtocol::SSL;
218 assignment.engine_endpoint = net::IPEndPoint(kTestIpAddress, kTestPort); 163 assignment.ip_endpoint = BuildIPEndPoint("100.150.200.250", 500);
219 assignment.client_token = kDummyClientToken; 164 assignment.client_token = kDummyClientToken;
220 assignment.cert = cert_;
221 165
222 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 166 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
223 switches::kEngineIP, kTestIpAddressString); 167 switches::kBlimpletEndpoint, "ssl:100.150.200.250:500");
224 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
225 switches::kEnginePort, std::to_string(kTestPort));
226 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
227 switches::kEngineTransport, kSslTransportName);
228 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
229 switches::kEngineCertPath, cert_path_.value());
230 168
231 EXPECT_CALL(*this, AssignmentResponse(AssignmentSource::Result::RESULT_OK, 169 EXPECT_CALL(*this, AssignmentResponse(AssignmentSource::Result::RESULT_OK,
232 AssignmentEquals(assignment))) 170 AssignmentEquals(assignment)))
171 .Times(1);
172
173 GetAlternateAssignment();
174 }
175
176 TEST_F(AssignmentSourceTest, TestQUICAlternateEndpointSuccess) {
177 Assignment assignment;
178 assignment.transport_protocol = Assignment::TransportProtocol::QUIC;
179 assignment.ip_endpoint = BuildIPEndPoint("100.150.200.250", 500);
180 assignment.client_token = kDummyClientToken;
181
182 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
183 switches::kBlimpletEndpoint, "quic:100.150.200.250:500");
184
185 EXPECT_CALL(*this, AssignmentResponse(AssignmentSource::Result::RESULT_OK,
186 AssignmentEquals(assignment)))
233 .Times(1); 187 .Times(1);
234 188
235 GetAlternateAssignment(); 189 GetAlternateAssignment();
236 } 190 }
237 191
238 TEST_F(AssignmentSourceTest, TestSuccess) { 192 TEST_F(AssignmentSourceTest, TestSuccess) {
239 Assignment assignment = BuildSslAssignment(); 193 Assignment assignment = BuildValidAssignment();
240 194
241 EXPECT_CALL(*this, AssignmentResponse(AssignmentSource::Result::RESULT_OK, 195 EXPECT_CALL(*this, AssignmentResponse(AssignmentSource::Result::RESULT_OK,
242 AssignmentEquals(assignment))) 196 AssignmentEquals(assignment)))
243 .Times(1); 197 .Times(1);
244 198
245 GetNetworkAssignmentAndWaitForResponse( 199 GetNetworkAssignmentAndWaitForResponse(
246 net::HTTP_OK, net::Error::OK, ValueToString(*BuildAssignerResponse()), 200 net::HTTP_OK, net::Error::OK, BuildResponseFromAssignment(assignment),
247 kTestAuthToken, kEngineVersion); 201 "UserAuthT0kenz", kEngineVersion);
202 }
203
204 TEST_F(AssignmentSourceTest, TestSecondRequestInterruptsFirst) {
205 InSequence sequence;
206 Assignment assignment = BuildValidAssignment();
207
208 source_.GetAssignment("",
209 base::Bind(&AssignmentSourceTest::AssignmentResponse,
210 base::Unretained(this)));
211
212 EXPECT_CALL(*this, AssignmentResponse(
213 AssignmentSource::Result::RESULT_SERVER_INTERRUPTED,
214 AssignmentEquals(Assignment())))
215 .Times(1)
216 .RetiresOnSaturation();
217
218 EXPECT_CALL(*this, AssignmentResponse(AssignmentSource::Result::RESULT_OK,
219 AssignmentEquals(assignment)))
220 .Times(1)
221 .RetiresOnSaturation();
222
223 GetNetworkAssignmentAndWaitForResponse(
224 net::HTTP_OK, net::Error::OK, BuildResponseFromAssignment(assignment),
225 "UserAuthT0kenz", kEngineVersion);
248 } 226 }
249 227
250 TEST_F(AssignmentSourceTest, TestValidAfterError) { 228 TEST_F(AssignmentSourceTest, TestValidAfterError) {
251 InSequence sequence; 229 InSequence sequence;
252 Assignment assignment = BuildSslAssignment(); 230 Assignment assignment = BuildValidAssignment();
253 231
254 EXPECT_CALL(*this, AssignmentResponse( 232 EXPECT_CALL(*this, AssignmentResponse(
255 AssignmentSource::Result::RESULT_NETWORK_FAILURE, _)) 233 AssignmentSource::Result::RESULT_NETWORK_FAILURE, _))
256 .Times(1) 234 .Times(1)
257 .RetiresOnSaturation(); 235 .RetiresOnSaturation();
258 236
259 EXPECT_CALL(*this, AssignmentResponse(AssignmentSource::Result::RESULT_OK, 237 EXPECT_CALL(*this, AssignmentResponse(AssignmentSource::Result::RESULT_OK,
260 AssignmentEquals(assignment))) 238 AssignmentEquals(assignment)))
261 .Times(1) 239 .Times(1)
262 .RetiresOnSaturation(); 240 .RetiresOnSaturation();
263 241
264 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK, 242 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK,
265 net::Error::ERR_INSUFFICIENT_RESOURCES, 243 net::Error::ERR_INSUFFICIENT_RESOURCES,
266 "", kTestAuthToken, kEngineVersion); 244 "", "UserAuthT0kenz", kEngineVersion);
267 245
268 GetNetworkAssignmentAndWaitForResponse( 246 GetNetworkAssignmentAndWaitForResponse(
269 net::HTTP_OK, net::Error::OK, ValueToString(*BuildAssignerResponse()), 247 net::HTTP_OK, net::Error::OK, BuildResponseFromAssignment(assignment),
270 kTestAuthToken, kEngineVersion); 248 "UserAuthT0kenz", kEngineVersion);
271 } 249 }
272 250
273 TEST_F(AssignmentSourceTest, TestNetworkFailure) { 251 TEST_F(AssignmentSourceTest, TestNetworkFailure) {
274 EXPECT_CALL(*this, AssignmentResponse( 252 EXPECT_CALL(*this, AssignmentResponse(
275 AssignmentSource::Result::RESULT_NETWORK_FAILURE, _)); 253 AssignmentSource::Result::RESULT_NETWORK_FAILURE, _));
276 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK, 254 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK,
277 net::Error::ERR_INSUFFICIENT_RESOURCES, 255 net::Error::ERR_INSUFFICIENT_RESOURCES,
278 "", kTestAuthToken, kEngineVersion); 256 "", "UserAuthT0kenz", kEngineVersion);
279 } 257 }
280 258
281 TEST_F(AssignmentSourceTest, TestBadRequest) { 259 TEST_F(AssignmentSourceTest, TestBadRequest) {
282 EXPECT_CALL(*this, AssignmentResponse( 260 EXPECT_CALL(*this, AssignmentResponse(
283 AssignmentSource::Result::RESULT_BAD_REQUEST, _)); 261 AssignmentSource::Result::RESULT_BAD_REQUEST, _));
284 GetNetworkAssignmentAndWaitForResponse(net::HTTP_BAD_REQUEST, net::Error::OK, 262 GetNetworkAssignmentAndWaitForResponse(net::HTTP_BAD_REQUEST, net::Error::OK,
285 "", kTestAuthToken, kEngineVersion); 263 "", "UserAuthT0kenz", kEngineVersion);
286 } 264 }
287 265
288 TEST_F(AssignmentSourceTest, TestUnauthorized) { 266 TEST_F(AssignmentSourceTest, TestUnauthorized) {
289 EXPECT_CALL(*this, 267 EXPECT_CALL(*this,
290 AssignmentResponse( 268 AssignmentResponse(
291 AssignmentSource::Result::RESULT_EXPIRED_ACCESS_TOKEN, _)); 269 AssignmentSource::Result::RESULT_EXPIRED_ACCESS_TOKEN, _));
292 GetNetworkAssignmentAndWaitForResponse(net::HTTP_UNAUTHORIZED, net::Error::OK, 270 GetNetworkAssignmentAndWaitForResponse(net::HTTP_UNAUTHORIZED, net::Error::OK,
293 "", kTestAuthToken, kEngineVersion); 271 "", "UserAuthT0kenz", kEngineVersion);
294 } 272 }
295 273
296 TEST_F(AssignmentSourceTest, TestForbidden) { 274 TEST_F(AssignmentSourceTest, TestForbidden) {
297 EXPECT_CALL(*this, AssignmentResponse( 275 EXPECT_CALL(*this, AssignmentResponse(
298 AssignmentSource::Result::RESULT_USER_INVALID, _)); 276 AssignmentSource::Result::RESULT_USER_INVALID, _));
299 GetNetworkAssignmentAndWaitForResponse(net::HTTP_FORBIDDEN, net::Error::OK, 277 GetNetworkAssignmentAndWaitForResponse(net::HTTP_FORBIDDEN, net::Error::OK,
300 "", kTestAuthToken, kEngineVersion); 278 "", "UserAuthT0kenz", kEngineVersion);
301 } 279 }
302 280
303 TEST_F(AssignmentSourceTest, TestTooManyRequests) { 281 TEST_F(AssignmentSourceTest, TestTooManyRequests) {
304 EXPECT_CALL(*this, AssignmentResponse( 282 EXPECT_CALL(*this, AssignmentResponse(
305 AssignmentSource::Result::RESULT_OUT_OF_VMS, _)); 283 AssignmentSource::Result::RESULT_OUT_OF_VMS, _));
306 GetNetworkAssignmentAndWaitForResponse(static_cast<net::HttpStatusCode>(429), 284 GetNetworkAssignmentAndWaitForResponse(static_cast<net::HttpStatusCode>(429),
307 net::Error::OK, "", kTestAuthToken, 285 net::Error::OK, "", "UserAuthT0kenz",
308 kEngineVersion); 286 kEngineVersion);
309 } 287 }
310 288
311 TEST_F(AssignmentSourceTest, TestInternalServerError) { 289 TEST_F(AssignmentSourceTest, TestInternalServerError) {
312 EXPECT_CALL(*this, AssignmentResponse( 290 EXPECT_CALL(*this, AssignmentResponse(
313 AssignmentSource::Result::RESULT_SERVER_ERROR, _)); 291 AssignmentSource::Result::RESULT_SERVER_ERROR, _));
314 GetNetworkAssignmentAndWaitForResponse(net::HTTP_INTERNAL_SERVER_ERROR, 292 GetNetworkAssignmentAndWaitForResponse(net::HTTP_INTERNAL_SERVER_ERROR,
315 net::Error::OK, "", kTestAuthToken, 293 net::Error::OK, "", "UserAuthT0kenz",
316 kEngineVersion); 294 kEngineVersion);
317 } 295 }
318 296
319 TEST_F(AssignmentSourceTest, TestUnexpectedNetCodeFallback) { 297 TEST_F(AssignmentSourceTest, TestUnexpectedNetCodeFallback) {
320 EXPECT_CALL(*this, AssignmentResponse( 298 EXPECT_CALL(*this, AssignmentResponse(
321 AssignmentSource::Result::RESULT_BAD_RESPONSE, _)); 299 AssignmentSource::Result::RESULT_BAD_RESPONSE, _));
322 GetNetworkAssignmentAndWaitForResponse(net::HTTP_NOT_IMPLEMENTED, 300 GetNetworkAssignmentAndWaitForResponse(net::HTTP_NOT_IMPLEMENTED,
323 net::Error::OK, "", kTestAuthToken, 301 net::Error::OK, "", "UserAuthT0kenz",
324 kEngineVersion); 302 kEngineVersion);
325 } 303 }
326 304
327 TEST_F(AssignmentSourceTest, TestInvalidJsonResponse) { 305 TEST_F(AssignmentSourceTest, TestInvalidJsonResponse) {
328 Assignment assignment = BuildSslAssignment(); 306 Assignment assignment = BuildValidAssignment();
329 307
330 // Remove half the response. 308 // Remove half the response.
331 std::string response = ValueToString(*BuildAssignerResponse()); 309 std::string response = BuildResponseFromAssignment(assignment);
332 response = response.substr(response.size() / 2); 310 response = response.substr(response.size() / 2);
333 311
334 EXPECT_CALL(*this, AssignmentResponse( 312 EXPECT_CALL(*this, AssignmentResponse(
335 AssignmentSource::Result::RESULT_BAD_RESPONSE, _)); 313 AssignmentSource::Result::RESULT_BAD_RESPONSE, _));
336 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK, net::Error::OK, response, 314 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK, net::Error::OK, response,
337 kTestAuthToken, kEngineVersion); 315 "UserAuthT0kenz", kEngineVersion);
338 } 316 }
339 317
340 TEST_F(AssignmentSourceTest, TestMissingResponsePort) { 318 TEST_F(AssignmentSourceTest, TestMissingResponsePort) {
341 scoped_ptr<base::DictionaryValue> response = BuildAssignerResponse(); 319 // Purposely do not add the 'port' field to the response.
342 response->Remove("port", nullptr); 320 base::DictionaryValue dict;
321 dict.SetString("clientToken", "SecretT0kenz");
322 dict.SetString("host", "happywhales");
323 dict.SetString("certificateFingerprint", "WhaleWhaleWhale");
324 dict.SetString("certificate", "whaaaaaaaaaaaaale");
325
326 std::string response;
327 base::JSONWriter::Write(dict, &response);
328
343 EXPECT_CALL(*this, AssignmentResponse( 329 EXPECT_CALL(*this, AssignmentResponse(
344 AssignmentSource::Result::RESULT_BAD_RESPONSE, _)); 330 AssignmentSource::Result::RESULT_BAD_RESPONSE, _));
345 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK, net::Error::OK, 331 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK, net::Error::OK, response,
346 ValueToString(*response), 332 "UserAuthT0kenz", kEngineVersion);
347 kTestAuthToken, kEngineVersion);
348 } 333 }
349 334
350 TEST_F(AssignmentSourceTest, TestInvalidIPAddress) { 335 TEST_F(AssignmentSourceTest, TestInvalidIPAddress) {
351 scoped_ptr<base::DictionaryValue> response = BuildAssignerResponse(); 336 // Purposely add an invalid IP field to the response.
352 response->SetString("host", "happywhales.test"); 337 base::DictionaryValue dict;
338 dict.SetString("clientToken", "SecretT0kenz");
339 dict.SetString("host", "happywhales");
340 dict.SetInteger("port", 500);
341 dict.SetString("certificateFingerprint", "WhaleWhaleWhale");
342 dict.SetString("certificate", "whaaaaaaaaaaaaale");
343
344 std::string response;
345 base::JSONWriter::Write(dict, &response);
353 346
354 EXPECT_CALL(*this, AssignmentResponse( 347 EXPECT_CALL(*this, AssignmentResponse(
355 AssignmentSource::Result::RESULT_BAD_RESPONSE, _)); 348 AssignmentSource::Result::RESULT_BAD_RESPONSE, _));
356 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK, net::Error::OK, 349 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK, net::Error::OK, response,
357 ValueToString(*response), 350 "UserAuthT0kenz", kEngineVersion);
358 kTestAuthToken, kEngineVersion);
359 }
360
361 TEST_F(AssignmentSourceTest, TestMissingCert) {
362 scoped_ptr<base::DictionaryValue> response = BuildAssignerResponse();
363 response->Remove("certificate", nullptr);
364 EXPECT_CALL(*this, AssignmentResponse(
365 AssignmentSource::Result::RESULT_BAD_RESPONSE, _));
366 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK, net::Error::OK,
367 ValueToString(*response),
368 kTestAuthToken, kEngineVersion);
369 }
370
371 TEST_F(AssignmentSourceTest, TestInvalidCert) {
372 scoped_ptr<base::DictionaryValue> response = BuildAssignerResponse();
373 response->SetString("certificate", "h4x0rz!");
374 EXPECT_CALL(*this, AssignmentResponse(
375 AssignmentSource::Result::RESULT_INVALID_CERT, _));
376 GetNetworkAssignmentAndWaitForResponse(net::HTTP_OK, net::Error::OK,
377 ValueToString(*response),
378 kTestAuthToken, kEngineVersion);
379 } 351 }
380 352
381 } // namespace 353 } // namespace
382 } // namespace client 354 } // namespace client
383 } // namespace blimp 355 } // namespace blimp
OLDNEW
« no previous file with comments | « blimp/client/session/assignment_source.cc ('k') | blimp/client/session/blimp_client_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698