Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
| 6 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "chrome/browser/policy/cloud_policy_constants.h" | 8 #include "chrome/browser/policy/cloud_policy_constants.h" |
| 9 #include "chrome/browser/policy/device_management_service.h" | 9 #include "chrome/browser/policy/device_management_service.h" |
| 10 #include "chrome/test/base/in_process_browser_test.h" | 10 #include "chrome/test/base/in_process_browser_test.h" |
| 11 #include "content/public/browser/browser_thread.h" | |
| 11 #include "net/base/upload_bytes_element_reader.h" | 12 #include "net/base/upload_bytes_element_reader.h" |
| 12 #include "net/base/upload_data_stream.h" | 13 #include "net/base/upload_data_stream.h" |
| 13 #include "net/test/test_server.h" | 14 #include "net/test/test_server.h" |
| 14 #include "net/url_request/url_fetcher.h" | 15 #include "net/url_request/url_fetcher.h" |
| 15 #include "net/url_request/url_request.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" | |
| 16 #include "net/url_request/url_request_test_job.h" | 19 #include "net/url_request/url_request_test_job.h" |
| 17 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 19 | 22 |
| 23 using content::BrowserThread; | |
| 20 using testing::DoAll; | 24 using testing::DoAll; |
| 21 using testing::Invoke; | 25 using testing::Invoke; |
| 22 using testing::InvokeWithoutArgs; | 26 using testing::InvokeWithoutArgs; |
| 23 using testing::_; | 27 using testing::_; |
| 24 | 28 |
| 25 namespace em = enterprise_management; | 29 namespace em = enterprise_management; |
| 26 | 30 |
| 27 namespace policy { | 31 namespace policy { |
| 28 | 32 |
| 29 // Dummy service URL for testing with request interception enabled. | 33 // Dummy service URL for testing with request interception enabled. |
| 30 const char kServiceUrl[] = "http://example.com/device_management"; | 34 const char kServiceUrl[] = "http://example.com/device_management"; |
| 31 | 35 |
| 32 // Interceptor implementation that returns test data back to the service. | 36 // Interceptor implementation that returns test data back to the service. |
| 33 class CannedResponseInterceptor : public net::URLRequest::Interceptor { | 37 class CannedResponseInterceptor { |
| 34 public: | 38 public: |
| 35 explicit CannedResponseInterceptor(const GURL& service_url) | 39 explicit CannedResponseInterceptor(const GURL& service_url) |
| 36 : service_url_(service_url) { | 40 : delegate_(new Delegate(service_url)) { |
| 37 net::URLRequest::Deprecated::RegisterRequestInterceptor(this); | 41 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| 42 base::Bind(&Delegate::Register, | |
| 43 base::Unretained(delegate_))); | |
| 38 } | 44 } |
| 39 | 45 |
| 40 virtual ~CannedResponseInterceptor() { | 46 virtual ~CannedResponseInterceptor() { |
| 41 net::URLRequest::Deprecated::UnregisterRequestInterceptor(this); | 47 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, delegate_); |
| 42 } | |
| 43 | |
| 44 // net::URLRequest::Interceptor overrides. | |
| 45 virtual net::URLRequestJob* MaybeIntercept( | |
| 46 net::URLRequest* request, | |
| 47 net::NetworkDelegate* network_delegate) OVERRIDE { | |
| 48 em::DeviceManagementRequest dm_request; | |
| 49 const net::UploadDataStream* upload = request->get_upload(); | |
| 50 if (request->url().GetOrigin() == service_url_.GetOrigin() && | |
| 51 request->url().path() == service_url_.path() && | |
| 52 upload != NULL && | |
| 53 upload->element_readers().size() == 1 && | |
| 54 upload->element_readers()[0]->AsBytesReader()) { | |
| 55 std::string response_data; | |
| 56 const net::UploadBytesElementReader* bytes_reader = | |
| 57 upload->element_readers()[0]->AsBytesReader(); | |
| 58 ConstructResponse(bytes_reader->bytes(), | |
| 59 bytes_reader->length(), | |
| 60 &response_data); | |
| 61 return new net::URLRequestTestJob(request, | |
| 62 network_delegate, | |
| 63 net::URLRequestTestJob::test_headers(), | |
| 64 response_data, | |
| 65 true); | |
| 66 } | |
| 67 | |
| 68 return NULL; | |
| 69 } | 48 } |
| 70 | 49 |
| 71 private: | 50 private: |
| 72 void ConstructResponse(const char* request_data, | 51 class Delegate : public net::URLRequestJobFactory::ProtocolHandler { |
| 73 uint64 request_data_length, | 52 public: |
| 74 std::string* response_data) { | 53 explicit Delegate(const GURL& service_url) : service_url_(service_url) {} |
| 75 em::DeviceManagementRequest request; | 54 ~Delegate() { |
| 76 ASSERT_TRUE(request.ParseFromArray(request_data, request_data_length)); | 55 net::URLRequestFilter::GetInstance()->RemoveHostnameHandler( |
| 77 em::DeviceManagementResponse response; | 56 "http", "example.com"); |
| 78 if (request.has_register_request()) { | |
| 79 response.mutable_register_response()->set_device_management_token( | |
| 80 "fake_token"); | |
| 81 } else if (request.has_unregister_request()) { | |
| 82 response.mutable_unregister_response(); | |
| 83 } else if (request.has_policy_request()) { | |
| 84 response.mutable_policy_response()->add_response(); | |
| 85 } else if (request.has_auto_enrollment_request()) { | |
| 86 response.mutable_auto_enrollment_response(); | |
| 87 } else { | |
| 88 FAIL() << "Failed to parse request."; | |
| 89 } | 57 } |
|
mmenke
2012/12/13 16:12:04
nit: Blank line.
| |
| 90 ASSERT_TRUE(response.SerializeToString(response_data)); | 58 void Register() { |
| 91 } | 59 net::URLRequestFilter::GetInstance()->AddHostnameProtocolHandler( |
| 60 "http", "example.com", this); | |
| 61 } | |
| 92 | 62 |
| 93 const GURL service_url_; | 63 // net::URLRequestJobFactory::ProtocolHandler overrides. |
| 64 virtual net::URLRequestJob* MaybeCreateJob( | |
| 65 net::URLRequest* request, | |
| 66 net::NetworkDelegate* network_delegate) const OVERRIDE { | |
| 67 em::DeviceManagementRequest dm_request; | |
|
mmenke
2012/12/13 16:12:04
This seems to be left over from a refactoring. Th
| |
| 68 const net::UploadDataStream* upload = request->get_upload(); | |
| 69 if (request->url().GetOrigin() == service_url_.GetOrigin() && | |
| 70 request->url().path() == service_url_.path() && | |
| 71 upload != NULL && | |
| 72 upload->element_readers().size() == 1 && | |
| 73 upload->element_readers()[0]->AsBytesReader()) { | |
| 74 std::string response_data; | |
| 75 const net::UploadBytesElementReader* bytes_reader = | |
| 76 upload->element_readers()[0]->AsBytesReader(); | |
| 77 ConstructResponse(bytes_reader->bytes(), | |
| 78 bytes_reader->length(), | |
| 79 &response_data); | |
| 80 return new net::URLRequestTestJob( | |
| 81 request, | |
| 82 network_delegate, | |
| 83 net::URLRequestTestJob::test_headers(), | |
| 84 response_data, | |
| 85 true); | |
| 86 } | |
| 87 | |
| 88 return NULL; | |
| 89 } | |
| 90 | |
| 91 private: | |
| 92 void ConstructResponse(const char* request_data, | |
| 93 uint64 request_data_length, | |
| 94 std::string* response_data) const { | |
| 95 em::DeviceManagementRequest request; | |
| 96 ASSERT_TRUE(request.ParseFromArray(request_data, request_data_length)); | |
| 97 em::DeviceManagementResponse response; | |
| 98 if (request.has_register_request()) { | |
| 99 response.mutable_register_response()->set_device_management_token( | |
| 100 "fake_token"); | |
| 101 } else if (request.has_unregister_request()) { | |
| 102 response.mutable_unregister_response(); | |
| 103 } else if (request.has_policy_request()) { | |
| 104 response.mutable_policy_response()->add_response(); | |
| 105 } else if (request.has_auto_enrollment_request()) { | |
| 106 response.mutable_auto_enrollment_response(); | |
| 107 } else { | |
| 108 FAIL() << "Failed to parse request."; | |
| 109 } | |
| 110 ASSERT_TRUE(response.SerializeToString(response_data)); | |
| 111 } | |
| 112 | |
| 113 const GURL service_url_; | |
| 114 }; | |
| 115 | |
| 116 Delegate* delegate_; | |
| 94 }; | 117 }; |
| 95 | 118 |
| 96 class DeviceManagementServiceIntegrationTest | 119 class DeviceManagementServiceIntegrationTest |
| 97 : public InProcessBrowserTest, | 120 : public InProcessBrowserTest, |
| 98 public testing::WithParamInterface< | 121 public testing::WithParamInterface< |
| 99 std::string (DeviceManagementServiceIntegrationTest::*)(void)> { | 122 std::string (DeviceManagementServiceIntegrationTest::*)(void)> { |
| 100 public: | 123 public: |
| 101 MOCK_METHOD2(OnJobDone, void(DeviceManagementStatus, | 124 MOCK_METHOD2(OnJobDone, void(DeviceManagementStatus, |
| 102 const em::DeviceManagementResponse&)); | 125 const em::DeviceManagementResponse&)); |
| 103 | 126 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 214 MessageLoop::current()->Run(); | 237 MessageLoop::current()->Run(); |
| 215 } | 238 } |
| 216 | 239 |
| 217 INSTANTIATE_TEST_CASE_P( | 240 INSTANTIATE_TEST_CASE_P( |
| 218 DeviceManagementServiceIntegrationTestInstance, | 241 DeviceManagementServiceIntegrationTestInstance, |
| 219 DeviceManagementServiceIntegrationTest, | 242 DeviceManagementServiceIntegrationTest, |
| 220 testing::Values(&DeviceManagementServiceIntegrationTest::InitCannedResponse, | 243 testing::Values(&DeviceManagementServiceIntegrationTest::InitCannedResponse, |
| 221 &DeviceManagementServiceIntegrationTest::InitTestServer)); | 244 &DeviceManagementServiceIntegrationTest::InitTestServer)); |
| 222 | 245 |
| 223 } // namespace policy | 246 } // namespace policy |
| OLD | NEW |