| Index: chrome/browser/policy/device_management_policy_provider_unittest.cc
|
| diff --git a/chrome/browser/policy/device_management_policy_provider_unittest.cc b/chrome/browser/policy/device_management_policy_provider_unittest.cc
|
| index eac2c5b5516f977833b1ee2cd4e673a0010f8bd2..55ba883621896950f9edda7b324119b9ac878be7 100644
|
| --- a/chrome/browser/policy/device_management_policy_provider_unittest.cc
|
| +++ b/chrome/browser/policy/device_management_policy_provider_unittest.cc
|
| @@ -27,6 +27,7 @@ const char kTestToken[] = "device_policy_provider_test_auth_token";
|
| namespace policy {
|
|
|
| using ::testing::_;
|
| +using ::testing::AtLeast;
|
| using ::testing::InSequence;
|
| using ::testing::Mock;
|
|
|
| @@ -65,7 +66,8 @@ class DeviceManagementPolicyProviderTest : public testing::Test {
|
| }
|
|
|
| void CreateNewProvider(int64 policy_refresh_rate_ms,
|
| - int64 policy_refresh_max_earlier_ms,
|
| + int policy_refresh_fuzz_factor_percent,
|
| + int64 policy_refresh_fuzz_max,
|
| int64 policy_refresh_error_delay_ms,
|
| int64 token_fetch_error_delay_ms,
|
| int64 unmanaged_device_refresh_rate_ms) {
|
| @@ -75,7 +77,8 @@ class DeviceManagementPolicyProviderTest : public testing::Test {
|
| backend_,
|
| profile_.get(),
|
| policy_refresh_rate_ms,
|
| - policy_refresh_max_earlier_ms,
|
| + policy_refresh_fuzz_factor_percent,
|
| + policy_refresh_fuzz_max,
|
| policy_refresh_error_delay_ms,
|
| token_fetch_error_delay_ms,
|
| unmanaged_device_refresh_rate_ms));
|
| @@ -90,6 +93,12 @@ class DeviceManagementPolicyProviderTest : public testing::Test {
|
| }
|
|
|
| void SimulateSuccessfulLoginAndRunPending() {
|
| + // Make sure the notification for the initial policy fetch is generated.
|
| + MockConfigurationPolicyObserver observer;
|
| + ConfigurationPolicyObserverRegistrar registrar;
|
| + registrar.Init(provider_.get(), &observer);
|
| + EXPECT_CALL(observer, OnUpdatePolicy()).Times(AtLeast(1));
|
| +
|
| loop_.RunAllPending();
|
| profile_->GetTokenService()->IssueAuthTokenForTest(
|
| GaiaConstants::kDeviceManagementService, kTestToken);
|
| @@ -117,11 +126,12 @@ class DeviceManagementPolicyProviderTest : public testing::Test {
|
| }
|
|
|
| virtual void TearDown() {
|
| + provider_.reset();
|
| loop_.RunAllPending();
|
| }
|
|
|
| bool waiting_for_initial_policies() const {
|
| - return provider_->waiting_for_initial_policies_;
|
| + return !provider_->IsInitializationComplete();
|
| }
|
|
|
| MockDeviceManagementBackend* backend_; // weak
|
| @@ -196,7 +206,6 @@ TEST_F(DeviceManagementPolicyProviderTest, SecondProvide) {
|
| EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| MockDeviceManagementBackendFailPolicy(
|
| DeviceManagementBackend::kErrorRequestFailed));
|
| - loop_.RunAllPending();
|
| SimulateSuccessfulLoginAndRunPending();
|
| EXPECT_CALL(store, Apply(kPolicyDisableSpdy, _)).Times(1);
|
| provider_->Provide(&store);
|
| @@ -214,90 +223,108 @@ TEST_F(DeviceManagementPolicyProviderTest, FetchTriggersRefresh) {
|
| }
|
|
|
| TEST_F(DeviceManagementPolicyProviderTest, ErrorCausesNewRequest) {
|
| - InSequence s;
|
| - CreateNewProvider(1000 * 1000, 0, 0, 0, 0);
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendFailRegister(
|
| - DeviceManagementBackend::kErrorRequestFailed));
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedRegister());
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendFailPolicy(
|
| - DeviceManagementBackend::kErrorRequestFailed));
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendFailPolicy(
|
| - DeviceManagementBackend::kErrorRequestFailed));
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy, true));
|
| + { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence.
|
| + InSequence s;
|
| + CreateNewProvider(1000 * 1000, 0, 0, 0, 0, 0);
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendFailRegister(
|
| + DeviceManagementBackend::kErrorRequestFailed));
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedRegister());
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendFailPolicy(
|
| + DeviceManagementBackend::kErrorRequestFailed));
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendFailPolicy(
|
| + DeviceManagementBackend::kErrorRequestFailed));
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy,
|
| + true));
|
| + }
|
| SimulateSuccessfulLoginAndRunPending();
|
| }
|
|
|
| TEST_F(DeviceManagementPolicyProviderTest, RefreshPolicies) {
|
| - InSequence s;
|
| - CreateNewProvider(0, 0, 1000 * 1000, 1000, 0);
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedRegister());
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy, true));
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy, true));
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy, true));
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendFailPolicy(
|
| - DeviceManagementBackend::kErrorRequestFailed));
|
| + { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence.
|
| + InSequence s;
|
| + CreateNewProvider(0, 0, 0, 1000 * 1000, 1000, 0);
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedRegister());
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy,
|
| + true));
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy,
|
| + true));
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy,
|
| + true));
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendFailPolicy(
|
| + DeviceManagementBackend::kErrorRequestFailed));
|
| + }
|
| SimulateSuccessfulLoginAndRunPending();
|
| }
|
|
|
| // The client should try to re-register the device if the device server reports
|
| // back that it doesn't recognize the device token on a policy request.
|
| TEST_F(DeviceManagementPolicyProviderTest, DeviceNotFound) {
|
| - InSequence s;
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedRegister());
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendFailPolicy(
|
| - DeviceManagementBackend::kErrorServiceDeviceNotFound));
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedRegister());
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy, true));
|
| + { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence.
|
| + InSequence s;
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedRegister());
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendFailPolicy(
|
| + DeviceManagementBackend::kErrorServiceDeviceNotFound));
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedRegister());
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy,
|
| + true));
|
| + }
|
| SimulateSuccessfulLoginAndRunPending();
|
| }
|
|
|
| // The client should try to re-register the device if the device server reports
|
| // back that the device token is invalid on a policy request.
|
| TEST_F(DeviceManagementPolicyProviderTest, InvalidTokenOnPolicyRequest) {
|
| - InSequence s;
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedRegister());
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendFailPolicy(
|
| - DeviceManagementBackend::kErrorServiceManagementTokenInvalid));
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedRegister());
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy, true));
|
| + { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence.
|
| + InSequence s;
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedRegister());
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendFailPolicy(
|
| + DeviceManagementBackend::kErrorServiceManagementTokenInvalid));
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedRegister());
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy,
|
| + true));
|
| + }
|
| SimulateSuccessfulLoginAndRunPending();
|
| }
|
|
|
| // If the client is successfully managed, but the admin stops managing the
|
| // device, the client should notice and throw away the device token and id.
|
| TEST_F(DeviceManagementPolicyProviderTest, DeviceNoLongerManaged) {
|
| - InSequence s;
|
| - CreateNewProvider(0, 0, 0, 0, 1000 * 1000);
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedRegister());
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy, true));
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy, true));
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendFailPolicy(
|
| - DeviceManagementBackend::kErrorServiceManagementNotSupported));
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendFailRegister(
|
| - DeviceManagementBackend::kErrorServiceManagementNotSupported));
|
| + { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence.
|
| + InSequence s;
|
| + CreateNewProvider(0, 0, 0, 0, 0, 1000 * 1000);
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedRegister());
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy,
|
| + true));
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy,
|
| + true));
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendFailPolicy(
|
| + DeviceManagementBackend::kErrorServiceManagementNotSupported));
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendFailRegister(
|
| + DeviceManagementBackend::kErrorServiceManagementNotSupported));
|
| + }
|
| SimulateSuccessfulLoginAndRunPending();
|
| FilePath token_path(GetTokenPath());
|
| EXPECT_FALSE(file_util::PathExists(token_path));
|
| @@ -305,22 +332,28 @@ TEST_F(DeviceManagementPolicyProviderTest, DeviceNoLongerManaged) {
|
|
|
| // This test tests three things (see numbered comments below):
|
| TEST_F(DeviceManagementPolicyProviderTest, UnmanagedDevice) {
|
| - InSequence s;
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendFailRegister(
|
| - DeviceManagementBackend::kErrorServiceManagementNotSupported));
|
| + { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence.
|
| + InSequence s;
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendFailRegister(
|
| + DeviceManagementBackend::kErrorServiceManagementNotSupported));
|
| + }
|
| SimulateSuccessfulLoginAndRunPending();
|
| // (1) The provider's DMPolicyCache should know that the device is not
|
| // managed.
|
| EXPECT_TRUE(cache(provider_.get())->is_device_unmanaged());
|
| // (2) On restart, the provider should detect that this is not the first
|
| // login.
|
| - CreateNewProvider(1000*1000, 0, 0, 0, 0);
|
| + CreateNewProvider(1000 * 1000, 0, 0, 0, 0, 0);
|
| EXPECT_FALSE(waiting_for_initial_policies());
|
| - EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedRegister());
|
| - EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| - MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy, true));
|
| + { // Scoping so SimulateSuccessfulLoginAndRunPending doesn't see the sequence.
|
| + InSequence s;
|
| + EXPECT_CALL(*backend_, ProcessRegisterRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedRegister());
|
| + EXPECT_CALL(*backend_, ProcessPolicyRequest(_, _, _, _)).WillOnce(
|
| + MockDeviceManagementBackendSucceedBooleanPolicy(key::kDisableSpdy,
|
| + true));
|
| + }
|
| SimulateSuccessfulLoginAndRunPending();
|
| // (3) Since the backend call this time returned a device id, the "unmanaged"
|
| // marker should have been deleted.
|
|
|