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

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. Created 7 years, 10 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/memory/scoped_ptr.h"
6 #include "base/message_loop.h"
7 #include "base/stl_util.h"
8 #include "chrome/browser/policy/cloud_policy_constants.h"
9 #include "chrome/browser/policy/device_management_service.h"
10 #include "chrome/test/base/in_process_browser_test.h"
11 #include "content/public/browser/browser_thread.h"
12 #include "net/base/upload_bytes_element_reader.h"
13 #include "net/base/upload_data_stream.h"
14 #include "net/test/test_server.h"
15 #include "net/url_request/url_fetcher.h"
16 #include "net/url_request/url_request.h"
17 #include "net/url_request/url_request_filter.h"
18 #include "net/url_request/url_request_job_factory.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 content::BrowserThread;
24 using testing::DoAll;
25 using testing::Invoke;
26 using testing::InvokeWithoutArgs;
27 using testing::_;
28
29 namespace em = enterprise_management;
30
31 namespace policy {
32
33 // Dummy service URL for testing with request interception enabled.
34 const char kServiceUrl[] = "http://example.com/device_management";
35
36 // During construction and destruction of CannedResponseInterceptor tasks are
37 // posted to the IO thread to add and remove an interceptor for URLRequest's of
38 // |service_url|. The interceptor returns test data back to the service.
39 class CannedResponseInterceptor {
40 public:
41 explicit CannedResponseInterceptor(const GURL& service_url)
42 : delegate_(new Delegate(service_url)) {
43 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
44 base::Bind(&Delegate::Register,
45 base::Unretained(delegate_)));
46 }
47
48 virtual ~CannedResponseInterceptor() {
49 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
50 base::Bind(&Delegate::Unregister));
51 }
52
53 private:
54 class Delegate : public net::URLRequestJobFactory::ProtocolHandler {
55 public:
56 explicit Delegate(const GURL& service_url) : service_url_(service_url) {}
57 ~Delegate() {}
58
59 void Register() {
60 net::URLRequestFilter::GetInstance()->AddHostnameProtocolHandler(
61 "http", "example.com",
62 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>(this));
63 }
64
65 static void Unregister() {
66 net::URLRequestFilter::GetInstance()->RemoveHostnameHandler(
67 "http", "example.com");
68 }
69
70 // net::URLRequestJobFactory::ProtocolHandler overrides.
71 virtual net::URLRequestJob* MaybeCreateJob(
72 net::URLRequest* request,
73 net::NetworkDelegate* network_delegate) const OVERRIDE {
74 const net::UploadDataStream* upload = request->get_upload();
75 if (request->url().GetOrigin() == service_url_.GetOrigin() &&
76 request->url().path() == service_url_.path() &&
77 upload != NULL &&
78 upload->element_readers().size() == 1 &&
79 upload->element_readers()[0]->AsBytesReader()) {
80 std::string response_data;
81 const net::UploadBytesElementReader* bytes_reader =
82 upload->element_readers()[0]->AsBytesReader();
83 ConstructResponse(bytes_reader->bytes(),
84 bytes_reader->length(),
85 &response_data);
86 return new net::URLRequestTestJob(
87 request,
88 network_delegate,
89 net::URLRequestTestJob::test_headers(),
90 response_data,
91 true);
92 }
93
94 return NULL;
95 }
96
97 private:
98 void ConstructResponse(const char* request_data,
99 uint64 request_data_length,
100 std::string* response_data) const {
101 em::DeviceManagementRequest request;
102 ASSERT_TRUE(request.ParseFromArray(request_data, request_data_length));
103 em::DeviceManagementResponse response;
104 if (request.has_register_request()) {
105 response.mutable_register_response()->set_device_management_token(
106 "fake_token");
107 } else if (request.has_unregister_request()) {
108 response.mutable_unregister_response();
109 } else if (request.has_policy_request()) {
110 response.mutable_policy_response()->add_response();
111 } else if (request.has_auto_enrollment_request()) {
112 response.mutable_auto_enrollment_response();
113 } else {
114 FAIL() << "Failed to parse request.";
115 }
116 ASSERT_TRUE(response.SerializeToString(response_data));
117 }
118
119 const GURL service_url_;
120 };
121
122 Delegate* delegate_;
123 };
124
125 class DeviceManagementServiceIntegrationTest
126 : public InProcessBrowserTest,
127 public testing::WithParamInterface<
128 std::string (DeviceManagementServiceIntegrationTest::*)(void)> {
129 public:
130 MOCK_METHOD2(OnJobDone, void(DeviceManagementStatus,
131 const em::DeviceManagementResponse&));
132
133 std::string InitCannedResponse() {
134 net::URLFetcher::SetEnableInterceptionForTests(true);
135 interceptor_.reset(new CannedResponseInterceptor(GURL(kServiceUrl)));
136 return kServiceUrl;
137 }
138
139 std::string InitTestServer() {
140 StartTestServer();
141 return test_server_->GetURL("device_management").spec();
142 }
143
144 protected:
145 void PerformRegistration() {
146 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _))
147 .WillOnce(
148 DoAll(Invoke(this,
149 &DeviceManagementServiceIntegrationTest::RecordToken),
150 InvokeWithoutArgs(MessageLoop::current(),
151 &MessageLoop::Quit)));
152 scoped_ptr<DeviceManagementRequestJob> job(
153 service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION));
154 job->SetGaiaToken("gaia_auth_token");
155 job->SetOAuthToken("oauth_token");
156 job->SetClientID("testid");
157 job->GetRequest()->mutable_register_request();
158 job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone,
159 base::Unretained(this)));
160 MessageLoop::current()->Run();
161 }
162
163 virtual void SetUpOnMainThread() OVERRIDE {
164 std::string service_url((this->*(GetParam()))());
165 service_.reset(new DeviceManagementService(service_url));
166 service_->ScheduleInitialization(0);
167 }
168
169 virtual void CleanUpOnMainThread() OVERRIDE {
170 service_.reset();
171 test_server_.reset();
172 interceptor_.reset();
173 }
174
175 void StartTestServer() {
176 test_server_.reset(
177 new net::TestServer(
178 net::TestServer::TYPE_HTTP,
179 net::TestServer::kLocalhost,
180 FilePath(FILE_PATH_LITERAL("chrome/test/data/policy"))));
181 ASSERT_TRUE(test_server_->Start());
182 }
183
184 void RecordToken(DeviceManagementStatus status,
185 const em::DeviceManagementResponse& response) {
186 token_ = response.register_response().device_management_token();
187 }
188
189 std::string token_;
190 scoped_ptr<DeviceManagementService> service_;
191 scoped_ptr<net::TestServer> test_server_;
192 scoped_ptr<CannedResponseInterceptor> interceptor_;
193 };
194
195 IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, Registration) {
196 PerformRegistration();
197 EXPECT_FALSE(token_.empty());
198 }
199
200 IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, PolicyFetch) {
201 PerformRegistration();
202
203 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _))
204 .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit));
205 scoped_ptr<DeviceManagementRequestJob> job(
206 service_->CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH));
207 job->SetDMToken(token_);
208 job->SetUserAffiliation(USER_AFFILIATION_NONE);
209 job->SetClientID("testid");
210 em::DevicePolicyRequest* request =
211 job->GetRequest()->mutable_policy_request();
212 request->add_request()->set_policy_type(dm_protocol::kChromeUserPolicyType);
213 job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone,
214 base::Unretained(this)));
215 MessageLoop::current()->Run();
216 }
217
218 IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, Unregistration) {
219 PerformRegistration();
220
221 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _))
222 .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit));
223 scoped_ptr<DeviceManagementRequestJob> job(
224 service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION));
225 job->SetDMToken(token_);
226 job->SetClientID("testid");
227 job->GetRequest()->mutable_unregister_request();
228 job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone,
229 base::Unretained(this)));
230 MessageLoop::current()->Run();
231 }
232
233 IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, AutoEnrollment) {
234 EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _))
235 .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit));
236 scoped_ptr<DeviceManagementRequestJob> job(
237 service_->CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT));
238 job->SetClientID("testid");
239 job->GetRequest()->mutable_auto_enrollment_request()->set_remainder(0);
240 job->GetRequest()->mutable_auto_enrollment_request()->set_modulus(1);
241 job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone,
242 base::Unretained(this)));
243 MessageLoop::current()->Run();
244 }
245
246 INSTANTIATE_TEST_CASE_P(
247 DeviceManagementServiceIntegrationTestInstance,
248 DeviceManagementServiceIntegrationTest,
249 testing::Values(&DeviceManagementServiceIntegrationTest::InitCannedResponse,
250 &DeviceManagementServiceIntegrationTest::InitTestServer));
251
252 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698