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

Side by Side Diff: chrome/browser/policy/device_management_service_browsertest.cc

Issue 12189011: Split up chrome/browser/policy subdirectory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase, add chrome/browser/chromeos/policy/OWNERS Created 7 years, 9 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/bind.h"
6 #include "base/bind_helpers.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop.h"
9 #include "base/stl_util.h"
10 #include "chrome/browser/policy/cloud_policy_constants.h"
11 #include "chrome/browser/policy/device_management_service.h"
12 #include "chrome/browser/policy/test/local_policy_test_server.h"
13 #include "chrome/browser/policy/test_request_interceptor.h"
14 #include "chrome/test/base/in_process_browser_test.h"
15 #include "net/base/upload_bytes_element_reader.h"
16 #include "net/base/upload_data_stream.h"
17 #include "net/url_request/url_fetcher.h"
18 #include "net/url_request/url_request.h"
19 #include "net/url_request/url_request_test_job.h"
20 #include "testing/gmock/include/gmock/gmock.h"
21 #include "testing/gtest/include/gtest/gtest.h"
22
23 using testing::DoAll;
24 using testing::Invoke;
25 using testing::InvokeWithoutArgs;
26 using testing::_;
27
28 namespace em = enterprise_management;
29
30 namespace policy {
31
32 namespace {
33
34 // Parses the DeviceManagementRequest in |request_data| and writes a serialized
35 // DeviceManagementResponse to |response_data|.
36 void ConstructResponse(const char* request_data,
37 uint64 request_data_length,
38 std::string* response_data) {
39 em::DeviceManagementRequest request;
40 ASSERT_TRUE(request.ParseFromArray(request_data, request_data_length));
41 em::DeviceManagementResponse response;
42 if (request.has_register_request()) {
43 response.mutable_register_response()->set_device_management_token(
44 "fake_token");
45 } else if (request.has_unregister_request()) {
46 response.mutable_unregister_response();
47 } else if (request.has_policy_request()) {
48 response.mutable_policy_response()->add_response();
49 } else if (request.has_auto_enrollment_request()) {
50 response.mutable_auto_enrollment_response();
51 } else {
52 FAIL() << "Failed to parse request.";
53 }
54 ASSERT_TRUE(response.SerializeToString(response_data));
55 }
56
57 // JobCallback for the interceptor.
58 net::URLRequestJob* ResponseJob(
59 net::URLRequest* request,
60 net::NetworkDelegate* network_delegate) {
61 const net::UploadDataStream* upload = request->get_upload();
62 if (upload != NULL &&
63 upload->element_readers().size() == 1 &&
64 upload->element_readers()[0]->AsBytesReader()) {
65 std::string response_data;
66 const net::UploadBytesElementReader* bytes_reader =
67 upload->element_readers()[0]->AsBytesReader();
68 ConstructResponse(bytes_reader->bytes(),
69 bytes_reader->length(),
70 &response_data);
71 return new net::URLRequestTestJob(
72 request,
73 network_delegate,
74 net::URLRequestTestJob::test_headers(),
75 response_data,
76 true);
77 }
78
79 return NULL;
80 }
81
82 } // namespace
83
84 class DeviceManagementServiceIntegrationTest
85 : public InProcessBrowserTest,
86 public testing::WithParamInterface<
87 std::string (DeviceManagementServiceIntegrationTest::*)(void)> {
88 public:
89 MOCK_METHOD2(OnJobDone, void(DeviceManagementStatus,
90 const em::DeviceManagementResponse&));
91
92 std::string InitCannedResponse() {
93 interceptor_.reset(new TestRequestInterceptor("localhost"));
94 return "http://localhost";
95 }
96
97 std::string InitTestServer() {
98 StartTestServer();
99 return test_server_->GetServiceURL().spec();
100 }
101
102 protected:
103 void ExpectRequest() {
104 if (interceptor_)
105 interceptor_->PushJobCallback(base::Bind(&ResponseJob));
106 }
107
108 void PerformRegistration() {
109 ExpectRequest();
110 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _))
111 .WillOnce(
112 DoAll(Invoke(this,
113 &DeviceManagementServiceIntegrationTest::RecordToken),
114 InvokeWithoutArgs(MessageLoop::current(),
115 &MessageLoop::Quit)));
116 scoped_ptr<DeviceManagementRequestJob> job(
117 service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION));
118 job->SetGaiaToken("gaia_auth_token");
119 job->SetOAuthToken("oauth_token");
120 job->SetClientID("testid");
121 job->GetRequest()->mutable_register_request();
122 job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone,
123 base::Unretained(this)));
124 MessageLoop::current()->Run();
125 }
126
127 virtual void SetUpOnMainThread() OVERRIDE {
128 std::string service_url((this->*(GetParam()))());
129 service_.reset(new DeviceManagementService(service_url));
130 service_->ScheduleInitialization(0);
131 }
132
133 virtual void CleanUpOnMainThread() OVERRIDE {
134 service_.reset();
135 test_server_.reset();
136 interceptor_.reset();
137 }
138
139 void StartTestServer() {
140 test_server_.reset(
141 new LocalPolicyTestServer("device_management_service_browsertest"));
142 ASSERT_TRUE(test_server_->Start());
143 }
144
145 void RecordToken(DeviceManagementStatus status,
146 const em::DeviceManagementResponse& response) {
147 token_ = response.register_response().device_management_token();
148 }
149
150 std::string token_;
151 scoped_ptr<DeviceManagementService> service_;
152 scoped_ptr<LocalPolicyTestServer> test_server_;
153 scoped_ptr<TestRequestInterceptor> interceptor_;
154 };
155
156 IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, Registration) {
157 PerformRegistration();
158 EXPECT_FALSE(token_.empty());
159 }
160
161 IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, PolicyFetch) {
162 PerformRegistration();
163
164 ExpectRequest();
165 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _))
166 .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit));
167 scoped_ptr<DeviceManagementRequestJob> job(
168 service_->CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH));
169 job->SetDMToken(token_);
170 job->SetUserAffiliation(USER_AFFILIATION_NONE);
171 job->SetClientID("testid");
172 em::DevicePolicyRequest* request =
173 job->GetRequest()->mutable_policy_request();
174 request->add_request()->set_policy_type(dm_protocol::kChromeUserPolicyType);
175 job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone,
176 base::Unretained(this)));
177 MessageLoop::current()->Run();
178 }
179
180 IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, Unregistration) {
181 PerformRegistration();
182
183 ExpectRequest();
184 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _))
185 .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit));
186 scoped_ptr<DeviceManagementRequestJob> job(
187 service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION));
188 job->SetDMToken(token_);
189 job->SetClientID("testid");
190 job->GetRequest()->mutable_unregister_request();
191 job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone,
192 base::Unretained(this)));
193 MessageLoop::current()->Run();
194 }
195
196 IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, AutoEnrollment) {
197 ExpectRequest();
198 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _))
199 .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit));
200 scoped_ptr<DeviceManagementRequestJob> job(
201 service_->CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT));
202 job->SetClientID("testid");
203 job->GetRequest()->mutable_auto_enrollment_request()->set_remainder(0);
204 job->GetRequest()->mutable_auto_enrollment_request()->set_modulus(1);
205 job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone,
206 base::Unretained(this)));
207 MessageLoop::current()->Run();
208 }
209
210 INSTANTIATE_TEST_CASE_P(
211 DeviceManagementServiceIntegrationTestInstance,
212 DeviceManagementServiceIntegrationTest,
213 testing::Values(&DeviceManagementServiceIntegrationTest::InitCannedResponse,
214 &DeviceManagementServiceIntegrationTest::InitTestServer));
215
216 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/policy/device_management_service.cc ('k') | chrome/browser/policy/device_management_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698