component_updater_service_unittest.h revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
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 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include <string> 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/basictypes.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/compiler_specific.h" 12ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/files/file_path.h" 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/scoped_ptr.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/component_updater/test/test_configurator.h" 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/component_updater/test/url_request_post_interceptor.h" 1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/component_updater/component_updater_service.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/test/net/url_request_prepackaged_interceptor.h" 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "net/url_request/url_request_test_util.h" 20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace component_updater { 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class TestInstaller; 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Intercepts HTTP GET requests sent to "localhost". 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef content::URLLocalHostRequestPrepackagedInterceptor GetInterceptor; 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Intercepts HTTP POST requests sent to "localhost2". 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class InterceptorFactory : public URLRequestPostInterceptorFactory { 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InterceptorFactory(); 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ~InterceptorFactory(); 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) URLRequestPostInterceptor* CreateInterceptor(); 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(InterceptorFactory); 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PartialMatch : public URLRequestPostInterceptor::RequestMatcher { 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public: 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) explicit PartialMatch(const std::string& expected) : expected_(expected) {} 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool Match(const std::string& actual) const OVERRIDE; 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private: 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string expected_; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PartialMatch); 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}; 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// component 1 has extension id "jebgalgnebhfojomionfpkfelancnnkf", and 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// the RSA public key the following hash: 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst uint8 jebg_hash[] = {0x94, 0x16, 0x0b, 0x6d, 0x41, 0x75, 0xe9, 0xec, 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x8e, 0xd5, 0xfa, 0x54, 0xb0, 0xd2, 0xdd, 0xa5, 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x6e, 0x05, 0x6b, 0xe8, 0x73, 0x47, 0xf6, 0xc4, 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x11, 0x9f, 0xbc, 0xb3, 0x09, 0xb3, 0x5b, 0x40}; 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// component 2 has extension id "abagagagagagagagagagagagagagagag", and 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// the RSA public key the following hash: 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst uint8 abag_hash[] = {0x01, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x01}; 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// component 3 has extension id "ihfokbkgjpifnbbojhneepfflplebdkc", and 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// the RSA public key the following hash: 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst uint8 ihfo_hash[] = {0x87, 0x5e, 0xa1, 0xa6, 0x9f, 0x85, 0xd1, 0x1e, 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x97, 0xd4, 0x4f, 0x55, 0xbf, 0xb4, 0x13, 0xa2, 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0xe7, 0xc5, 0xc8, 0xf5, 0x60, 0x19, 0x78, 0x1b, 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 0x6d, 0xe9, 0x4c, 0xeb, 0x96, 0x05, 0x42, 0x17}; 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass ComponentUpdaterTest : public testing::Test { 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch enum TestComponents { 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch kTestComponent_abag, 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch kTestComponent_jebg, 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch kTestComponent_ihfo, 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ComponentUpdaterTest(); 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~ComponentUpdaterTest(); 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SetUp(); 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void TearDown(); 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ComponentUpdateService* component_updater(); 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Makes the full path to a component updater test file. 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::FilePath test_file(const char* file); 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestConfigurator* test_configurator(); 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ComponentUpdateService::Status RegisterComponent(CrxComponent* com, 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestComponents component, 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const Version& version, 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestInstaller* installer); 994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 100ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch protected: 1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void RunThreads(); 1024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void RunThreadsUntilIdle(); 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 104a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<InterceptorFactory> interceptor_factory_; 105010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) URLRequestPostInterceptor* post_interceptor_; // Owned by the factory. 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<GetInterceptor> get_interceptor_; 108010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch TestConfigurator* test_config_; 111ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch base::FilePath test_data_dir_; 1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::TestBrowserThreadBundle thread_bundle_; 113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<ComponentUpdateService> component_updater_; 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst char expected_crx_url[] = 117eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch "http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx"; 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass MockServiceObserver : public ServiceObserver { 120a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public: 1215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu MockServiceObserver(); 1225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ~MockServiceObserver(); 1235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu MOCK_METHOD2(OnEvent, void(Events event, const std::string&)); 124a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}; 125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 1261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class OnDemandTester { 1271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 1281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) static ComponentUpdateService::Status OnDemand( 129010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ComponentUpdateService* cus, 130010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& component_id); 1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 1321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace component_updater 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // CHROME_BROWSER_COMPONENT_UPDATER_TEST_COMPONENT_UPDATER_SERVICE_UNITTEST_H_ 136