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

Unified Diff: chrome/browser/policy/device_management_backend_impl_browsertest.cc

Issue 4098004: Implement device management backend. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nits. 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698