1// Copyright (c) 2011 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 NET_TEST_NET_TEST_SUITE_H_
6#define NET_TEST_NET_TEST_SUITE_H_
7
8#include "base/memory/ref_counted.h"
9#include "base/test/test_suite.h"
10#include "build/build_config.h"
11#include "net/dns/mock_host_resolver.h"
12
13namespace base {
14class MessageLoop;
15}
16
17namespace net {
18class NetworkChangeNotifier;
19}
20
21class NetTestSuite : public base::TestSuite {
22 public:
23  NetTestSuite(int argc, char** argv);
24  virtual ~NetTestSuite();
25
26  virtual void Initialize() OVERRIDE;
27
28  virtual void Shutdown() OVERRIDE;
29
30 protected:
31  // This constructor is only accessible to specialized net test
32  // implementations which need to control the creation of an AtExitManager
33  // instance for the duration of the test.
34  NetTestSuite(int argc, char** argv, bool create_at_exit_manager);
35
36  // Called from within Initialize(), but separate so that derived classes
37  // can initialize the NetTestSuite instance only and not
38  // TestSuite::Initialize().  TestSuite::Initialize() performs some global
39  // initialization that can only be done once.
40  void InitializeTestThread();
41
42  // Same as above, except it does not create a mock
43  // NetworkChangeNotifier.  Use this if your test needs to create and
44  // manage its own mock NetworkChangeNotifier, or if your test uses
45  // the production NetworkChangeNotifier.
46  void InitializeTestThreadNoNetworkChangeNotifier();
47
48 private:
49  scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_;
50  scoped_ptr<base::MessageLoop> message_loop_;
51  scoped_refptr<net::RuleBasedHostResolverProc> host_resolver_proc_;
52  net::ScopedDefaultHostResolverProc scoped_host_resolver_proc_;
53};
54
55#endif  // NET_TEST_NET_TEST_SUITE_H_
56