component_updater_service_unittest.h revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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" 22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "net/url_request/url_request_test_util.h" 23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TestInstaller; 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// component 1 has extension id "jebgalgnebhfojomionfpkfelancnnkf", and 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// the RSA public key the following hash: 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst uint8 jebg_hash[] = {0x94, 0x16, 0x0b, 0x6d, 0x41, 0x75, 0xe9, 0xec, 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x8e, 0xd5, 0xfa, 0x54, 0xb0, 0xd2, 0xdd, 0xa5, 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x6e, 0x05, 0x6b, 0xe8, 0x73, 0x47, 0xf6, 0xc4, 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x11, 0x9f, 0xbc, 0xb3, 0x09, 0xb3, 0x5b, 0x40}; 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// component 2 has extension id "abagagagagagagagagagagagagagagag", and 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// the RSA public key the following hash: 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst uint8 abag_hash[] = {0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01}; 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// component 3 has extension id "ihfokbkgjpifnbbojhneepfflplebdkc", and 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// the RSA public key the following hash: 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst uint8 ihfo_hash[] = {0x87, 0x5e, 0xa1, 0xa6, 0x9f, 0x85, 0xd1, 0x1e, 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x97, 0xd4, 0x4f, 0x55, 0xbf, 0xb4, 0x13, 0xa2, 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xe7, 0xc5, 0xc8, 0xf5, 0x60, 0x19, 0x78, 0x1b, 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x6d, 0xe9, 0x4c, 0xeb, 0x96, 0x05, 0x42, 0x17}; 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TestConfigurator : public ComponentUpdateService::Configurator { 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch explicit TestConfigurator(); 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~TestConfigurator(); 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual int InitialDelay() OVERRIDE; 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef std::pair<CrxComponent*, int> CheckAtLoopCount; 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual int NextCheckDelay() OVERRIDE; 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual int StepDelay() OVERRIDE; 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual int StepDelayMedium() OVERRIDE; 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual int MinimumReCheckWait() OVERRIDE; 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual int OnDemandDelay() OVERRIDE; 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual GURL UpdateUrl() OVERRIDE; 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 69ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual GURL PingUrl() OVERRIDE; 70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual const char* ExtraRequestParams() OVERRIDE; 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual size_t UrlSizeLimit() OVERRIDE; 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual net::URLRequestContextGetter* RequestContext() OVERRIDE; 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Don't use the utility process to decode files. 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual bool InProcess() OVERRIDE; 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ComponentPatcher* CreateComponentPatcher() OVERRIDE; 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual bool DeltasEnabled() const OVERRIDE; 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetLoopCount(int times); 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetRecheckTime(int seconds); 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetOnDemandTime(int seconds); 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void AddComponentToCheck(CrxComponent* com, int at_loop_iter); 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetComponentUpdateService(ComponentUpdateService* cus); 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 944e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void SetQuitClosure(const base::Closure& quit_closure); 954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int times_; 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int recheck_time_; 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int ondemand_time_; 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::list<CheckAtLoopCount> components_to_check_; 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ComponentUpdateService* cus_; 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_refptr<net::TestURLRequestContextGetter> context_; 1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Closure quit_closure_; 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass ComponentUpdaterTest : public testing::Test { 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch enum TestComponents { 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch kTestComponent_abag, 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch kTestComponent_jebg, 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch kTestComponent_ihfo, 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ComponentUpdaterTest(); 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~ComponentUpdaterTest(); 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 119eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void TearDown(); 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 121eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ComponentUpdateService* component_updater(); 122eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 123eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Makes the full path to a component updater test file. 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::FilePath test_file(const char* file); 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestConfigurator* test_configurator(); 127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ComponentUpdateService::Status RegisterComponent(CrxComponent* com, 129eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestComponents component, 130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const Version& version, 131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestInstaller* installer); 1324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 133ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch protected: 1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void RunThreads(); 1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void RunThreadsUntilIdle(); 136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestConfigurator* test_config_; 139ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::FilePath test_data_dir_; 1404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 141ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<ComponentUpdateService> component_updater_; 142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 143eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst char expected_crx_url[] = 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx"; 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 147ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass PingChecker : public RequestCounter { 148ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch public: 149ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch explicit PingChecker(const std::map<std::string, std::string>& attributes); 150ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 151ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual ~PingChecker(); 152ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 153ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual void Trial(net::URLRequest* request) OVERRIDE; 154ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 155ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int NumHits() const { 156ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return num_hits_; 157ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 158ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int NumMisses() const { 159ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return num_misses_; 160ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 1613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string GetPings() const; 162ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 163ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch private: 1643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::vector<std::string> pings_; 165ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int num_hits_; 166ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch int num_misses_; 167ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::map<std::string, std::string> attributes_; 168ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch virtual bool Test(net::URLRequest* request); 169ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}; 170ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben 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) 178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CHROME_BROWSER_COMPONENT_UPDATER_TEST_COMPONENT_UPDATER_SERVICE_UNITTEST_H_ 179