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

Side by Side Diff: chrome/browser/policy/device_management_backend_impl_unittest.cc

Issue 5026001: Rework the device management backend implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 10 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/browser/policy/device_management_backend_impl.h" 5 #include "chrome/browser/policy/device_management_backend_impl.h"
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/string_split.h" 8 #include "base/string_split.h"
9 #include "chrome/browser/browser_thread.h" 9 #include "chrome/browser/browser_thread.h"
10 #include "chrome/browser/policy/device_management_backend_mock.h" 10 #include "chrome/browser/policy/device_management_backend_mock.h"
(...skipping 22 matching lines...) Expand all
33 33
34 } // namespace 34 } // namespace
35 35
36 // Unit tests for the google apps policy backend. The pattern here is each test 36 // Unit tests for the google apps policy backend. The pattern here is each test
37 // case triggeres a request and installs a mock delegate. The test will run and 37 // case triggeres a request and installs a mock delegate. The test will run and
38 // the default action installed on the test delegate will quit the loop. 38 // the default action installed on the test delegate will quit the loop.
39 template<typename TESTBASE> 39 template<typename TESTBASE>
40 class DeviceManagementBackendImplTestBase : public TESTBASE { 40 class DeviceManagementBackendImplTestBase : public TESTBASE {
41 protected: 41 protected:
42 DeviceManagementBackendImplTestBase() 42 DeviceManagementBackendImplTestBase()
43 : io_thread_(BrowserThread::IO, &loop_), 43 : io_thread_(BrowserThread::IO, &loop_) {
44 service_(kServiceURL) {} 44 ResetBackend();
45 service_.reset(backend_->Get());
46 }
45 47
46 virtual void SetUp() { 48 virtual void SetUp() {
47 URLFetcher::set_factory(&factory_); 49 URLFetcher::set_factory(&factory_);
48 } 50 }
49 51
50 virtual void TearDown() { 52 virtual void TearDown() {
51 URLFetcher::set_factory(NULL); 53 URLFetcher::set_factory(NULL);
54 service_.reset();
55 backend_.reset();
52 loop_.RunAllPending(); 56 loop_.RunAllPending();
53 } 57 }
54 58
59 void ResetBackend() {
60 backend_.reset(new DeviceManagementBackendImpl(kServiceURL, NULL));
61 }
62
63 TestURLFetcherFactory factory_;
64 scoped_ptr<DeviceManagementBackendImpl> backend_;
65 scoped_ptr<DeviceManagementBackend> service_;
66
67 private:
55 MessageLoopForUI loop_; 68 MessageLoopForUI loop_;
56 BrowserThread io_thread_; 69 BrowserThread io_thread_;
57 TestURLFetcherFactory factory_;
58 DeviceManagementBackendImpl service_;
59 }; 70 };
60 71
61 struct FailedRequestParams { 72 struct FailedRequestParams {
62 FailedRequestParams(DeviceManagementBackend::ErrorCode expected_error, 73 FailedRequestParams(DeviceManagementBackend::ErrorCode expected_error,
63 URLRequestStatus::Status request_status, 74 URLRequestStatus::Status request_status,
64 int http_status, 75 int http_status,
65 const std::string& response) 76 const std::string& response)
66 : expected_error_(expected_error), 77 : expected_error_(expected_error),
67 request_status_(request_status, 0), 78 request_status_(request_status, 0),
68 http_status_(http_status), 79 http_status_(http_status),
69 response_(response) {} 80 response_(response) {}
70 81
71 DeviceManagementBackend::ErrorCode expected_error_; 82 DeviceManagementBackend::ErrorCode expected_error_;
72 URLRequestStatus request_status_; 83 URLRequestStatus request_status_;
73 int http_status_; 84 int http_status_;
74 std::string response_; 85 std::string response_;
75 }; 86 };
76 87
77 // A parameterized test case for erroneous response situations, they're mostly 88 // A parameterized test case for erroneous response situations, they're mostly
78 // the same for all kinds of requests. 89 // the same for all kinds of requests.
79 class DeviceManagementBackendImplFailedRequestTest 90 class DeviceManagementBackendImplFailedRequestTest
80 : public DeviceManagementBackendImplTestBase< 91 : public DeviceManagementBackendImplTestBase<
81 testing::TestWithParam<FailedRequestParams> > { 92 testing::TestWithParam<FailedRequestParams> > {
82 }; 93 };
83 94
84 TEST_P(DeviceManagementBackendImplFailedRequestTest, RegisterRequest) { 95 TEST_P(DeviceManagementBackendImplFailedRequestTest, RegisterRequest) {
85 DeviceRegisterResponseDelegateMock mock; 96 DeviceRegisterResponseDelegateMock mock;
86 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); 97 EXPECT_CALL(mock, OnError(GetParam().expected_error_));
87 em::DeviceRegisterRequest request; 98 em::DeviceRegisterRequest request;
88 service_.ProcessRegisterRequest("token", "device id", request, &mock); 99 service_->ProcessRegisterRequest("token", "device id", request, &mock);
89 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 100 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
90 ASSERT_TRUE(fetcher); 101 ASSERT_TRUE(fetcher);
91 102
92 fetcher->delegate()->OnURLFetchComplete(fetcher, 103 fetcher->delegate()->OnURLFetchComplete(fetcher,
93 GURL(kServiceURL), 104 GURL(kServiceURL),
94 GetParam().request_status_, 105 GetParam().request_status_,
95 GetParam().http_status_, 106 GetParam().http_status_,
96 ResponseCookies(), 107 ResponseCookies(),
97 GetParam().response_); 108 GetParam().response_);
98 } 109 }
99 110
100 TEST_P(DeviceManagementBackendImplFailedRequestTest, UnregisterRequest) { 111 TEST_P(DeviceManagementBackendImplFailedRequestTest, UnregisterRequest) {
101 DeviceUnregisterResponseDelegateMock mock; 112 DeviceUnregisterResponseDelegateMock mock;
102 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); 113 EXPECT_CALL(mock, OnError(GetParam().expected_error_));
103 em::DeviceUnregisterRequest request; 114 em::DeviceUnregisterRequest request;
104 service_.ProcessUnregisterRequest("token", request, &mock); 115 service_->ProcessUnregisterRequest("token", request, &mock);
105 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 116 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
106 ASSERT_TRUE(fetcher); 117 ASSERT_TRUE(fetcher);
107 118
108 fetcher->delegate()->OnURLFetchComplete(fetcher, 119 fetcher->delegate()->OnURLFetchComplete(fetcher,
109 GURL(kServiceURL), 120 GURL(kServiceURL),
110 GetParam().request_status_, 121 GetParam().request_status_,
111 GetParam().http_status_, 122 GetParam().http_status_,
112 ResponseCookies(), 123 ResponseCookies(),
113 GetParam().response_); 124 GetParam().response_);
114 } 125 }
115 126
116 TEST_P(DeviceManagementBackendImplFailedRequestTest, PolicyRequest) { 127 TEST_P(DeviceManagementBackendImplFailedRequestTest, PolicyRequest) {
117 DevicePolicyResponseDelegateMock mock; 128 DevicePolicyResponseDelegateMock mock;
118 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); 129 EXPECT_CALL(mock, OnError(GetParam().expected_error_));
119 em::DevicePolicyRequest request; 130 em::DevicePolicyRequest request;
120 request.set_policy_scope("Chrome"); 131 request.set_policy_scope("Chrome");
121 em::DevicePolicySettingRequest* setting_request = 132 em::DevicePolicySettingRequest* setting_request =
122 request.add_setting_request(); 133 request.add_setting_request();
123 setting_request->set_key("policy"); 134 setting_request->set_key("policy");
124 service_.ProcessPolicyRequest("token", request, &mock); 135 service_->ProcessPolicyRequest("token", request, &mock);
125 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 136 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
126 ASSERT_TRUE(fetcher); 137 ASSERT_TRUE(fetcher);
127 138
128 fetcher->delegate()->OnURLFetchComplete(fetcher, 139 fetcher->delegate()->OnURLFetchComplete(fetcher,
129 GURL(kServiceURL), 140 GURL(kServiceURL),
130 GetParam().request_status_, 141 GetParam().request_status_,
131 GetParam().http_status_, 142 GetParam().http_status_,
132 ResponseCookies(), 143 ResponseCookies(),
133 GetParam().response_); 144 GetParam().response_);
134 } 145 }
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 typedef std::vector<std::pair<std::string, std::string> > ParamMap; 235 typedef std::vector<std::pair<std::string, std::string> > ParamMap;
225 ParamMap params_; 236 ParamMap params_;
226 }; 237 };
227 238
228 TEST_F(DeviceManagementBackendImplTest, RegisterRequest) { 239 TEST_F(DeviceManagementBackendImplTest, RegisterRequest) {
229 DeviceRegisterResponseDelegateMock mock; 240 DeviceRegisterResponseDelegateMock mock;
230 em::DeviceRegisterResponse expected_response; 241 em::DeviceRegisterResponse expected_response;
231 expected_response.set_device_management_token("mtoken"); 242 expected_response.set_device_management_token("mtoken");
232 EXPECT_CALL(mock, HandleRegisterResponse(MessageEquals(expected_response))); 243 EXPECT_CALL(mock, HandleRegisterResponse(MessageEquals(expected_response)));
233 em::DeviceRegisterRequest request; 244 em::DeviceRegisterRequest request;
234 service_.ProcessRegisterRequest("token", "device id", request, &mock); 245 service_->ProcessRegisterRequest("token", "device id", request, &mock);
235 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 246 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
236 ASSERT_TRUE(fetcher); 247 ASSERT_TRUE(fetcher);
237 248
238 // Check the data the fetcher received. 249 // Check the data the fetcher received.
239 const GURL& request_url(fetcher->original_url()); 250 const GURL& request_url(fetcher->original_url());
240 const GURL service_url(kServiceURL); 251 const GURL service_url(kServiceURL);
241 EXPECT_EQ(service_url.scheme(), request_url.scheme()); 252 EXPECT_EQ(service_url.scheme(), request_url.scheme());
242 EXPECT_EQ(service_url.host(), request_url.host()); 253 EXPECT_EQ(service_url.host(), request_url.host());
243 EXPECT_EQ(service_url.port(), request_url.port()); 254 EXPECT_EQ(service_url.port(), request_url.port());
244 EXPECT_EQ(service_url.path(), request_url.path()); 255 EXPECT_EQ(service_url.path(), request_url.path());
(...skipping 21 matching lines...) Expand all
266 200, 277 200,
267 ResponseCookies(), 278 ResponseCookies(),
268 response_data); 279 response_data);
269 } 280 }
270 281
271 TEST_F(DeviceManagementBackendImplTest, UnregisterRequest) { 282 TEST_F(DeviceManagementBackendImplTest, UnregisterRequest) {
272 DeviceUnregisterResponseDelegateMock mock; 283 DeviceUnregisterResponseDelegateMock mock;
273 em::DeviceUnregisterResponse expected_response; 284 em::DeviceUnregisterResponse expected_response;
274 EXPECT_CALL(mock, HandleUnregisterResponse(MessageEquals(expected_response))); 285 EXPECT_CALL(mock, HandleUnregisterResponse(MessageEquals(expected_response)));
275 em::DeviceUnregisterRequest request; 286 em::DeviceUnregisterRequest request;
276 service_.ProcessUnregisterRequest("dmtokenvalue", request, &mock); 287 service_->ProcessUnregisterRequest("dmtokenvalue", request, &mock);
277 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 288 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
278 ASSERT_TRUE(fetcher); 289 ASSERT_TRUE(fetcher);
279 290
280 // Check the data the fetcher received. 291 // Check the data the fetcher received.
281 const GURL& request_url(fetcher->original_url()); 292 const GURL& request_url(fetcher->original_url());
282 const GURL service_url(kServiceURL); 293 const GURL service_url(kServiceURL);
283 EXPECT_EQ(service_url.scheme(), request_url.scheme()); 294 EXPECT_EQ(service_url.scheme(), request_url.scheme());
284 EXPECT_EQ(service_url.host(), request_url.host()); 295 EXPECT_EQ(service_url.host(), request_url.host());
285 EXPECT_EQ(service_url.port(), request_url.port()); 296 EXPECT_EQ(service_url.port(), request_url.port());
286 EXPECT_EQ(service_url.path(), request_url.path()); 297 EXPECT_EQ(service_url.path(), request_url.path());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 em::GenericValue::VALUE_TYPE_BOOL); 339 em::GenericValue::VALUE_TYPE_BOOL);
329 named_value->mutable_value()->set_bool_value(false); 340 named_value->mutable_value()->set_bool_value(false);
330 EXPECT_CALL(mock, HandlePolicyResponse(MessageEquals(expected_response))); 341 EXPECT_CALL(mock, HandlePolicyResponse(MessageEquals(expected_response)));
331 342
332 em::DevicePolicyRequest request; 343 em::DevicePolicyRequest request;
333 request.set_policy_scope("chromium"); 344 request.set_policy_scope("chromium");
334 em::DevicePolicySettingRequest* setting_request = 345 em::DevicePolicySettingRequest* setting_request =
335 request.add_setting_request(); 346 request.add_setting_request();
336 setting_request->set_key("policy"); 347 setting_request->set_key("policy");
337 setting_request->set_watermark("stale"); 348 setting_request->set_watermark("stale");
338 service_.ProcessPolicyRequest("dmtokenvalue", request, &mock); 349 service_->ProcessPolicyRequest("dmtokenvalue", request, &mock);
339 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); 350 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
340 ASSERT_TRUE(fetcher); 351 ASSERT_TRUE(fetcher);
341 352
342 // Check the data the fetcher received. 353 // Check the data the fetcher received.
343 const GURL& request_url(fetcher->original_url()); 354 const GURL& request_url(fetcher->original_url());
344 const GURL service_url(kServiceURL); 355 const GURL service_url(kServiceURL);
345 EXPECT_EQ(service_url.scheme(), request_url.scheme()); 356 EXPECT_EQ(service_url.scheme(), request_url.scheme());
346 EXPECT_EQ(service_url.host(), request_url.host()); 357 EXPECT_EQ(service_url.host(), request_url.host());
347 EXPECT_EQ(service_url.port(), request_url.port()); 358 EXPECT_EQ(service_url.port(), request_url.port());
348 EXPECT_EQ(service_url.path(), request_url.path()); 359 EXPECT_EQ(service_url.path(), request_url.path());
(...skipping 15 matching lines...) Expand all
364 response_wrapper.mutable_policy_response()->CopyFrom(expected_response); 375 response_wrapper.mutable_policy_response()->CopyFrom(expected_response);
365 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data)); 376 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data));
366 URLRequestStatus status(URLRequestStatus::SUCCESS, 0); 377 URLRequestStatus status(URLRequestStatus::SUCCESS, 0);
367 fetcher->delegate()->OnURLFetchComplete(fetcher, 378 fetcher->delegate()->OnURLFetchComplete(fetcher,
368 GURL(kServiceURL), 379 GURL(kServiceURL),
369 status, 380 status,
370 200, 381 200,
371 ResponseCookies(), 382 ResponseCookies(),
372 response_data); 383 response_data);
373 } 384 }
374 385
markusheintz_ 2010/11/18 12:40:36 Sorry if this is a dumb question but what exactly
Mattias Nissler (ping if slow) 2010/11/19 17:21:53 Yes, that's a reset of a scoped_ptr, so the backen
386 TEST_F(DeviceManagementBackendImplTest, CancelRegisterRequest) {
387 DeviceRegisterResponseDelegateMock mock;
388 EXPECT_CALL(mock, HandleRegisterResponse(_)).Times(0);
389 em::DeviceRegisterRequest request;
390 service_->ProcessRegisterRequest("token", "device id", request, &mock);
391 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
392 ASSERT_TRUE(fetcher);
393
394 // There shouldn't be any callbacks.
395 service_.reset();
396 }
397
398 TEST_F(DeviceManagementBackendImplTest, CancelUnregisterRequest) {
399 DeviceUnregisterResponseDelegateMock mock;
400 EXPECT_CALL(mock, HandleUnregisterResponse(_)).Times(0);
401 em::DeviceUnregisterRequest request;
402 service_->ProcessUnregisterRequest("dmtokenvalue", request, &mock);
403 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
404 ASSERT_TRUE(fetcher);
405
406 // There shouldn't be any callbacks.
407 service_.reset();
408 }
409
410 TEST_F(DeviceManagementBackendImplTest, CancelPolicyRequest) {
411 DevicePolicyResponseDelegateMock mock;
412 EXPECT_CALL(mock, HandlePolicyResponse(_)).Times(0);
413 em::DevicePolicyRequest request;
414 request.set_policy_scope("chromium");
markusheintz_ 2010/11/18 12:40:36 Not sure if this is important for you test, but th
Mattias Nissler (ping if slow) 2010/11/19 17:21:53 Done.
415 em::DevicePolicySettingRequest* setting_request =
416 request.add_setting_request();
417 setting_request->set_key("policy");
418 setting_request->set_watermark("stale");
419 service_->ProcessPolicyRequest("dmtokenvalue", request, &mock);
420 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
421 ASSERT_TRUE(fetcher);
422
423 // There shouldn't be any callbacks.
424 service_.reset();
425 }
426
427 TEST_F(DeviceManagementBackendImplTest, BackendSwapping) {
428 // Start with a non-existing backend.
429 backend_.reset();
430
431 // Make a request. We should not see any fetchers being created.
432 DeviceRegisterResponseDelegateMock mock;
433 em::DeviceRegisterResponse expected_response;
434 expected_response.set_device_management_token("mtoken");
435 EXPECT_CALL(mock, HandleRegisterResponse(MessageEquals(expected_response)));
436 em::DeviceRegisterRequest request;
437 service_->ProcessRegisterRequest("token", "device id", request, &mock);
438 TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
439 ASSERT_FALSE(fetcher);
440
441 // Now create a backend. That should start the job.
442 ResetBackend();
443 fetcher = factory_.GetFetcherByID(0);
444 ASSERT_TRUE(fetcher);
445 factory_.RemoveFetcherFromMap(0);
446
447 // Killing the backend should stop the job.
448 backend_.reset();
449 fetcher = factory_.GetFetcherByID(0);
450 ASSERT_FALSE(fetcher);
451
452 // Recreate the backend and process the job, which should trigger the
453 // callback.
454 ResetBackend();
455 fetcher = factory_.GetFetcherByID(0);
456 ASSERT_TRUE(fetcher);
457
458 std::string response_data;
459 em::DeviceManagementResponse response_wrapper;
460 response_wrapper.set_error(em::DeviceManagementResponse::SUCCESS);
461 response_wrapper.mutable_register_response()->CopyFrom(expected_response);
462 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data));
463 URLRequestStatus status(URLRequestStatus::SUCCESS, 0);
464 fetcher->delegate()->OnURLFetchComplete(fetcher,
465 GURL(kServiceURL),
466 status,
467 200,
468 ResponseCookies(),
469 response_data);
470 }
471
375 } // namespace policy 472 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698