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 <string>
9
10#include "base/compiler_specific.h"
11#include "base/files/file_path.h"
12#include "base/macros.h"
13#include "base/memory/scoped_ptr.h"
14#include "components/component_updater/component_updater_service.h"
15#include "content/public/test/test_browser_thread_bundle.h"
16#include "testing/gmock/include/gmock/gmock.h"
17#include "testing/gtest/include/gtest/gtest.h"
18
19namespace net {
20class LocalHostTestURLRequestInterceptor;
21}
22
23namespace component_updater {
24
25class InterceptorFactory;
26class TestConfigurator;
27class TestInstaller;
28class URLRequestPostInterceptor;
29
30// Intercepts HTTP GET requests sent to "localhost".
31typedef net::LocalHostTestURLRequestInterceptor GetInterceptor;
32
33class ComponentUpdaterTest : public testing::Test {
34 public:
35  enum TestComponents {
36    kTestComponent_abag,
37    kTestComponent_jebg,
38    kTestComponent_ihfo,
39  };
40
41  ComponentUpdaterTest();
42
43  virtual ~ComponentUpdaterTest();
44
45  virtual void SetUp();
46
47  virtual void TearDown();
48
49  ComponentUpdateService* component_updater();
50
51  // Makes the full path to a component updater test file.
52  const base::FilePath test_file(const char* file);
53
54  TestConfigurator* test_configurator();
55
56  ComponentUpdateService::Status RegisterComponent(CrxComponent* com,
57                                                   TestComponents component,
58                                                   const Version& version,
59                                                   TestInstaller* installer);
60
61 protected:
62  void RunThreads();
63  void RunThreadsUntilIdle();
64
65  scoped_ptr<InterceptorFactory> interceptor_factory_;
66  URLRequestPostInterceptor* post_interceptor_;  // Owned by the factory.
67
68  scoped_ptr<GetInterceptor> get_interceptor_;
69
70 private:
71  TestConfigurator* test_config_;
72  content::TestBrowserThreadBundle thread_bundle_;
73  scoped_ptr<ComponentUpdateService> component_updater_;
74};
75
76const char expected_crx_url[] =
77    "http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx";
78
79class MockServiceObserver : public ServiceObserver {
80 public:
81  MockServiceObserver();
82  ~MockServiceObserver();
83  MOCK_METHOD2(OnEvent, void(Events event, const std::string&));
84};
85
86class OnDemandTester {
87 public:
88  static ComponentUpdateService::Status OnDemand(
89      ComponentUpdateService* cus,
90      const std::string& component_id);
91};
92
93}  // namespace component_updater
94
95#endif  // CHROME_BROWSER_COMPONENT_UPDATER_TEST_COMPONENT_UPDATER_SERVICE_UNITTEST_H_
96