16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file. 46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chromeos/policy/consumer_management_service.h" 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/bind.h" 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/bind_helpers.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/callback.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/prefs/pref_service.h" 126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/prefs/testing_pref_service.h" 1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/run_loop.h" 1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/browser_process.h" 1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/browser_process_platform_part.h" 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/chrome_notification_types.h" 1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/mock_user_manager.h" 1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/chromeos/policy/device_cloud_policy_initializer.h" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/policy/device_policy_builder.h" 2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h" 2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/chromeos/policy/fake_device_cloud_policy_initializer.h" 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/settings/device_settings_test_helper.h" 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/notifications/notification_ui_manager.h" 2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/signin/fake_profile_oauth2_token_service.h" 2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h" 2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/common/pref_names.h" 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/test/base/browser_with_test_window_test.h" 336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/test/base/scoped_testing_local_state.h" 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/test/base/testing_profile_manager.h" 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/cryptohome/rpc.pb.h" 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/cryptohome_client.h" 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/dbus/mock_cryptohome_client.h" 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/signin/core/browser/profile_oauth2_token_service.h" 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/signin/core/browser/signin_manager_base.h" 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/public/browser/notification_details.h" 4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/public/browser/notification_source.h" 4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "google_apis/gaia/google_service_auth_error.h" 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "policy/proto/device_management_backend.pb.h" 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)using testing::Invoke; 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)using testing::NiceMock; 5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using testing::Return; 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)using testing::_; 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace em = enterprise_management; 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace { 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const char* kAttributeOwnerId = "consumer_management.owner_id"; 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const char* kTestOwner = "test@chromium.org.test"; 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace policy { 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ConsumerManagementServiceTest : public BrowserWithTestWindowTest { 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public: 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ConsumerManagementServiceTest() 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : cryptohome_result_(false), 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) set_owner_status_(false) { 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ON_CALL(mock_cryptohome_client_, GetBootAttribute(_, _)) 696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) .WillByDefault( 706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Invoke(this, &ConsumerManagementServiceTest::MockGetBootAttribute)); 716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ON_CALL(mock_cryptohome_client_, SetBootAttribute(_, _)) 726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) .WillByDefault( 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Invoke(this, &ConsumerManagementServiceTest::MockSetBootAttribute)); 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ON_CALL(mock_cryptohome_client_, FlushAndSignBootAttributes(_, _)) 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) .WillByDefault( 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Invoke(this, 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) &ConsumerManagementServiceTest:: 786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) MockFlushAndSignBootAttributes)); 796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 8103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void SetUp() OVERRIDE { 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BrowserWithTestWindowTest::SetUp(); 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci testing_profile_manager_.reset(new TestingProfileManager( 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestingBrowserProcess::GetGlobal())); 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(testing_profile_manager_->SetUp()); 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_.reset(new ConsumerManagementService(&mock_cryptohome_client_, 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NULL)); 9003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 9103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void TearDown() OVERRIDE { 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci testing_profile_manager_.reset(); 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) service_.reset(); 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BrowserWithTestWindowTest::TearDown(); 9803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 9903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ConsumerManagementService::EnrollmentStage GetEnrollmentStage() { 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return static_cast<ConsumerManagementService::EnrollmentStage>( 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci g_browser_process->local_state()->GetInteger( 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci prefs::kConsumerManagementEnrollmentStage)); 10403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 10503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetEnrollmentStage(ConsumerManagementService::EnrollmentStage stage) { 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci g_browser_process->local_state()->SetInteger( 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci prefs::kConsumerManagementEnrollmentStage, stage); 10903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 11003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void MockGetBootAttribute( 1126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const cryptohome::GetBootAttributeRequest& request, 1136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const chromeos::CryptohomeClient::ProtobufMethodCallback& callback) { 1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) get_boot_attribute_request_ = request; 1156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) callback.Run(cryptohome_status_, cryptohome_result_, cryptohome_reply_); 1166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void MockSetBootAttribute( 1196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const cryptohome::SetBootAttributeRequest& request, 1206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const chromeos::CryptohomeClient::ProtobufMethodCallback& callback) { 1216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) set_boot_attribute_request_ = request; 1226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) callback.Run(cryptohome_status_, cryptohome_result_, cryptohome_reply_); 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void MockFlushAndSignBootAttributes( 1266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const cryptohome::FlushAndSignBootAttributesRequest& request, 1276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) const chromeos::CryptohomeClient::ProtobufMethodCallback& callback) { 1286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) callback.Run(cryptohome_status_, cryptohome_result_, cryptohome_reply_); 1296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnGetOwnerDone(const std::string& owner) { 1326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) owner_ = owner; 1336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) void OnSetOwnerDone(bool status) { 1366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) set_owner_status_ = status; 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 1386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Variables for building the service. 1406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) NiceMock<chromeos::MockCryptohomeClient> mock_cryptohome_client_; 1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_ptr<ConsumerManagementService> service_; 1426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<TestingProfileManager> testing_profile_manager_; 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Variables for setting the return value or catching the arguments of mock 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // functions. 1476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) chromeos::DBusMethodCallStatus cryptohome_status_; 1486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool cryptohome_result_; 1496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome::BaseReply cryptohome_reply_; 1506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome::GetBootAttributeRequest get_boot_attribute_request_; 1516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome::SetBootAttributeRequest set_boot_attribute_request_; 1526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) std::string owner_; 1536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) bool set_owner_status_; 1546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 1556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ConsumerManagementServiceTest, CanGetEnrollmentStage) { 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::ENROLLMENT_STAGE_NONE, 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_->GetEnrollmentStage()); 1596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetEnrollmentStage(ConsumerManagementService::ENROLLMENT_STAGE_REQUESTED); 1616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::ENROLLMENT_STAGE_REQUESTED, 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_->GetEnrollmentStage()); 1646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ConsumerManagementServiceTest, CanSetEnrollmentStage) { 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::ENROLLMENT_STAGE_NONE, 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetEnrollmentStage()); 1696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_->SetEnrollmentStage( 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ConsumerManagementService::ENROLLMENT_STAGE_REQUESTED); 1726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::ENROLLMENT_STAGE_REQUESTED, 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetEnrollmentStage()); 1756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(ConsumerManagementServiceTest, CanGetOwner) { 1786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome_status_ = chromeos::DBUS_METHOD_CALL_SUCCESS; 1796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome_result_ = true; 1806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome_reply_.MutableExtension(cryptohome::GetBootAttributeReply::reply)-> 1816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) set_value(kTestOwner); 1826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) service_->GetOwner(base::Bind(&ConsumerManagementServiceTest::OnGetOwnerDone, 1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Unretained(this))); 1856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kAttributeOwnerId, get_boot_attribute_request_.name()); 1876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kTestOwner, owner_); 1886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 1896e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(ConsumerManagementServiceTest, GetOwnerReturnsAnEmptyStringWhenItFails) { 1916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome_status_ = chromeos::DBUS_METHOD_CALL_FAILURE; 1926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome_result_ = false; 1936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome_reply_.MutableExtension(cryptohome::GetBootAttributeReply::reply)-> 1946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) set_value(kTestOwner); 1956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1966e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) service_->GetOwner(base::Bind(&ConsumerManagementServiceTest::OnGetOwnerDone, 1976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Unretained(this))); 1986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1996e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ("", owner_); 2006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 2016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2026e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(ConsumerManagementServiceTest, CanSetOwner) { 2036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome_status_ = chromeos::DBUS_METHOD_CALL_SUCCESS; 2046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome_result_ = true; 2056e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) service_->SetOwner(kTestOwner, 2076e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&ConsumerManagementServiceTest::OnSetOwnerDone, 2086e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Unretained(this))); 2096e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kAttributeOwnerId, set_boot_attribute_request_.name()); 2116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_EQ(kTestOwner, set_boot_attribute_request_.value()); 2126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_TRUE(set_owner_status_); 2136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 2146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(ConsumerManagementServiceTest, SetOwnerReturnsFalseWhenItFails) { 2166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome_status_ = chromeos::DBUS_METHOD_CALL_FAILURE; 2176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cryptohome_result_ = false; 2186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) service_->SetOwner(kTestOwner, 2206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Bind(&ConsumerManagementServiceTest::OnSetOwnerDone, 2216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::Unretained(this))); 2226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 2236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) EXPECT_FALSE(set_owner_status_); 2246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 2256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 22603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class ConsumerManagementServiceEnrollmentTest 22703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) : public ConsumerManagementServiceTest { 22803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public: 22903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ConsumerManagementServiceEnrollmentTest() 23003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) : mock_user_manager_(new NiceMock<chromeos::MockUserManager>()), 23103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_user_manager_enabler_(mock_user_manager_), 23203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) fake_initializer_(new FakeDeviceCloudPolicyInitializer()), 23303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) enrollment_status_(EnrollmentStatus::ForStatus( 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EnrollmentStatus::STATUS_SUCCESS)) { 23503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Set up MockUserManager. The first user will be the owner. 23603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) mock_user_manager_->AddUser(kTestOwner); 23703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Return false for IsCurrentUserOwner() so that the enrollment stage is not 23903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // reset. 24003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) ON_CALL(*mock_user_manager_, IsCurrentUserOwner()) 24103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) .WillByDefault(Return(false)); 24203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 24303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Inject FakeDeviceCloudPolicyInitializer. 24403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) BrowserPolicyConnectorChromeOS* connector = 24503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) g_browser_process->platform_part()->browser_policy_connector_chromeos(); 24603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) connector->SetDeviceCloudPolicyInitializerForTesting( 24703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) scoped_ptr<DeviceCloudPolicyInitializer>(fake_initializer_)); 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void SetUp() OVERRIDE { 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ConsumerManagementServiceTest::SetUp(); 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set up the testing profile. 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile()->set_profile_name(kTestOwner); 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set up FakeProfileOAuth2TokenService and issue a fake refresh token. 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileOAuth2TokenServiceFactory::GetInstance()->SetTestingFactory( 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile(), &BuildAutoIssuingFakeProfileOAuth2TokenService); 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetFakeProfileOAuth2TokenService()-> 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IssueRefreshTokenForUser(kTestOwner, "fake_token"); 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set up the authenticated user name and ID. 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SigninManagerFactory::GetForProfile(profile())-> 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetAuthenticatedUsername(kTestOwner); 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The service should continue the enrollment process if the stage is 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ENROLLMENT_STAGE_OWNER_STORED. 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetEnrollmentStage( 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ConsumerManagementService::ENROLLMENT_STAGE_OWNER_STORED); 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 27103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void TearDown() OVERRIDE { 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci g_browser_process->notification_ui_manager()->CancelAll(); 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ConsumerManagementServiceTest::TearDown(); 27603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 27703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 27803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) FakeProfileOAuth2TokenService* GetFakeProfileOAuth2TokenService() { 27903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return static_cast<FakeProfileOAuth2TokenService*>( 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ProfileOAuth2TokenServiceFactory::GetForProfile(profile())); 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool HasEnrollmentNotification() { 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return g_browser_process->notification_ui_manager()-> 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FindById("consumer_management.enroll"); 28603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 28703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 28803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void RunEnrollmentTest() { 28903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Send the profile prepared notification to continue the enrollment. 29003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) service_->Observe(chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED, 29103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) content::Source<void>(NULL), // Not used. 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::Details<Profile>(profile())); 29303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::RunLoop().RunUntilIdle(); 29403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) } 29503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 29603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) NiceMock<chromeos::MockUserManager>* mock_user_manager_; 29703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) chromeos::ScopedUserManagerEnabler scoped_user_manager_enabler_; 29803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) FakeDeviceCloudPolicyInitializer* fake_initializer_; 29903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EnrollmentStatus enrollment_status_; 30003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}; 30103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 30203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST_F(ConsumerManagementServiceEnrollmentTest, EnrollsSuccessfully) { 30303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(fake_initializer_->was_start_enrollment_called()); 30403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 30503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RunEnrollmentTest(); 30603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 30703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(fake_initializer_->was_start_enrollment_called()); 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::ENROLLMENT_STAGE_SUCCESS, 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetEnrollmentStage()); 3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(HasEnrollmentNotification()); 31103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 31203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 31303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST_F(ConsumerManagementServiceEnrollmentTest, 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ShowsDesktopNotificationAndResetsEnrollmentStageIfCurrentUserIsOwner) { 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::ENROLLMENT_STAGE_OWNER_STORED, 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetEnrollmentStage()); 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(HasEnrollmentNotification()); 31803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_CALL(*mock_user_manager_, IsCurrentUserOwner()) 31903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) .WillOnce(Return(true)); 32003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 32103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RunEnrollmentTest(); 32203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::ENROLLMENT_STAGE_NONE, 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetEnrollmentStage()); 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(HasEnrollmentNotification()); 32603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 32703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 32803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST_F(ConsumerManagementServiceEnrollmentTest, FailsToGetAccessToken) { 32903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Disable auto-posting so that RunEnrollmentTest() should stop and wait for 33003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // the access token to be available. 33103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) GetFakeProfileOAuth2TokenService()-> 33203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) set_auto_post_fetch_response_on_message_loop(false); 33303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 33403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RunEnrollmentTest(); 33503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 33603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // The service should have a pending token request. 33703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) OAuth2TokenService::Request* token_request = 33803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) service_->GetTokenRequestForTesting(); 33903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(token_request); 34003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 34103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Tell the service that the access token is not available because of some 34203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // backend issue. 34303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) service_->OnGetTokenFailure( 34403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) token_request, 34503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_ERROR)); 34603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 34703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(fake_initializer_->was_start_enrollment_called()); 3481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::ENROLLMENT_STAGE_GET_TOKEN_FAILED, 3491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetEnrollmentStage()); 35003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 35103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 35203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)TEST_F(ConsumerManagementServiceEnrollmentTest, FailsToRegister) { 35303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(fake_initializer_->was_start_enrollment_called()); 35403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) fake_initializer_->set_enrollment_status(EnrollmentStatus::ForStatus( 35503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EnrollmentStatus::STATUS_REGISTRATION_FAILED)); 35603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 35703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RunEnrollmentTest(); 35803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 35903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_TRUE(fake_initializer_->was_start_enrollment_called()); 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::ENROLLMENT_STAGE_DM_SERVER_FAILED, 3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetEnrollmentStage()); 36203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 36303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ConsumerManagementServiceEnrollmentTest, 3651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ShowsDesktopNotificationOnlyIfEnrollmentIsAlreadyCompleted) { 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetEnrollmentStage(ConsumerManagementService::ENROLLMENT_STAGE_CANCELED); 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(HasEnrollmentNotification()); 36803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 36903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) RunEnrollmentTest(); 37003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 37103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_FALSE(fake_initializer_->was_start_enrollment_called()); 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::ENROLLMENT_STAGE_NONE, 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GetEnrollmentStage()); 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(HasEnrollmentNotification()); 3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ConsumerManagementServiceStatusTest 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : public chromeos::DeviceSettingsTestBase { 3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 3801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ConsumerManagementServiceStatusTest() 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : testing_local_state_(TestingBrowserProcess::GetGlobal()), 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_(NULL, &device_settings_service_) { 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetEnrollmentStage(ConsumerManagementService::EnrollmentStage stage) { 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci testing_local_state_.Get()->SetInteger( 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci prefs::kConsumerManagementEnrollmentStage, stage); 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetManagementMode(em::PolicyData::ManagementMode mode) { 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci device_policy_.policy_data().set_management_mode(mode); 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci device_policy_.Build(); 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci device_settings_test_helper_.set_policy_blob(device_policy_.GetBlob()); 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ReloadDeviceSettings(); 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ScopedTestingLocalState testing_local_state_; 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ConsumerManagementService service_; 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(ConsumerManagementServiceStatusTest, GetStatusAndGetStatusStringWork) { 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::STATUS_UNKNOWN, service_.GetStatus()); 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("StatusUnknown", service_.GetStatusString()); 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetManagementMode(em::PolicyData::NOT_MANAGED); 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetEnrollmentStage(ConsumerManagementService::ENROLLMENT_STAGE_NONE); 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::STATUS_UNENROLLED, service_.GetStatus()); 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("StatusUnenrolled", service_.GetStatusString()); 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetEnrollmentStage(ConsumerManagementService::ENROLLMENT_STAGE_REQUESTED); 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::STATUS_ENROLLING, service_.GetStatus()); 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("StatusEnrolling", service_.GetStatusString()); 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetManagementMode(em::PolicyData::CONSUMER_MANAGED); 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SetEnrollmentStage(ConsumerManagementService::ENROLLMENT_STAGE_SUCCESS); 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(ConsumerManagementService::STATUS_ENROLLED, service_.GetStatus()); 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ("StatusEnrolled", service_.GetStatusString()); 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(davidyu): Test for STATUS_UNENROLLING when it is implemented. 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // http://crbug.com/353050. 42403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} 42503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 4266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} // namespace policy 427