1 // Copyright 2013 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 #ifndef CHROME_BROWSER_COMPONENT_UPDATER_TEST_COMPONENT_UPDATER_SERVICE_UNITTEST_H_ 6 #define CHROME_BROWSER_COMPONENT_UPDATER_TEST_COMPONENT_UPDATER_SERVICE_UNITTEST_H_ 7 8 #include <list> 9 #include <map> 10 #include <string> 11 #include <utility> 12 #include <vector> 13 #include "base/basictypes.h" 14 #include "base/compiler_specific.h" 15 #include "base/files/file_path.h" 16 #include "base/memory/ref_counted.h" 17 #include "base/memory/scoped_ptr.h" 18 #include "chrome/browser/component_updater/component_updater_service.h" 19 #include "chrome/browser/component_updater/test/component_patcher_mock.h" 20 #include "chrome/browser/component_updater/test/url_request_post_interceptor.h" 21 #include "content/public/test/test_browser_thread_bundle.h" 22 #include "content/test/net/url_request_prepackaged_interceptor.h" 23 #include "net/url_request/url_request_test_util.h" 24 #include "testing/gmock/include/gmock/gmock.h" 25 #include "testing/gtest/include/gtest/gtest.h" 26 27 class TestInstaller; 28 29 namespace component_updater { 30 31 // Intercepts HTTP GET requests sent to "localhost". 32 typedef content::URLLocalHostRequestPrepackagedInterceptor GetInterceptor; 33 34 // Intercepts HTTP POST requests sent to "localhost2". 35 class InterceptorFactory : public URLRequestPostInterceptorFactory { 36 public: 37 InterceptorFactory(); 38 ~InterceptorFactory(); 39 40 URLRequestPostInterceptor* CreateInterceptor(); 41 42 private: 43 DISALLOW_COPY_AND_ASSIGN(InterceptorFactory); 44 }; 45 46 // component 1 has extension id "jebgalgnebhfojomionfpkfelancnnkf", and 47 // the RSA public key the following hash: 48 const uint8 jebg_hash[] = {0x94, 0x16, 0x0b, 0x6d, 0x41, 0x75, 0xe9, 0xec, 49 0x8e, 0xd5, 0xfa, 0x54, 0xb0, 0xd2, 0xdd, 0xa5, 50 0x6e, 0x05, 0x6b, 0xe8, 0x73, 0x47, 0xf6, 0xc4, 51 0x11, 0x9f, 0xbc, 0xb3, 0x09, 0xb3, 0x5b, 0x40}; 52 // component 2 has extension id "abagagagagagagagagagagagagagagag", and 53 // the RSA public key the following hash: 54 const uint8 abag_hash[] = {0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 55 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 56 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 57 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01}; 58 // component 3 has extension id "ihfokbkgjpifnbbojhneepfflplebdkc", and 59 // the RSA public key the following hash: 60 const uint8 ihfo_hash[] = {0x87, 0x5e, 0xa1, 0xa6, 0x9f, 0x85, 0xd1, 0x1e, 61 0x97, 0xd4, 0x4f, 0x55, 0xbf, 0xb4, 0x13, 0xa2, 62 0xe7, 0xc5, 0xc8, 0xf5, 0x60, 0x19, 0x78, 0x1b, 63 0x6d, 0xe9, 0x4c, 0xeb, 0x96, 0x05, 0x42, 0x17}; 64 65 class TestConfigurator : public ComponentUpdateService::Configurator { 66 public: 67 TestConfigurator(); 68 virtual ~TestConfigurator(); 69 70 // Overrrides for ComponentUpdateService::Configurator. 71 virtual int InitialDelay() OVERRIDE; 72 virtual int NextCheckDelay() OVERRIDE; 73 virtual int StepDelay() OVERRIDE; 74 virtual int StepDelayMedium() OVERRIDE; 75 virtual int MinimumReCheckWait() OVERRIDE; 76 virtual int OnDemandDelay() OVERRIDE; 77 virtual GURL UpdateUrl() OVERRIDE; 78 virtual GURL PingUrl() OVERRIDE; 79 virtual std::string ExtraRequestParams() OVERRIDE; 80 virtual size_t UrlSizeLimit() OVERRIDE; 81 virtual net::URLRequestContextGetter* RequestContext() OVERRIDE; 82 virtual bool InProcess() OVERRIDE; 83 virtual ComponentPatcher* CreateComponentPatcher() OVERRIDE; 84 virtual bool DeltasEnabled() const OVERRIDE; 85 virtual bool UseBackgroundDownloader() const OVERRIDE; 86 87 typedef std::pair<CrxComponent*, int> CheckAtLoopCount; 88 void SetLoopCount(int times); 89 void SetRecheckTime(int seconds); 90 void SetOnDemandTime(int seconds); 91 void SetComponentUpdateService(ComponentUpdateService* cus); 92 void SetQuitClosure(const base::Closure& quit_closure); 93 void SetInitialDelay(int seconds); 94 95 private: 96 int initial_time_; 97 int times_; 98 int recheck_time_; 99 int ondemand_time_; 100 101 ComponentUpdateService* cus_; 102 scoped_refptr<net::TestURLRequestContextGetter> context_; 103 base::Closure quit_closure_; 104 }; 105 106 class ComponentUpdaterTest : public testing::Test { 107 public: 108 enum TestComponents { 109 kTestComponent_abag, 110 kTestComponent_jebg, 111 kTestComponent_ihfo, 112 }; 113 114 ComponentUpdaterTest(); 115 116 virtual ~ComponentUpdaterTest(); 117 118 virtual void SetUp(); 119 120 virtual void TearDown(); 121 122 ComponentUpdateService* component_updater(); 123 124 // Makes the full path to a component updater test file. 125 const base::FilePath test_file(const char* file); 126 127 TestConfigurator* test_configurator(); 128 129 ComponentUpdateService::Status RegisterComponent(CrxComponent* com, 130 TestComponents component, 131 const Version& version, 132 TestInstaller* installer); 133 134 protected: 135 void RunThreads(); 136 void RunThreadsUntilIdle(); 137 138 scoped_ptr<InterceptorFactory> interceptor_factory_; 139 URLRequestPostInterceptor* post_interceptor_; // Owned by the factory. 140 141 scoped_ptr<GetInterceptor> get_interceptor_; 142 private: 143 TestConfigurator* test_config_; 144 base::FilePath test_data_dir_; 145 content::TestBrowserThreadBundle thread_bundle_; 146 scoped_ptr<ComponentUpdateService> component_updater_; 147 }; 148 149 const char expected_crx_url[] = 150 "http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx"; 151 152 class MockComponentObserver : public ComponentObserver { 153 public: 154 MockComponentObserver(); 155 ~MockComponentObserver(); 156 MOCK_METHOD2(OnEvent, void(Events event, int extra)); 157 }; 158 159 class OnDemandTester { 160 public: 161 static ComponentUpdateService::Status OnDemand( 162 ComponentUpdateService* cus, const std::string& component_id); 163 }; 164 165 } // namespace component_updater 166 167 #endif // CHROME_BROWSER_COMPONENT_UPDATER_TEST_COMPONENT_UPDATER_SERVICE_UNITTEST_H_ 168