| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/user_manager/device_ownership_waiter_impl.h" |
| |
| #include <memory> |
| |
| #include "base/test/scoped_chromeos_version_info.h" |
| #include "base/test/task_environment.h" |
| #include "base/test/test_future.h" |
| #include "base/time/time.h" |
| #include "chromeos/ash/components/install_attributes/stub_install_attributes.h" |
| #include "components/user_manager/fake_user_manager.h" |
| #include "components/user_manager/scoped_user_manager.h" |
| #include "components/user_manager/user_names.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace user_manager { |
| |
| class DeviceOwnershipWaiterTest : public testing::Test { |
| public: |
| DeviceOwnershipWaiterTest() = default; |
| |
| ~DeviceOwnershipWaiterTest() override = default; |
| |
| void SetOwnerId(const AccountId& id) { fake_user_manager_->SetOwnerId(id); } |
| |
| private: |
| base::test::TaskEnvironment task_environment_; |
| std::unique_ptr<ash::ScopedStubInstallAttributes> stub_install_attributes_{ |
| std::make_unique<ash::ScopedStubInstallAttributes>( |
| ash::StubInstallAttributes::CreateUnset())}; |
| user_manager::TypedScopedUserManager<FakeUserManager> |
| fake_user_manager_{std::make_unique<FakeUserManager>()}; |
| }; |
| |
| TEST_F(DeviceOwnershipWaiterTest, DelaysCorrectly) { |
| // Since we skip the actual delay for ownership if we're running in a ChromeOS |
| // on Linux build, we mock that behavior by pretending to be ChromeOS. |
| const char kLsbReleaseValidChromeOs[] = "CHROMEOS_RELEASE_NAME=Chrome OS\n"; |
| |
| base::test::ScopedChromeOSVersionInfo version(kLsbReleaseValidChromeOs, |
| base::Time()); |
| DeviceOwnershipWaiterImpl waiter; |
| |
| base::test::TestFuture<void> future; |
| waiter.WaitForOwnershipFetched(future.GetCallback()); |
| |
| SetOwnerId(user_manager::StubAccountId()); |
| |
| EXPECT_TRUE(future.Wait()); |
| } |
| |
| // Tests that on a ChromeOS on Linux build, the delay |
| // is skipped and instead the callback invoked immediately. |
| TEST_F(DeviceOwnershipWaiterTest, DoesNotDelayForChromeOsOnLinux) { |
| const char kLsbReleaseNonChromeOs[] = "CHROMEOS_RELEASE_NAME=Non Chrome OS\n"; |
| base::test::ScopedChromeOSVersionInfo version(kLsbReleaseNonChromeOs, |
| base::Time()); |
| |
| DeviceOwnershipWaiterImpl waiter; |
| |
| base::test::TestFuture<void> future; |
| waiter.WaitForOwnershipFetched(future.GetCallback()); |
| |
| EXPECT_TRUE(future.Wait()); |
| } |
| |
| } // namespace user_manager |