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