component_updater_service_unittest.h revision a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7
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
27class TestInstaller;
28
29namespace component_updater {
30
31// Intercepts HTTP GET requests sent to "localhost".
32typedef content::URLLocalHostRequestPrepackagedInterceptor GetInterceptor;
33
34// Intercepts HTTP POST requests sent to "localhost2".
35class 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:
48const 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:
54const 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:
60const 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
65class 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 const char* 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
106class 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
149const char expected_crx_url[] =
150    "http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx";
151
152class MockComponentObserver : public ComponentObserver {
153 public:
154  MockComponentObserver();
155  ~MockComponentObserver();
156  MOCK_METHOD2(OnEvent, void(Events event, int extra));
157};
158
159class 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