Index: chrome/browser/policy/device_management_service_unittest.cc |
diff --git a/chrome/browser/policy/device_management_backend_impl_unittest.cc b/chrome/browser/policy/device_management_service_unittest.cc |
similarity index 73% |
rename from chrome/browser/policy/device_management_backend_impl_unittest.cc |
rename to chrome/browser/policy/device_management_service_unittest.cc |
index 1e93f3a6ef6e6356d7ee025fd5055b84f54a8319..b9df3d58ee446a05b3459b28b9a049313dc6faf7 100644 |
--- a/chrome/browser/policy/device_management_backend_impl_unittest.cc |
+++ b/chrome/browser/policy/device_management_service_unittest.cc |
@@ -2,15 +2,17 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "chrome/browser/policy/device_management_backend_impl.h" |
+#include "chrome/browser/policy/device_management_service.h" |
#include "base/message_loop.h" |
#include "base/string_split.h" |
#include "chrome/browser/browser_thread.h" |
#include "chrome/browser/policy/device_management_backend_mock.h" |
#include "chrome/common/net/test_url_fetcher_factory.h" |
+#include "chrome/test/test_url_request_context_getter.h" |
#include "net/base/escape.h" |
#include "net/url_request/url_request_status.h" |
+#include "net/url_request/url_request_unittest.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "testing/gmock/include/gmock/gmock.h" |
@@ -33,15 +35,18 @@ const char kResponseErrorActivationPending[] = "\x08\x04"; |
} // namespace |
-// Unit tests for the google apps policy backend. The pattern here is each test |
-// case triggeres a request and installs a mock delegate. The test will run and |
-// the default action installed on the test delegate will quit the loop. |
+// Unit tests for the device management policy backend. The tests are run |
+// against a TestURLFetcherFactory that is used to short-circuit the request |
+// without calling into the actual network stack. |
template<typename TESTBASE> |
-class DeviceManagementBackendImplTestBase : public TESTBASE { |
+class DeviceManagementServiceTestBase : public TESTBASE { |
protected: |
- DeviceManagementBackendImplTestBase() |
- : io_thread_(BrowserThread::IO, &loop_), |
- service_(kServiceURL) {} |
+ DeviceManagementServiceTestBase() |
+ : request_context_(new TestURLRequestContextGetter()), |
+ io_thread_(BrowserThread::IO, &loop_) { |
+ ResetBackend(); |
+ backend_->Initialize(request_context_.get()); |
+ } |
virtual void SetUp() { |
URLFetcher::set_factory(&factory_); |
@@ -49,13 +54,25 @@ class DeviceManagementBackendImplTestBase : public TESTBASE { |
virtual void TearDown() { |
URLFetcher::set_factory(NULL); |
+ service_.reset(); |
+ backend_.reset(); |
loop_.RunAllPending(); |
} |
+ void ResetBackend() { |
+ service_.reset(); |
+ backend_.reset(new DeviceManagementService(kServiceURL)); |
+ service_.reset(backend_->CreateBackend()); |
+ } |
+ |
+ TestURLFetcherFactory factory_; |
+ scoped_refptr<TestURLRequestContextGetter> request_context_; |
+ scoped_ptr<DeviceManagementService> backend_; |
+ scoped_ptr<DeviceManagementBackend> service_; |
+ |
+ private: |
MessageLoopForUI loop_; |
BrowserThread io_thread_; |
- TestURLFetcherFactory factory_; |
- DeviceManagementBackendImpl service_; |
}; |
struct FailedRequestParams { |
@@ -76,16 +93,16 @@ struct FailedRequestParams { |
// A parameterized test case for erroneous response situations, they're mostly |
// the same for all kinds of requests. |
-class DeviceManagementBackendImplFailedRequestTest |
- : public DeviceManagementBackendImplTestBase< |
+class DeviceManagementServiceFailedRequestTest |
+ : public DeviceManagementServiceTestBase< |
testing::TestWithParam<FailedRequestParams> > { |
}; |
-TEST_P(DeviceManagementBackendImplFailedRequestTest, RegisterRequest) { |
+TEST_P(DeviceManagementServiceFailedRequestTest, RegisterRequest) { |
DeviceRegisterResponseDelegateMock mock; |
EXPECT_CALL(mock, OnError(GetParam().expected_error_)); |
em::DeviceRegisterRequest request; |
- service_.ProcessRegisterRequest("token", "device id", request, &mock); |
+ service_->ProcessRegisterRequest("token", "device id", request, &mock); |
TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
ASSERT_TRUE(fetcher); |
@@ -97,11 +114,11 @@ TEST_P(DeviceManagementBackendImplFailedRequestTest, RegisterRequest) { |
GetParam().response_); |
} |
-TEST_P(DeviceManagementBackendImplFailedRequestTest, UnregisterRequest) { |
+TEST_P(DeviceManagementServiceFailedRequestTest, UnregisterRequest) { |
DeviceUnregisterResponseDelegateMock mock; |
EXPECT_CALL(mock, OnError(GetParam().expected_error_)); |
em::DeviceUnregisterRequest request; |
- service_.ProcessUnregisterRequest("token", request, &mock); |
+ service_->ProcessUnregisterRequest("token", request, &mock); |
TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
ASSERT_TRUE(fetcher); |
@@ -113,7 +130,7 @@ TEST_P(DeviceManagementBackendImplFailedRequestTest, UnregisterRequest) { |
GetParam().response_); |
} |
-TEST_P(DeviceManagementBackendImplFailedRequestTest, PolicyRequest) { |
+TEST_P(DeviceManagementServiceFailedRequestTest, PolicyRequest) { |
DevicePolicyResponseDelegateMock mock; |
EXPECT_CALL(mock, OnError(GetParam().expected_error_)); |
em::DevicePolicyRequest request; |
@@ -121,7 +138,7 @@ TEST_P(DeviceManagementBackendImplFailedRequestTest, PolicyRequest) { |
em::DevicePolicySettingRequest* setting_request = |
request.add_setting_request(); |
setting_request->set_key("policy"); |
- service_.ProcessPolicyRequest("token", request, &mock); |
+ service_->ProcessPolicyRequest("token", request, &mock); |
TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
ASSERT_TRUE(fetcher); |
@@ -134,8 +151,8 @@ TEST_P(DeviceManagementBackendImplFailedRequestTest, PolicyRequest) { |
} |
INSTANTIATE_TEST_CASE_P( |
- DeviceManagementBackendImplFailedRequestTestInstance, |
- DeviceManagementBackendImplFailedRequestTest, |
+ DeviceManagementServiceFailedRequestTestInstance, |
+ DeviceManagementServiceFailedRequestTest, |
testing::Values( |
FailedRequestParams( |
DeviceManagementBackend::kErrorRequestFailed, |
@@ -173,8 +190,8 @@ INSTANTIATE_TEST_CASE_P( |
200, |
PROTO_STRING(kResponseErrorActivationPending)))); |
-class DeviceManagementBackendImplTest |
- : public DeviceManagementBackendImplTestBase<testing::Test> { |
+class DeviceManagementServiceTest |
+ : public DeviceManagementServiceTestBase<testing::Test> { |
}; |
MATCHER_P(MessageEquals, reference, "") { |
@@ -225,13 +242,13 @@ class QueryParams { |
ParamMap params_; |
}; |
-TEST_F(DeviceManagementBackendImplTest, RegisterRequest) { |
+TEST_F(DeviceManagementServiceTest, RegisterRequest) { |
DeviceRegisterResponseDelegateMock mock; |
em::DeviceRegisterResponse expected_response; |
expected_response.set_device_management_token("mtoken"); |
EXPECT_CALL(mock, HandleRegisterResponse(MessageEquals(expected_response))); |
em::DeviceRegisterRequest request; |
- service_.ProcessRegisterRequest("token", "device id", request, &mock); |
+ service_->ProcessRegisterRequest("token", "device id", request, &mock); |
TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
ASSERT_TRUE(fetcher); |
@@ -268,12 +285,12 @@ TEST_F(DeviceManagementBackendImplTest, RegisterRequest) { |
response_data); |
} |
-TEST_F(DeviceManagementBackendImplTest, UnregisterRequest) { |
+TEST_F(DeviceManagementServiceTest, UnregisterRequest) { |
DeviceUnregisterResponseDelegateMock mock; |
em::DeviceUnregisterResponse expected_response; |
EXPECT_CALL(mock, HandleUnregisterResponse(MessageEquals(expected_response))); |
em::DeviceUnregisterRequest request; |
- service_.ProcessUnregisterRequest("dmtokenvalue", request, &mock); |
+ service_->ProcessUnregisterRequest("dmtokenvalue", request, &mock); |
TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
ASSERT_TRUE(fetcher); |
@@ -310,7 +327,7 @@ TEST_F(DeviceManagementBackendImplTest, UnregisterRequest) { |
response_data); |
} |
-TEST_F(DeviceManagementBackendImplTest, PolicyRequest) { |
+TEST_F(DeviceManagementServiceTest, PolicyRequest) { |
DevicePolicyResponseDelegateMock mock; |
em::DevicePolicyResponse expected_response; |
em::DevicePolicySetting* policy_setting = expected_response.add_setting(); |
@@ -335,7 +352,7 @@ TEST_F(DeviceManagementBackendImplTest, PolicyRequest) { |
request.add_setting_request(); |
setting_request->set_key("policy"); |
setting_request->set_watermark("stale"); |
- service_.ProcessPolicyRequest("dmtokenvalue", request, &mock); |
+ service_->ProcessPolicyRequest("dmtokenvalue", request, &mock); |
TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
ASSERT_TRUE(fetcher); |
@@ -372,4 +389,80 @@ TEST_F(DeviceManagementBackendImplTest, PolicyRequest) { |
response_data); |
} |
+TEST_F(DeviceManagementServiceTest, CancelRegisterRequest) { |
+ DeviceRegisterResponseDelegateMock mock; |
+ EXPECT_CALL(mock, HandleRegisterResponse(_)).Times(0); |
+ em::DeviceRegisterRequest request; |
+ service_->ProcessRegisterRequest("token", "device id", request, &mock); |
+ TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
+ ASSERT_TRUE(fetcher); |
+ |
+ // There shouldn't be any callbacks. |
+ service_.reset(); |
+} |
+ |
+TEST_F(DeviceManagementServiceTest, CancelUnregisterRequest) { |
+ DeviceUnregisterResponseDelegateMock mock; |
+ EXPECT_CALL(mock, HandleUnregisterResponse(_)).Times(0); |
+ em::DeviceUnregisterRequest request; |
+ service_->ProcessUnregisterRequest("dmtokenvalue", request, &mock); |
+ TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
+ ASSERT_TRUE(fetcher); |
+ |
+ // There shouldn't be any callbacks. |
+ service_.reset(); |
+} |
+ |
+TEST_F(DeviceManagementServiceTest, CancelPolicyRequest) { |
+ DevicePolicyResponseDelegateMock mock; |
+ EXPECT_CALL(mock, HandlePolicyResponse(_)).Times(0); |
+ em::DevicePolicyRequest request; |
+ request.set_policy_scope("chromium"); |
+ em::DevicePolicySettingRequest* setting_request = |
+ request.add_setting_request(); |
+ setting_request->set_key("policy"); |
+ setting_request->set_watermark("stale"); |
+ service_->ProcessPolicyRequest("dmtokenvalue", request, &mock); |
+ TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
+ ASSERT_TRUE(fetcher); |
+ |
+ // There shouldn't be any callbacks. |
+ service_.reset(); |
+} |
+ |
+TEST_F(DeviceManagementServiceTest, JobQueueing) { |
+ // Start with a non-initialized backend. |
+ ResetBackend(); |
+ |
+ // Make a request. We should not see any fetchers being created. |
+ DeviceRegisterResponseDelegateMock mock; |
+ em::DeviceRegisterResponse expected_response; |
+ expected_response.set_device_management_token("mtoken"); |
+ EXPECT_CALL(mock, HandleRegisterResponse(MessageEquals(expected_response))); |
+ em::DeviceRegisterRequest request; |
+ service_->ProcessRegisterRequest("token", "device id", request, &mock); |
+ TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
+ ASSERT_FALSE(fetcher); |
+ |
+ // Now initialize the backend. That should start the job. |
+ backend_->Initialize(request_context_.get()); |
+ fetcher = factory_.GetFetcherByID(0); |
+ ASSERT_TRUE(fetcher); |
+ factory_.RemoveFetcherFromMap(0); |
+ |
+ // Check that the request is processed as expected. |
+ std::string response_data; |
+ em::DeviceManagementResponse response_wrapper; |
+ response_wrapper.set_error(em::DeviceManagementResponse::SUCCESS); |
+ response_wrapper.mutable_register_response()->CopyFrom(expected_response); |
+ ASSERT_TRUE(response_wrapper.SerializeToString(&response_data)); |
+ URLRequestStatus status(URLRequestStatus::SUCCESS, 0); |
+ fetcher->delegate()->OnURLFetchComplete(fetcher, |
+ GURL(kServiceURL), |
+ status, |
+ 200, |
+ ResponseCookies(), |
+ response_data); |
+} |
+ |
} // namespace policy |