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