| 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" | |
| 6 | |
| 7 #include "base/message_loop.h" | 5 #include "base/message_loop.h" |
| 8 #include "base/string_split.h" | 6 #include "base/string_split.h" |
| 9 #include "chrome/browser/browser_thread.h" | 7 #include "chrome/browser/browser_thread.h" |
| 10 #include "chrome/browser/policy/device_management_backend_mock.h" | 8 #include "chrome/browser/policy/device_management_backend_mock.h" |
| 9 #include "chrome/browser/policy/device_management_service.h" |
| 11 #include "chrome/common/net/test_url_fetcher_factory.h" | 10 #include "chrome/common/net/test_url_fetcher_factory.h" |
| 11 #include "chrome/test/test_url_request_context_getter.h" |
| 12 #include "net/base/escape.h" | 12 #include "net/base/escape.h" |
| 13 #include "net/url_request/url_request_status.h" | 13 #include "net/url_request/url_request_status.h" |
| 14 #include "net/url_request/url_request_unittest.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 15 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
| 16 | 17 |
| 17 using testing::_; | 18 using testing::_; |
| 18 | 19 |
| 19 namespace policy { | 20 namespace policy { |
| 20 | 21 |
| 21 namespace { | 22 const char kServiceUrl[] = "https://example.com/management_service"; |
| 22 | |
| 23 const char kServiceURL[] = "https://example.com/management_service"; | |
| 24 | 23 |
| 25 // Encoded error response messages for testing the error code paths. | 24 // Encoded error response messages for testing the error code paths. |
| 26 const char kResponseEmpty[] = "\x08\x00"; | 25 const char kResponseEmpty[] = "\x08\x00"; |
| 27 const char kResponseErrorManagementNotSupported[] = "\x08\x01"; | 26 const char kResponseErrorManagementNotSupported[] = "\x08\x01"; |
| 28 const char kResponseErrorDeviceNotFound[] = "\x08\x02"; | 27 const char kResponseErrorDeviceNotFound[] = "\x08\x02"; |
| 29 const char kResponseErrorManagementTokenInvalid[] = "\x08\x03"; | 28 const char kResponseErrorManagementTokenInvalid[] = "\x08\x03"; |
| 30 const char kResponseErrorActivationPending[] = "\x08\x04"; | 29 const char kResponseErrorActivationPending[] = "\x08\x04"; |
| 31 | 30 |
| 32 #define PROTO_STRING(name) (std::string(name, arraysize(name) - 1)) | 31 #define PROTO_STRING(name) (std::string(name, arraysize(name) - 1)) |
| 33 | 32 |
| 34 } // namespace | 33 // Unit tests for the device management policy service. The tests are run |
| 35 | 34 // against a TestURLFetcherFactory that is used to short-circuit the request |
| 36 // Unit tests for the google apps policy backend. The pattern here is each test | 35 // without calling into the actual network stack. |
| 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. | |
| 39 template<typename TESTBASE> | 36 template<typename TESTBASE> |
| 40 class DeviceManagementBackendImplTestBase : public TESTBASE { | 37 class DeviceManagementServiceTestBase : public TESTBASE { |
| 41 protected: | 38 protected: |
| 42 DeviceManagementBackendImplTestBase() | 39 DeviceManagementServiceTestBase() |
| 43 : io_thread_(BrowserThread::IO, &loop_), | 40 : request_context_(new TestURLRequestContextGetter()), |
| 44 service_(kServiceURL) {} | 41 io_thread_(BrowserThread::IO, &loop_) { |
| 42 ResetService(); |
| 43 service_->Initialize(request_context_.get()); |
| 44 } |
| 45 | 45 |
| 46 virtual void SetUp() { | 46 virtual void SetUp() { |
| 47 URLFetcher::set_factory(&factory_); | 47 URLFetcher::set_factory(&factory_); |
| 48 } | 48 } |
| 49 | 49 |
| 50 virtual void TearDown() { | 50 virtual void TearDown() { |
| 51 URLFetcher::set_factory(NULL); | 51 URLFetcher::set_factory(NULL); |
| 52 backend_.reset(); |
| 53 service_.reset(); |
| 54 request_context_ = NULL; |
| 52 loop_.RunAllPending(); | 55 loop_.RunAllPending(); |
| 53 } | 56 } |
| 54 | 57 |
| 58 void ResetService() { |
| 59 backend_.reset(); |
| 60 service_.reset(new DeviceManagementService(kServiceUrl)); |
| 61 backend_.reset(service_->CreateBackend()); |
| 62 } |
| 63 |
| 64 TestURLFetcherFactory factory_; |
| 65 scoped_refptr<TestURLRequestContextGetter> request_context_; |
| 66 scoped_ptr<DeviceManagementService> service_; |
| 67 scoped_ptr<DeviceManagementBackend> backend_; |
| 68 |
| 69 private: |
| 55 MessageLoopForUI loop_; | 70 MessageLoopForUI loop_; |
| 56 BrowserThread io_thread_; | 71 BrowserThread io_thread_; |
| 57 TestURLFetcherFactory factory_; | |
| 58 DeviceManagementBackendImpl service_; | |
| 59 }; | 72 }; |
| 60 | 73 |
| 61 struct FailedRequestParams { | 74 struct FailedRequestParams { |
| 62 FailedRequestParams(DeviceManagementBackend::ErrorCode expected_error, | 75 FailedRequestParams(DeviceManagementBackend::ErrorCode expected_error, |
| 63 URLRequestStatus::Status request_status, | 76 URLRequestStatus::Status request_status, |
| 64 int http_status, | 77 int http_status, |
| 65 const std::string& response) | 78 const std::string& response) |
| 66 : expected_error_(expected_error), | 79 : expected_error_(expected_error), |
| 67 request_status_(request_status, 0), | 80 request_status_(request_status, 0), |
| 68 http_status_(http_status), | 81 http_status_(http_status), |
| 69 response_(response) {} | 82 response_(response) {} |
| 70 | 83 |
| 71 DeviceManagementBackend::ErrorCode expected_error_; | 84 DeviceManagementBackend::ErrorCode expected_error_; |
| 72 URLRequestStatus request_status_; | 85 URLRequestStatus request_status_; |
| 73 int http_status_; | 86 int http_status_; |
| 74 std::string response_; | 87 std::string response_; |
| 75 }; | 88 }; |
| 76 | 89 |
| 77 // A parameterized test case for erroneous response situations, they're mostly | 90 // A parameterized test case for erroneous response situations, they're mostly |
| 78 // the same for all kinds of requests. | 91 // the same for all kinds of requests. |
| 79 class DeviceManagementBackendImplFailedRequestTest | 92 class DeviceManagementServiceFailedRequestTest |
| 80 : public DeviceManagementBackendImplTestBase< | 93 : public DeviceManagementServiceTestBase< |
| 81 testing::TestWithParam<FailedRequestParams> > { | 94 testing::TestWithParam<FailedRequestParams> > { |
| 82 }; | 95 }; |
| 83 | 96 |
| 84 TEST_P(DeviceManagementBackendImplFailedRequestTest, RegisterRequest) { | 97 TEST_P(DeviceManagementServiceFailedRequestTest, RegisterRequest) { |
| 85 DeviceRegisterResponseDelegateMock mock; | 98 DeviceRegisterResponseDelegateMock mock; |
| 86 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); | 99 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); |
| 87 em::DeviceRegisterRequest request; | 100 em::DeviceRegisterRequest request; |
| 88 service_.ProcessRegisterRequest("token", "device id", request, &mock); | 101 backend_->ProcessRegisterRequest("token", "device id", request, &mock); |
| 89 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 102 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 90 ASSERT_TRUE(fetcher); | 103 ASSERT_TRUE(fetcher); |
| 91 | 104 |
| 92 fetcher->delegate()->OnURLFetchComplete(fetcher, | 105 fetcher->delegate()->OnURLFetchComplete(fetcher, |
| 93 GURL(kServiceURL), | 106 GURL(kServiceUrl), |
| 94 GetParam().request_status_, | 107 GetParam().request_status_, |
| 95 GetParam().http_status_, | 108 GetParam().http_status_, |
| 96 ResponseCookies(), | 109 ResponseCookies(), |
| 97 GetParam().response_); | 110 GetParam().response_); |
| 98 } | 111 } |
| 99 | 112 |
| 100 TEST_P(DeviceManagementBackendImplFailedRequestTest, UnregisterRequest) { | 113 TEST_P(DeviceManagementServiceFailedRequestTest, UnregisterRequest) { |
| 101 DeviceUnregisterResponseDelegateMock mock; | 114 DeviceUnregisterResponseDelegateMock mock; |
| 102 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); | 115 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); |
| 103 em::DeviceUnregisterRequest request; | 116 em::DeviceUnregisterRequest request; |
| 104 service_.ProcessUnregisterRequest("token", request, &mock); | 117 backend_->ProcessUnregisterRequest("token", request, &mock); |
| 105 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 118 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 106 ASSERT_TRUE(fetcher); | 119 ASSERT_TRUE(fetcher); |
| 107 | 120 |
| 108 fetcher->delegate()->OnURLFetchComplete(fetcher, | 121 fetcher->delegate()->OnURLFetchComplete(fetcher, |
| 109 GURL(kServiceURL), | 122 GURL(kServiceUrl), |
| 110 GetParam().request_status_, | 123 GetParam().request_status_, |
| 111 GetParam().http_status_, | 124 GetParam().http_status_, |
| 112 ResponseCookies(), | 125 ResponseCookies(), |
| 113 GetParam().response_); | 126 GetParam().response_); |
| 114 } | 127 } |
| 115 | 128 |
| 116 TEST_P(DeviceManagementBackendImplFailedRequestTest, PolicyRequest) { | 129 TEST_P(DeviceManagementServiceFailedRequestTest, PolicyRequest) { |
| 117 DevicePolicyResponseDelegateMock mock; | 130 DevicePolicyResponseDelegateMock mock; |
| 118 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); | 131 EXPECT_CALL(mock, OnError(GetParam().expected_error_)); |
| 119 em::DevicePolicyRequest request; | 132 em::DevicePolicyRequest request; |
| 120 request.set_policy_scope("Chrome"); | 133 request.set_policy_scope("Chrome"); |
| 121 em::DevicePolicySettingRequest* setting_request = | 134 em::DevicePolicySettingRequest* setting_request = |
| 122 request.add_setting_request(); | 135 request.add_setting_request(); |
| 123 setting_request->set_key("policy"); | 136 setting_request->set_key("policy"); |
| 124 service_.ProcessPolicyRequest("token", request, &mock); | 137 backend_->ProcessPolicyRequest("token", request, &mock); |
| 125 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 138 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 126 ASSERT_TRUE(fetcher); | 139 ASSERT_TRUE(fetcher); |
| 127 | 140 |
| 128 fetcher->delegate()->OnURLFetchComplete(fetcher, | 141 fetcher->delegate()->OnURLFetchComplete(fetcher, |
| 129 GURL(kServiceURL), | 142 GURL(kServiceUrl), |
| 130 GetParam().request_status_, | 143 GetParam().request_status_, |
| 131 GetParam().http_status_, | 144 GetParam().http_status_, |
| 132 ResponseCookies(), | 145 ResponseCookies(), |
| 133 GetParam().response_); | 146 GetParam().response_); |
| 134 } | 147 } |
| 135 | 148 |
| 136 INSTANTIATE_TEST_CASE_P( | 149 INSTANTIATE_TEST_CASE_P( |
| 137 DeviceManagementBackendImplFailedRequestTestInstance, | 150 DeviceManagementServiceFailedRequestTestInstance, |
| 138 DeviceManagementBackendImplFailedRequestTest, | 151 DeviceManagementServiceFailedRequestTest, |
| 139 testing::Values( | 152 testing::Values( |
| 140 FailedRequestParams( | 153 FailedRequestParams( |
| 141 DeviceManagementBackend::kErrorRequestFailed, | 154 DeviceManagementBackend::kErrorRequestFailed, |
| 142 URLRequestStatus::FAILED, | 155 URLRequestStatus::FAILED, |
| 143 200, | 156 200, |
| 144 PROTO_STRING(kResponseEmpty)), | 157 PROTO_STRING(kResponseEmpty)), |
| 145 FailedRequestParams( | 158 FailedRequestParams( |
| 146 DeviceManagementBackend::kErrorHttpStatus, | 159 DeviceManagementBackend::kErrorHttpStatus, |
| 147 URLRequestStatus::SUCCESS, | 160 URLRequestStatus::SUCCESS, |
| 148 500, | 161 500, |
| (...skipping 17 matching lines...) Expand all Loading... |
| 166 DeviceManagementBackend::kErrorServiceManagementTokenInvalid, | 179 DeviceManagementBackend::kErrorServiceManagementTokenInvalid, |
| 167 URLRequestStatus::SUCCESS, | 180 URLRequestStatus::SUCCESS, |
| 168 200, | 181 200, |
| 169 PROTO_STRING(kResponseErrorManagementTokenInvalid)), | 182 PROTO_STRING(kResponseErrorManagementTokenInvalid)), |
| 170 FailedRequestParams( | 183 FailedRequestParams( |
| 171 DeviceManagementBackend::kErrorServiceActivationPending, | 184 DeviceManagementBackend::kErrorServiceActivationPending, |
| 172 URLRequestStatus::SUCCESS, | 185 URLRequestStatus::SUCCESS, |
| 173 200, | 186 200, |
| 174 PROTO_STRING(kResponseErrorActivationPending)))); | 187 PROTO_STRING(kResponseErrorActivationPending)))); |
| 175 | 188 |
| 176 class DeviceManagementBackendImplTest | 189 class DeviceManagementServiceTest |
| 177 : public DeviceManagementBackendImplTestBase<testing::Test> { | 190 : public DeviceManagementServiceTestBase<testing::Test> { |
| 178 }; | 191 }; |
| 179 | 192 |
| 180 MATCHER_P(MessageEquals, reference, "") { | 193 MATCHER_P(MessageEquals, reference, "") { |
| 181 std::string reference_data; | 194 std::string reference_data; |
| 182 std::string arg_data; | 195 std::string arg_data; |
| 183 return arg.SerializeToString(&arg_data) && | 196 return arg.SerializeToString(&arg_data) && |
| 184 reference.SerializeToString(&reference_data) && | 197 reference.SerializeToString(&reference_data) && |
| 185 arg_data == reference_data; | 198 arg_data == reference_data; |
| 186 } | 199 } |
| 187 | 200 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 218 } | 231 } |
| 219 } | 232 } |
| 220 return found; | 233 return found; |
| 221 } | 234 } |
| 222 | 235 |
| 223 private: | 236 private: |
| 224 typedef std::vector<std::pair<std::string, std::string> > ParamMap; | 237 typedef std::vector<std::pair<std::string, std::string> > ParamMap; |
| 225 ParamMap params_; | 238 ParamMap params_; |
| 226 }; | 239 }; |
| 227 | 240 |
| 228 TEST_F(DeviceManagementBackendImplTest, RegisterRequest) { | 241 TEST_F(DeviceManagementServiceTest, RegisterRequest) { |
| 229 DeviceRegisterResponseDelegateMock mock; | 242 DeviceRegisterResponseDelegateMock mock; |
| 230 em::DeviceRegisterResponse expected_response; | 243 em::DeviceRegisterResponse expected_response; |
| 231 expected_response.set_device_management_token("mtoken"); | 244 expected_response.set_device_management_token("mtoken"); |
| 232 EXPECT_CALL(mock, HandleRegisterResponse(MessageEquals(expected_response))); | 245 EXPECT_CALL(mock, HandleRegisterResponse(MessageEquals(expected_response))); |
| 233 em::DeviceRegisterRequest request; | 246 em::DeviceRegisterRequest request; |
| 234 service_.ProcessRegisterRequest("token", "device id", request, &mock); | 247 backend_->ProcessRegisterRequest("token", "device id", request, &mock); |
| 235 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 248 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 236 ASSERT_TRUE(fetcher); | 249 ASSERT_TRUE(fetcher); |
| 237 | 250 |
| 238 // Check the data the fetcher received. | 251 // Check the data the fetcher received. |
| 239 const GURL& request_url(fetcher->original_url()); | 252 const GURL& request_url(fetcher->original_url()); |
| 240 const GURL service_url(kServiceURL); | 253 const GURL service_url(kServiceUrl); |
| 241 EXPECT_EQ(service_url.scheme(), request_url.scheme()); | 254 EXPECT_EQ(service_url.scheme(), request_url.scheme()); |
| 242 EXPECT_EQ(service_url.host(), request_url.host()); | 255 EXPECT_EQ(service_url.host(), request_url.host()); |
| 243 EXPECT_EQ(service_url.port(), request_url.port()); | 256 EXPECT_EQ(service_url.port(), request_url.port()); |
| 244 EXPECT_EQ(service_url.path(), request_url.path()); | 257 EXPECT_EQ(service_url.path(), request_url.path()); |
| 245 | 258 |
| 246 QueryParams query_params(request_url.query()); | 259 QueryParams query_params(request_url.query()); |
| 247 EXPECT_TRUE(query_params.Check("request", "register")); | 260 EXPECT_TRUE(query_params.Check("request", "register")); |
| 248 | 261 |
| 249 em::DeviceManagementRequest expected_request_wrapper; | 262 em::DeviceManagementRequest expected_request_wrapper; |
| 250 expected_request_wrapper.mutable_register_request()->CopyFrom(request); | 263 expected_request_wrapper.mutable_register_request()->CopyFrom(request); |
| 251 std::string expected_request_data; | 264 std::string expected_request_data; |
| 252 ASSERT_TRUE(expected_request_wrapper.SerializeToString( | 265 ASSERT_TRUE(expected_request_wrapper.SerializeToString( |
| 253 &expected_request_data)); | 266 &expected_request_data)); |
| 254 EXPECT_EQ(expected_request_data, fetcher->upload_data()); | 267 EXPECT_EQ(expected_request_data, fetcher->upload_data()); |
| 255 | 268 |
| 256 // Generate the response. | 269 // Generate the response. |
| 257 std::string response_data; | 270 std::string response_data; |
| 258 em::DeviceManagementResponse response_wrapper; | 271 em::DeviceManagementResponse response_wrapper; |
| 259 response_wrapper.set_error(em::DeviceManagementResponse::SUCCESS); | 272 response_wrapper.set_error(em::DeviceManagementResponse::SUCCESS); |
| 260 response_wrapper.mutable_register_response()->CopyFrom(expected_response); | 273 response_wrapper.mutable_register_response()->CopyFrom(expected_response); |
| 261 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data)); | 274 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data)); |
| 262 URLRequestStatus status(URLRequestStatus::SUCCESS, 0); | 275 URLRequestStatus status(URLRequestStatus::SUCCESS, 0); |
| 263 fetcher->delegate()->OnURLFetchComplete(fetcher, | 276 fetcher->delegate()->OnURLFetchComplete(fetcher, |
| 264 GURL(kServiceURL), | 277 GURL(kServiceUrl), |
| 265 status, | 278 status, |
| 266 200, | 279 200, |
| 267 ResponseCookies(), | 280 ResponseCookies(), |
| 268 response_data); | 281 response_data); |
| 269 } | 282 } |
| 270 | 283 |
| 271 TEST_F(DeviceManagementBackendImplTest, UnregisterRequest) { | 284 TEST_F(DeviceManagementServiceTest, UnregisterRequest) { |
| 272 DeviceUnregisterResponseDelegateMock mock; | 285 DeviceUnregisterResponseDelegateMock mock; |
| 273 em::DeviceUnregisterResponse expected_response; | 286 em::DeviceUnregisterResponse expected_response; |
| 274 EXPECT_CALL(mock, HandleUnregisterResponse(MessageEquals(expected_response))); | 287 EXPECT_CALL(mock, HandleUnregisterResponse(MessageEquals(expected_response))); |
| 275 em::DeviceUnregisterRequest request; | 288 em::DeviceUnregisterRequest request; |
| 276 service_.ProcessUnregisterRequest("dmtokenvalue", request, &mock); | 289 backend_->ProcessUnregisterRequest("dmtokenvalue", request, &mock); |
| 277 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 290 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 278 ASSERT_TRUE(fetcher); | 291 ASSERT_TRUE(fetcher); |
| 279 | 292 |
| 280 // Check the data the fetcher received. | 293 // Check the data the fetcher received. |
| 281 const GURL& request_url(fetcher->original_url()); | 294 const GURL& request_url(fetcher->original_url()); |
| 282 const GURL service_url(kServiceURL); | 295 const GURL service_url(kServiceUrl); |
| 283 EXPECT_EQ(service_url.scheme(), request_url.scheme()); | 296 EXPECT_EQ(service_url.scheme(), request_url.scheme()); |
| 284 EXPECT_EQ(service_url.host(), request_url.host()); | 297 EXPECT_EQ(service_url.host(), request_url.host()); |
| 285 EXPECT_EQ(service_url.port(), request_url.port()); | 298 EXPECT_EQ(service_url.port(), request_url.port()); |
| 286 EXPECT_EQ(service_url.path(), request_url.path()); | 299 EXPECT_EQ(service_url.path(), request_url.path()); |
| 287 | 300 |
| 288 QueryParams query_params(request_url.query()); | 301 QueryParams query_params(request_url.query()); |
| 289 EXPECT_TRUE(query_params.Check("request", "unregister")); | 302 EXPECT_TRUE(query_params.Check("request", "unregister")); |
| 290 | 303 |
| 291 em::DeviceManagementRequest expected_request_wrapper; | 304 em::DeviceManagementRequest expected_request_wrapper; |
| 292 expected_request_wrapper.mutable_unregister_request()->CopyFrom(request); | 305 expected_request_wrapper.mutable_unregister_request()->CopyFrom(request); |
| 293 std::string expected_request_data; | 306 std::string expected_request_data; |
| 294 ASSERT_TRUE(expected_request_wrapper.SerializeToString( | 307 ASSERT_TRUE(expected_request_wrapper.SerializeToString( |
| 295 &expected_request_data)); | 308 &expected_request_data)); |
| 296 EXPECT_EQ(expected_request_data, fetcher->upload_data()); | 309 EXPECT_EQ(expected_request_data, fetcher->upload_data()); |
| 297 | 310 |
| 298 // Generate the response. | 311 // Generate the response. |
| 299 std::string response_data; | 312 std::string response_data; |
| 300 em::DeviceManagementResponse response_wrapper; | 313 em::DeviceManagementResponse response_wrapper; |
| 301 response_wrapper.set_error(em::DeviceManagementResponse::SUCCESS); | 314 response_wrapper.set_error(em::DeviceManagementResponse::SUCCESS); |
| 302 response_wrapper.mutable_unregister_response()->CopyFrom(expected_response); | 315 response_wrapper.mutable_unregister_response()->CopyFrom(expected_response); |
| 303 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data)); | 316 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data)); |
| 304 URLRequestStatus status(URLRequestStatus::SUCCESS, 0); | 317 URLRequestStatus status(URLRequestStatus::SUCCESS, 0); |
| 305 fetcher->delegate()->OnURLFetchComplete(fetcher, | 318 fetcher->delegate()->OnURLFetchComplete(fetcher, |
| 306 GURL(kServiceURL), | 319 GURL(kServiceUrl), |
| 307 status, | 320 status, |
| 308 200, | 321 200, |
| 309 ResponseCookies(), | 322 ResponseCookies(), |
| 310 response_data); | 323 response_data); |
| 311 } | 324 } |
| 312 | 325 |
| 313 TEST_F(DeviceManagementBackendImplTest, PolicyRequest) { | 326 TEST_F(DeviceManagementServiceTest, PolicyRequest) { |
| 314 DevicePolicyResponseDelegateMock mock; | 327 DevicePolicyResponseDelegateMock mock; |
| 315 em::DevicePolicyResponse expected_response; | 328 em::DevicePolicyResponse expected_response; |
| 316 em::DevicePolicySetting* policy_setting = expected_response.add_setting(); | 329 em::DevicePolicySetting* policy_setting = expected_response.add_setting(); |
| 317 policy_setting->set_policy_key("policy"); | 330 policy_setting->set_policy_key("chrome-policy"); |
| 318 policy_setting->set_watermark("fresh"); | 331 policy_setting->set_watermark("fresh"); |
| 319 em::GenericSetting* policy_value = policy_setting->mutable_policy_value(); | 332 em::GenericSetting* policy_value = policy_setting->mutable_policy_value(); |
| 320 em::GenericNamedValue* named_value = policy_value->add_named_value(); | 333 em::GenericNamedValue* named_value = policy_value->add_named_value(); |
| 321 named_value->set_name("HomepageLocation"); | 334 named_value->set_name("HomepageLocation"); |
| 322 named_value->mutable_value()->set_value_type( | 335 named_value->mutable_value()->set_value_type( |
| 323 em::GenericValue::VALUE_TYPE_STRING); | 336 em::GenericValue::VALUE_TYPE_STRING); |
| 324 named_value->mutable_value()->set_string_value("http://www.chromium.org"); | 337 named_value->mutable_value()->set_string_value("http://www.chromium.org"); |
| 325 named_value = policy_value->add_named_value(); | 338 named_value = policy_value->add_named_value(); |
| 326 named_value->set_name("HomepageIsNewTabPage"); | 339 named_value->set_name("HomepageIsNewTabPage"); |
| 327 named_value->mutable_value()->set_value_type( | 340 named_value->mutable_value()->set_value_type( |
| 328 em::GenericValue::VALUE_TYPE_BOOL); | 341 em::GenericValue::VALUE_TYPE_BOOL); |
| 329 named_value->mutable_value()->set_bool_value(false); | 342 named_value->mutable_value()->set_bool_value(false); |
| 330 EXPECT_CALL(mock, HandlePolicyResponse(MessageEquals(expected_response))); | 343 EXPECT_CALL(mock, HandlePolicyResponse(MessageEquals(expected_response))); |
| 331 | 344 |
| 332 em::DevicePolicyRequest request; | 345 em::DevicePolicyRequest request; |
| 333 request.set_policy_scope("chromium"); | 346 request.set_policy_scope("chromeos/device"); |
| 334 em::DevicePolicySettingRequest* setting_request = | 347 em::DevicePolicySettingRequest* setting_request = |
| 335 request.add_setting_request(); | 348 request.add_setting_request(); |
| 336 setting_request->set_key("policy"); | 349 setting_request->set_key("policy"); |
| 337 setting_request->set_watermark("stale"); | 350 setting_request->set_watermark("stale"); |
| 338 service_.ProcessPolicyRequest("dmtokenvalue", request, &mock); | 351 backend_->ProcessPolicyRequest("dmtokenvalue", request, &mock); |
| 339 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); | 352 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 340 ASSERT_TRUE(fetcher); | 353 ASSERT_TRUE(fetcher); |
| 341 | 354 |
| 342 // Check the data the fetcher received. | 355 // Check the data the fetcher received. |
| 343 const GURL& request_url(fetcher->original_url()); | 356 const GURL& request_url(fetcher->original_url()); |
| 344 const GURL service_url(kServiceURL); | 357 const GURL service_url(kServiceUrl); |
| 345 EXPECT_EQ(service_url.scheme(), request_url.scheme()); | 358 EXPECT_EQ(service_url.scheme(), request_url.scheme()); |
| 346 EXPECT_EQ(service_url.host(), request_url.host()); | 359 EXPECT_EQ(service_url.host(), request_url.host()); |
| 347 EXPECT_EQ(service_url.port(), request_url.port()); | 360 EXPECT_EQ(service_url.port(), request_url.port()); |
| 348 EXPECT_EQ(service_url.path(), request_url.path()); | 361 EXPECT_EQ(service_url.path(), request_url.path()); |
| 349 | 362 |
| 350 QueryParams query_params(request_url.query()); | 363 QueryParams query_params(request_url.query()); |
| 351 EXPECT_TRUE(query_params.Check("request", "policy")); | 364 EXPECT_TRUE(query_params.Check("request", "policy")); |
| 352 | 365 |
| 353 em::DeviceManagementRequest expected_request_wrapper; | 366 em::DeviceManagementRequest expected_request_wrapper; |
| 354 expected_request_wrapper.mutable_policy_request()->CopyFrom(request); | 367 expected_request_wrapper.mutable_policy_request()->CopyFrom(request); |
| 355 std::string expected_request_data; | 368 std::string expected_request_data; |
| 356 ASSERT_TRUE(expected_request_wrapper.SerializeToString( | 369 ASSERT_TRUE(expected_request_wrapper.SerializeToString( |
| 357 &expected_request_data)); | 370 &expected_request_data)); |
| 358 EXPECT_EQ(expected_request_data, fetcher->upload_data()); | 371 EXPECT_EQ(expected_request_data, fetcher->upload_data()); |
| 359 | 372 |
| 360 // Generate the response. | 373 // Generate the response. |
| 361 std::string response_data; | 374 std::string response_data; |
| 362 em::DeviceManagementResponse response_wrapper; | 375 em::DeviceManagementResponse response_wrapper; |
| 363 response_wrapper.set_error(em::DeviceManagementResponse::SUCCESS); | 376 response_wrapper.set_error(em::DeviceManagementResponse::SUCCESS); |
| 364 response_wrapper.mutable_policy_response()->CopyFrom(expected_response); | 377 response_wrapper.mutable_policy_response()->CopyFrom(expected_response); |
| 365 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data)); | 378 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data)); |
| 366 URLRequestStatus status(URLRequestStatus::SUCCESS, 0); | 379 URLRequestStatus status(URLRequestStatus::SUCCESS, 0); |
| 367 fetcher->delegate()->OnURLFetchComplete(fetcher, | 380 fetcher->delegate()->OnURLFetchComplete(fetcher, |
| 368 GURL(kServiceURL), | 381 GURL(kServiceUrl), |
| 369 status, | 382 status, |
| 370 200, | 383 200, |
| 371 ResponseCookies(), | 384 ResponseCookies(), |
| 385 response_data); |
| 386 } |
| 387 |
| 388 TEST_F(DeviceManagementServiceTest, CancelRegisterRequest) { |
| 389 DeviceRegisterResponseDelegateMock mock; |
| 390 EXPECT_CALL(mock, HandleRegisterResponse(_)).Times(0); |
| 391 em::DeviceRegisterRequest request; |
| 392 backend_->ProcessRegisterRequest("token", "device id", request, &mock); |
| 393 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 394 ASSERT_TRUE(fetcher); |
| 395 |
| 396 // There shouldn't be any callbacks. |
| 397 backend_.reset(); |
| 398 } |
| 399 |
| 400 TEST_F(DeviceManagementServiceTest, CancelUnregisterRequest) { |
| 401 DeviceUnregisterResponseDelegateMock mock; |
| 402 EXPECT_CALL(mock, HandleUnregisterResponse(_)).Times(0); |
| 403 em::DeviceUnregisterRequest request; |
| 404 backend_->ProcessUnregisterRequest("dmtokenvalue", request, &mock); |
| 405 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 406 ASSERT_TRUE(fetcher); |
| 407 |
| 408 // There shouldn't be any callbacks. |
| 409 backend_.reset(); |
| 410 } |
| 411 |
| 412 TEST_F(DeviceManagementServiceTest, CancelPolicyRequest) { |
| 413 DevicePolicyResponseDelegateMock mock; |
| 414 EXPECT_CALL(mock, HandlePolicyResponse(_)).Times(0); |
| 415 em::DevicePolicyRequest request; |
| 416 request.set_policy_scope("chromium"); |
| 417 em::DevicePolicySettingRequest* setting_request = |
| 418 request.add_setting_request(); |
| 419 setting_request->set_key("policy"); |
| 420 setting_request->set_watermark("stale"); |
| 421 backend_->ProcessPolicyRequest("dmtokenvalue", request, &mock); |
| 422 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 423 ASSERT_TRUE(fetcher); |
| 424 |
| 425 // There shouldn't be any callbacks. |
| 426 backend_.reset(); |
| 427 } |
| 428 |
| 429 TEST_F(DeviceManagementServiceTest, JobQueueing) { |
| 430 // Start with a non-initialized service. |
| 431 ResetService(); |
| 432 |
| 433 // Make a request. We should not see any fetchers being created. |
| 434 DeviceRegisterResponseDelegateMock mock; |
| 435 em::DeviceRegisterResponse expected_response; |
| 436 expected_response.set_device_management_token("mtoken"); |
| 437 EXPECT_CALL(mock, HandleRegisterResponse(MessageEquals(expected_response))); |
| 438 em::DeviceRegisterRequest request; |
| 439 backend_->ProcessRegisterRequest("token", "device id", request, &mock); |
| 440 TestURLFetcher* fetcher = factory_.GetFetcherByID(0); |
| 441 ASSERT_FALSE(fetcher); |
| 442 |
| 443 // Now initialize the service. That should start the job. |
| 444 service_->Initialize(request_context_.get()); |
| 445 fetcher = factory_.GetFetcherByID(0); |
| 446 ASSERT_TRUE(fetcher); |
| 447 factory_.RemoveFetcherFromMap(0); |
| 448 |
| 449 // Check that the request is processed as expected. |
| 450 std::string response_data; |
| 451 em::DeviceManagementResponse response_wrapper; |
| 452 response_wrapper.set_error(em::DeviceManagementResponse::SUCCESS); |
| 453 response_wrapper.mutable_register_response()->CopyFrom(expected_response); |
| 454 ASSERT_TRUE(response_wrapper.SerializeToString(&response_data)); |
| 455 URLRequestStatus status(URLRequestStatus::SUCCESS, 0); |
| 456 fetcher->delegate()->OnURLFetchComplete(fetcher, |
| 457 GURL(kServiceUrl), |
| 458 status, |
| 459 200, |
| 460 ResponseCookies(), |
| 372 response_data); | 461 response_data); |
| 373 } | 462 } |
| 374 | 463 |
| 375 } // namespace policy | 464 } // namespace policy |
| OLD | NEW |