device_management_service_browsertest.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind_helpers.h" 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/stl_util.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/cloud_policy_constants.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/device_management_service.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/test_request_interceptor.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/test/local_policy_test_server.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/upload_bytes_element_reader.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/upload_data_stream.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_fetcher.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_test_job.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::DoAll; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::Invoke; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::InvokeWithoutArgs; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace em = enterprise_management; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace policy { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Parses the DeviceManagementRequest in |request_data| and writes a serialized 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// DeviceManagementResponse to |response_data|. 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ConstructResponse(const char* request_data, 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint64 request_data_length, 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* response_data) { 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceManagementRequest request; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(request.ParseFromArray(request_data, request_data_length)); 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceManagementResponse response; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (request.has_register_request()) { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_register_response()->set_device_management_token( 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "fake_token"); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (request.has_unregister_request()) { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_unregister_response(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (request.has_policy_request()) { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_policy_response()->add_response(); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (request.has_auto_enrollment_request()) { 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response.mutable_auto_enrollment_response(); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FAIL() << "Failed to parse request."; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(response.SerializeToString(response_data)); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// JobCallback for the interceptor. 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)net::URLRequestJob* ResponseJob( 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequest* request, 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::NetworkDelegate* network_delegate) { 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::UploadDataStream* upload = request->get_upload(); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (upload != NULL && 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) upload->element_readers().size() == 1 && 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) upload->element_readers()[0]->AsBytesReader()) { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string response_data; 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const net::UploadBytesElementReader* bytes_reader = 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) upload->element_readers()[0]->AsBytesReader(); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConstructResponse(bytes_reader->bytes(), 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bytes_reader->length(), 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &response_data); 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new net::URLRequestTestJob( 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) request, 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) network_delegate, 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::URLRequestTestJob::test_headers(), 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) response_data, 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DeviceManagementServiceIntegrationTest 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public InProcessBrowserTest, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public testing::WithParamInterface< 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string (DeviceManagementServiceIntegrationTest::*)(void)> { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD2(OnJobDone, void(DeviceManagementStatus, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::DeviceManagementResponse&)); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string InitCannedResponse() { 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_.reset(new TestRequestInterceptor("localhost")); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return "http://localhost"; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string InitTestServer() { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StartTestServer(); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return test_server_->GetServiceURL().spec(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ExpectRequest() { 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (interceptor_) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback(base::Bind(&ResponseJob)); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PerformRegistration() { 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _)) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce( 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DoAll(Invoke(this, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &DeviceManagementServiceIntegrationTest::RecordToken), 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InvokeWithoutArgs(MessageLoop::current(), 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &MessageLoop::Quit))); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetGaiaToken("gaia_auth_token"); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetOAuthToken("oauth_token"); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_register_request(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->Run(); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string service_url((this->*(GetParam()))()); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_.reset(new DeviceManagementService(service_url)); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->ScheduleInitialization(0); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CleanUpOnMainThread() OVERRIDE { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_.reset(); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server_.reset(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interceptor_.reset(); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartTestServer() { 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server_.reset( 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new LocalPolicyTestServer("device_management_service_browsertest")); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server_->Start()); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RecordToken(DeviceManagementStatus status, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const em::DeviceManagementResponse& response) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) token_ = response.register_response().device_management_token(); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string token_; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementService> service_; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LocalPolicyTestServer> test_server_; 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestRequestInterceptor> interceptor_; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, Registration) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformRegistration(); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(token_.empty()); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, PolicyFetch) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformRegistration(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _)) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit)); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetDMToken(token_); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetUserAffiliation(USER_AFFILIATION_NONE); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) em::DevicePolicyRequest* request = 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_policy_request(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request->add_request()->set_policy_type(dm_protocol::kChromeUserPolicyType); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->Run(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, Unregistration) { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PerformRegistration(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _)) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit)); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetDMToken(token_); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_unregister_request(); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->Run(); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(DeviceManagementServiceIntegrationTest, AutoEnrollment) { 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExpectRequest(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _)) 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(InvokeWithoutArgs(MessageLoop::current(), &MessageLoop::Quit)); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<DeviceManagementRequestJob> job( 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) service_->CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT)); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->SetClientID("testid"); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_auto_enrollment_request()->set_remainder(0); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->GetRequest()->mutable_auto_enrollment_request()->set_modulus(1); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) job->Start(base::Bind(&DeviceManagementServiceIntegrationTest::OnJobDone, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop::current()->Run(); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P( 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceManagementServiceIntegrationTestInstance, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeviceManagementServiceIntegrationTest, 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Values(&DeviceManagementServiceIntegrationTest::InitCannedResponse, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &DeviceManagementServiceIntegrationTest::InitTestServer)); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace policy 217