xref: /aosp_15_r20/external/cronet/net/test/net_test_suite.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2012 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "net/test/net_test_suite.h"
6 
7 #include "base/check_op.h"
8 #include "net/base/network_change_notifier.h"
9 #include "net/http/http_stream_factory.h"
10 #include "net/quic/platform/impl/quic_test_flags_utils.h"
11 #include "net/spdy/spdy_session.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 
14 namespace {
15 class NetUnitTestEventListener : public testing::EmptyTestEventListener {
16  public:
17   NetUnitTestEventListener() = default;
18   NetUnitTestEventListener(const NetUnitTestEventListener&) = delete;
19   NetUnitTestEventListener& operator=(const NetUnitTestEventListener&) = delete;
20   ~NetUnitTestEventListener() override = default;
21 
OnTestStart(const testing::TestInfo & test_info)22   void OnTestStart(const testing::TestInfo& test_info) override {
23     QuicFlagChecker checker;
24     DCHECK(!quic_flags_saver_);
25     quic_flags_saver_ = std::make_unique<QuicFlagSaverImpl>();
26   }
27 
OnTestEnd(const testing::TestInfo & test_info)28   void OnTestEnd(const testing::TestInfo& test_info) override {
29     quic_flags_saver_.reset();
30   }
31 
32  private:
33   std::unique_ptr<QuicFlagSaverImpl> quic_flags_saver_;
34 };
35 
36 NetTestSuite* g_current_net_test_suite = nullptr;
37 }  // namespace
38 
NetTestSuite(int argc,char ** argv)39 NetTestSuite::NetTestSuite(int argc, char** argv)
40     : TestSuite(argc, argv) {
41   DCHECK(!g_current_net_test_suite);
42   g_current_net_test_suite = this;
43 }
44 
~NetTestSuite()45 NetTestSuite::~NetTestSuite() {
46   DCHECK_EQ(g_current_net_test_suite, this);
47   g_current_net_test_suite = nullptr;
48 }
49 
Initialize()50 void NetTestSuite::Initialize() {
51   TestSuite::Initialize();
52   InitializeTestThread();
53 
54   testing::TestEventListeners& listeners =
55       testing::UnitTest::GetInstance()->listeners();
56   listeners.Append(new NetUnitTestEventListener());
57 }
58 
Shutdown()59 void NetTestSuite::Shutdown() {
60   TestSuite::Shutdown();
61 }
62 
InitializeTestThread()63 void NetTestSuite::InitializeTestThread() {
64   network_change_notifier_ = net::NetworkChangeNotifier::CreateMockIfNeeded();
65 
66   InitializeTestThreadNoNetworkChangeNotifier();
67 }
68 
InitializeTestThreadNoNetworkChangeNotifier()69 void NetTestSuite::InitializeTestThreadNoNetworkChangeNotifier() {
70   host_resolver_proc_ =
71       base::MakeRefCounted<net::RuleBasedHostResolverProc>(nullptr);
72   scoped_host_resolver_proc_.Init(host_resolver_proc_.get());
73   // In case any attempts are made to resolve host names, force them all to
74   // be mapped to localhost.  This prevents DNS queries from being sent in
75   // the process of running these unit tests.
76   host_resolver_proc_->AddRule("*", "127.0.0.1");
77 }
78