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