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