Chromium Code Reviews| Index: chrome/browser/sync/test/integration/two_client_arc_package_sync_test.cc |
| diff --git a/chrome/browser/sync/test/integration/two_client_arc_package_sync_test.cc b/chrome/browser/sync/test/integration/two_client_arc_package_sync_test.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d4c9c36fe983e13d5b7a5ce9e645469b75d181ab |
| --- /dev/null |
| +++ b/chrome/browser/sync/test/integration/two_client_arc_package_sync_test.cc |
| @@ -0,0 +1,190 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/sync/test/integration/sync_arc_package_helper.h" |
| +#include "chrome/browser/sync/test/integration/sync_integration_test_util.h" |
| +#include "chrome/browser/sync/test/integration/sync_test.h" |
| + |
| +namespace arc { |
| + |
| +namespace { |
| + |
| +bool AllProfilesHaveSameArcPackageDetails() { |
| + return SyncArcPackageHelper::GetInstance() |
| + ->AllProfilesHaveSamePackageDetails(); |
| +} |
| + |
| +} // namespace |
| + |
| +class TwoClientArcPackageSyncTest : public SyncTest { |
| + public: |
| + TwoClientArcPackageSyncTest() |
| + : SyncTest(TWO_CLIENT_LEGACY), sync_helper_(nullptr) { |
|
pavely
2016/07/29 23:01:03
Why do you pass TWO_CLIENT_LEGACY? Could you try r
lgcheng
2016/07/29 23:53:21
There are three main reasons for this:
1.TWO_CLIE
|
| + DisableVerifier(); |
| + } |
| + |
| + ~TwoClientArcPackageSyncTest() override {} |
| + |
| + bool SetupClients() override { |
| + if (!SyncTest::SetupClients()) |
| + return false; |
| + |
| + // Init SyncArcPackageHelper to ensure that the arc services are initialized |
| + // for each Profile. |
| + sync_helper_ = SyncArcPackageHelper::GetInstance(); |
| + return sync_helper_ != nullptr; |
| + } |
| + |
| + void CleanUp() { sync_helper_->CleanUp(); } |
| + |
| + SyncArcPackageHelper* sync_helper() { return sync_helper_; } |
| + |
| + private: |
| + SyncArcPackageHelper* sync_helper_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TwoClientArcPackageSyncTest); |
| +}; |
| + |
| +IN_PROC_BROWSER_TEST_F(TwoClientArcPackageSyncTest, StartWithNoPackages) { |
| + ASSERT_TRUE(SetupSync()); |
| + |
| + ASSERT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + CleanUp(); |
|
pavely
2016/07/29 23:01:03
ASSERT_TRUE returns early. To ensure cleanup code
lgcheng
2016/07/29 23:53:21
I put clearup code in TearDownOnMainThread(). Than
|
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(TwoClientArcPackageSyncTest, StartWithSamePackages) { |
| + ASSERT_TRUE(SetupClients()); |
| + |
| + constexpr size_t kNumPackages = 5; |
| + for (size_t i = 0; i < kNumPackages; ++i) { |
| + sync_helper()->InstallPackageWithIndex(GetProfile(0), i); |
| + sync_helper()->InstallPackageWithIndex(GetProfile(1), i); |
| + } |
| + |
| + ASSERT_TRUE(SetupSync()); |
| + |
| + ASSERT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + CleanUp(); |
| +} |
| + |
| +// In this test, packages are installed before sync started. Client1 will have |
| +// package 0 to 4 installed while client2 has no package installed. |
| +IN_PROC_BROWSER_TEST_F(TwoClientArcPackageSyncTest, |
| + OneClientHasPackagesAnotherHasNone) { |
| + ASSERT_TRUE(SetupClients()); |
| + |
| + constexpr size_t kNumPackages = 5; |
| + for (size_t i = 0; i < kNumPackages; ++i) { |
| + sync_helper()->InstallPackageWithIndex(GetProfile(0), i); |
| + } |
| + |
| + ASSERT_FALSE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + ASSERT_TRUE(SetupSync()); |
| + |
| + ASSERT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + CleanUp(); |
| +} |
| + |
| +// In this test, packages are installed before sync started. Client1 will have |
| +// package 0 to 9 installed and client2 will have package 0 to 4 installed. |
| +IN_PROC_BROWSER_TEST_F(TwoClientArcPackageSyncTest, |
| + OneClientHasPackagesAnotherHasSubSet) { |
| + ASSERT_TRUE(SetupClients()); |
| + |
| + constexpr size_t kNumPackages = 5; |
| + for (size_t i = 0; i < kNumPackages; ++i) { |
| + sync_helper()->InstallPackageWithIndex(GetProfile(0), i); |
| + sync_helper()->InstallPackageWithIndex(GetProfile(1), i); |
| + } |
| + |
| + for (size_t i = 0; i < kNumPackages; ++i) { |
| + sync_helper()->InstallPackageWithIndex(GetProfile(0), i + kNumPackages); |
| + } |
| + |
| + ASSERT_FALSE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + ASSERT_TRUE(SetupSync()); |
| + |
| + EXPECT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + CleanUp(); |
| +} |
| + |
| +// In this test, packages are installed before sync started. Client1 will have |
| +// package 0 to 4 installed and client2 will have package 1 to 5 installed. |
| +IN_PROC_BROWSER_TEST_F(TwoClientArcPackageSyncTest, |
| + StartWithDifferentPackages) { |
| + ASSERT_TRUE(SetupClients()); |
| + |
| + constexpr size_t kNumPackages = 5; |
| + constexpr size_t kPackageIdDiff = 1; |
| + for (size_t i = 0; i < kNumPackages; ++i) { |
| + sync_helper()->InstallPackageWithIndex(GetProfile(0), i); |
| + sync_helper()->InstallPackageWithIndex(GetProfile(1), i + kPackageIdDiff); |
| + } |
| + |
| + EXPECT_FALSE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + ASSERT_TRUE(SetupSync()); |
| + |
| + EXPECT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + CleanUp(); |
| +} |
| + |
| +// Tests package installaton after sync started. |
| +IN_PROC_BROWSER_TEST_F(TwoClientArcPackageSyncTest, Install) { |
| + ASSERT_TRUE(SetupSync()); |
| + ASSERT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + sync_helper()->InstallPackageWithIndex(GetProfile(0), 0); |
| + ASSERT_TRUE(AwaitQuiescence()); |
| + EXPECT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + CleanUp(); |
| +} |
| + |
| +// In this test, packages are installed after sync started. Client1 installs |
| +// package 0 to 4 and client2 installs package 3 to 7. |
| +IN_PROC_BROWSER_TEST_F(TwoClientArcPackageSyncTest, InstallDifferent) { |
| + ASSERT_TRUE(SetupSync()); |
| + ASSERT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + constexpr size_t kNumPackages = 5; |
| + constexpr size_t kPackageIdDiff = 3; |
| + for (size_t i = 0; i < kNumPackages; ++i) { |
| + sync_helper()->InstallPackageWithIndex(GetProfile(0), i); |
| + sync_helper()->InstallPackageWithIndex(GetProfile(1), i + kPackageIdDiff); |
| + } |
| + |
| + ASSERT_TRUE(AwaitQuiescence()); |
| + EXPECT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + CleanUp(); |
| +} |
| + |
| +// Installs package from one client and uninstalls from another after sync |
| +// started. |
| +IN_PROC_BROWSER_TEST_F(TwoClientArcPackageSyncTest, Uninstall) { |
| + ASSERT_TRUE(SetupSync()); |
| + ASSERT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + sync_helper()->InstallPackageWithIndex(GetProfile(0), 1); |
| + ASSERT_TRUE(AwaitQuiescence()); |
| + EXPECT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + sync_helper()->UninstallPackageWithIndex(GetProfile(1), 1); |
| + EXPECT_FALSE(AllProfilesHaveSameArcPackageDetails()); |
| + ASSERT_TRUE(AwaitQuiescence()); |
| + EXPECT_TRUE(AllProfilesHaveSameArcPackageDetails()); |
| + |
| + CleanUp(); |
| +} |
| + |
| +} // namespace arc |