Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |