extensions_sync_perf_test.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/strings/stringprintf.h"
6#include "chrome/browser/sync/test/integration/extensions_helper.h"
7#include "chrome/browser/sync/test/integration/performance/sync_timing_helper.h"
8#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
9#include "chrome/browser/sync/test/integration/sync_test.h"
10
11using extensions_helper::AllProfilesHaveSameExtensions;
12using extensions_helper::AllProfilesHaveSameExtensionsAsVerifier;
13using extensions_helper::DisableExtension;
14using extensions_helper::EnableExtension;
15using extensions_helper::GetInstalledExtensions;
16using extensions_helper::InstallExtension;
17using extensions_helper::InstallExtensionsPendingForSync;
18using extensions_helper::IsExtensionEnabled;
19using extensions_helper::UninstallExtension;
20
21// TODO(braffert): Replicate these tests for apps.
22
23static const int kNumExtensions = 150;
24
25class ExtensionsSyncPerfTest : public SyncTest {
26 public:
27  ExtensionsSyncPerfTest()
28      : SyncTest(TWO_CLIENT),
29        extension_number_(0) {}
30
31  // Adds |num_extensions| new unique extensions to |profile|.
32  void AddExtensions(int profile, int num_extensions);
33
34  // Updates the enabled/disabled state for all extensions in |profile|.
35  void UpdateExtensions(int profile);
36
37  // Uninstalls all currently installed extensions from |profile|.
38  void RemoveExtensions(int profile);
39
40  // Returns the number of currently installed extensions for |profile|.
41  int GetExtensionCount(int profile);
42
43 private:
44  int extension_number_;
45  DISALLOW_COPY_AND_ASSIGN(ExtensionsSyncPerfTest);
46};
47
48void ExtensionsSyncPerfTest::AddExtensions(int profile, int num_extensions) {
49  for (int i = 0; i < num_extensions; ++i) {
50    InstallExtension(GetProfile(profile), extension_number_++);
51  }
52}
53
54void ExtensionsSyncPerfTest::UpdateExtensions(int profile) {
55  std::vector<int> extensions = GetInstalledExtensions(GetProfile(profile));
56  for (std::vector<int>::iterator it = extensions.begin();
57       it != extensions.end(); ++it) {
58    if (IsExtensionEnabled(GetProfile(profile), *it)) {
59      DisableExtension(GetProfile(profile), *it);
60    } else {
61      EnableExtension(GetProfile(profile), *it);
62    }
63  }
64}
65
66int ExtensionsSyncPerfTest::GetExtensionCount(int profile) {
67  return GetInstalledExtensions(GetProfile(profile)).size();
68}
69
70void ExtensionsSyncPerfTest::RemoveExtensions(int profile) {
71  std::vector<int> extensions = GetInstalledExtensions(GetProfile(profile));
72  for (std::vector<int>::iterator it = extensions.begin();
73       it != extensions.end(); ++it) {
74    UninstallExtension(GetProfile(profile), *it);
75  }
76}
77
78IN_PROC_BROWSER_TEST_F(ExtensionsSyncPerfTest, P0) {
79  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
80  int num_default_extensions = GetExtensionCount(0);
81  int expected_extension_count = num_default_extensions + kNumExtensions;
82
83  // TCM ID - 7563874.
84  AddExtensions(0, kNumExtensions);
85  base::TimeDelta dt =
86      SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1));
87  InstallExtensionsPendingForSync(GetProfile(1));
88  ASSERT_EQ(expected_extension_count, GetExtensionCount(1));
89  SyncTimingHelper::PrintResult("extensions", "add_extensions", dt);
90
91  // TCM ID - 7655397.
92  UpdateExtensions(0);
93  dt = SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1));
94  ASSERT_EQ(expected_extension_count, GetExtensionCount(1));
95  SyncTimingHelper::PrintResult("extensions", "update_extensions", dt);
96
97  // TCM ID - 7567721.
98  RemoveExtensions(0);
99  dt = SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1));
100  ASSERT_EQ(num_default_extensions, GetExtensionCount(1));
101  SyncTimingHelper::PrintResult("extensions", "delete_extensions", dt);
102}
103