Home | History | Annotate | Download | only in performance
      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 
     11 using extensions_helper::AllProfilesHaveSameExtensions;
     12 using extensions_helper::AllProfilesHaveSameExtensionsAsVerifier;
     13 using extensions_helper::DisableExtension;
     14 using extensions_helper::EnableExtension;
     15 using extensions_helper::GetInstalledExtensions;
     16 using extensions_helper::InstallExtension;
     17 using extensions_helper::InstallExtensionsPendingForSync;
     18 using extensions_helper::IsExtensionEnabled;
     19 using extensions_helper::UninstallExtension;
     20 
     21 // TODO(braffert): Replicate these tests for apps.
     22 
     23 static const int kNumExtensions = 150;
     24 
     25 class 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 
     48 void 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 
     54 void 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 
     66 int ExtensionsSyncPerfTest::GetExtensionCount(int profile) {
     67   return GetInstalledExtensions(GetProfile(profile)).size();
     68 }
     69 
     70 void 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 
     78 IN_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