| Index: chrome/browser/policy/device_management_backend_impl_browsertest.cc
|
| diff --git a/chrome/browser/policy/device_management_backend_impl_browsertest.cc b/chrome/browser/policy/device_management_backend_impl_browsertest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..43df7be90d8e67201f0bf0a648eb92260a71b9ad
|
| --- /dev/null
|
| +++ b/chrome/browser/policy/device_management_backend_impl_browsertest.cc
|
| @@ -0,0 +1,141 @@
|
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// 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 "base/message_loop.h"
|
| +#include "chrome/browser/browser_thread.h"
|
| +#include "chrome/browser/policy/device_management_backend_mock.h"
|
| +#include "chrome/test/in_process_browser_test.h"
|
| +#include "net/url_request/url_request.h"
|
| +#include "net/url_request/url_request_test_job.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +
|
| +using testing::_;
|
| +using testing::DoAll;
|
| +using testing::Invoke;
|
| +using testing::InvokeWithoutArgs;
|
| +
|
| +namespace policy {
|
| +
|
| +namespace {
|
| +
|
| +const char kServiceUrl[] = "http://example.com/service";
|
| +
|
| +// Binary representation of successful register response containing a token.
|
| +const char kServiceResponseRegister[] =
|
| + "\x08\x00\x1a\x22\x0a\x20\x64\x64\x32\x63\x38\x63\x33\x65\x64\x61"
|
| + "\x63\x63\x34\x61\x33\x32\x38\x31\x66\x33\x38\x62\x36\x35\x31\x31"
|
| + "\x36\x64\x61\x62\x66\x63";
|
| +// Contains a single policy setting, namely HomepageIsNewTabPage: false.
|
| +const char kServiceResponsePolicy[] =
|
| + "\x08\x00\x2a\x2a\x0a\x28\x0a\x06\x70\x6f\x6c\x69\x63\x79\x12\x1e"
|
| + "\x0a\x1c\x0a\x14\x48\x6f\x6d\x65\x70\x61\x67\x65\x49\x73\x4e\x65"
|
| + "\x77\x54\x61\x62\x50\x61\x67\x65\x12\x04\x08\x01\x10\x00";
|
| +// Successful unregister response.
|
| +const char kServiceResponseUnregister[] =
|
| + "\x08\x00\x22\x00";
|
| +
|
| +#define PROTO_STRING(name) (std::string(name, arraysize(name) - 1))
|
| +
|
| +} // namespace
|
| +
|
| +// Interceptor implementation that returns test data back to the service.
|
| +class CannedResponseInterceptor : public URLRequest::Interceptor {
|
| + public:
|
| + CannedResponseInterceptor(const GURL& service_url,
|
| + const std::string& response_data)
|
| + : service_url_(service_url),
|
| + response_data_(response_data) {
|
| + URLRequest::RegisterRequestInterceptor(this);
|
| + }
|
| +
|
| + virtual ~CannedResponseInterceptor() {
|
| + URLRequest::UnregisterRequestInterceptor(this);
|
| + }
|
| +
|
| + private:
|
| + // URLRequest::Interceptor overrides.
|
| + virtual URLRequestJob* MaybeIntercept(URLRequest* request) {
|
| + if (request->url().GetOrigin() == service_url_.GetOrigin() &&
|
| + request->url().path() == service_url_.path()) {
|
| + return new URLRequestTestJob(request,
|
| + URLRequestTestJob::test_headers(),
|
| + response_data_,
|
| + true);
|
| + }
|
| +
|
| + return NULL;
|
| + }
|
| +
|
| + const GURL service_url_;
|
| + const std::string response_data_;
|
| +};
|
| +
|
| +class DeviceManagementBackendImplIntegrationTest : public InProcessBrowserTest {
|
| + public:
|
| + void CaptureToken(const em::DeviceRegisterResponse& response) {
|
| + token_ = response.device_management_token();
|
| + }
|
| +
|
| + protected:
|
| + DeviceManagementBackendImplIntegrationTest() {
|
| + URLFetcher::enable_interception_for_tests(true);
|
| + }
|
| +
|
| + std::string token_;
|
| +};
|
| +
|
| +static void QuitMessageLoop() {
|
| + MessageLoop::current()->Quit();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(DeviceManagementBackendImplIntegrationTest,
|
| + RegisterAndFetchPolicy) {
|
| + DeviceManagementBackendImpl service(kServiceUrl);
|
| +
|
| + {
|
| + CannedResponseInterceptor interceptor(
|
| + GURL(kServiceUrl), PROTO_STRING(kServiceResponseRegister));
|
| + DeviceRegisterResponseDelegateMock delegate;
|
| + EXPECT_CALL(delegate, HandleRegisterResponse(_))
|
| + .WillOnce(DoAll(Invoke(this, &DeviceManagementBackendImplIntegrationTest
|
| + ::CaptureToken),
|
| + InvokeWithoutArgs(QuitMessageLoop)));
|
| + em::DeviceRegisterRequest request;
|
| + service.ProcessRegisterRequest("token", "device id", request, &delegate);
|
| + MessageLoop::current()->Run();
|
| + }
|
| +
|
| + {
|
| + CannedResponseInterceptor interceptor(
|
| + GURL(kServiceUrl), PROTO_STRING(kServiceResponsePolicy));
|
| + DevicePolicyResponseDelegateMock delegate;
|
| + EXPECT_CALL(delegate, HandlePolicyResponse(_))
|
| + .WillOnce(InvokeWithoutArgs(QuitMessageLoop));
|
| + em::DevicePolicyRequest request;
|
| + request.set_policy_scope("chrome");
|
| + em::DevicePolicySettingRequest* setting_request =
|
| + request.add_setting_request();
|
| + setting_request->set_key("policy");
|
| + service.ProcessPolicyRequest(token_, request, &delegate);
|
| +
|
| + MessageLoop::current()->Run();
|
| + }
|
| +
|
| + {
|
| + CannedResponseInterceptor interceptor(
|
| + GURL(kServiceUrl), PROTO_STRING(kServiceResponseUnregister));
|
| + DeviceUnregisterResponseDelegateMock delegate;
|
| + EXPECT_CALL(delegate, HandleUnregisterResponse(_))
|
| + .WillOnce(InvokeWithoutArgs(QuitMessageLoop));
|
| + em::DeviceUnregisterRequest request;
|
| + service.ProcessUnregisterRequest(token_, request, &delegate);
|
| +
|
| + MessageLoop::current()->Run();
|
| + }
|
| +}
|
| +
|
| +} // namespace policy
|
|
|