1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/test/net_test_suite.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/message_loop/message_loop.h" 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/base/network_change_notifier.h" 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/http/http_stream_factory.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/spdy/spdy_session.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(USE_NSS) || defined(OS_IOS) 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "net/ocsp/nss_ocsp.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class StaticReset : public ::testing::EmptyTestEventListener { 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnTestStart(const ::testing::TestInfo& test_info) OVERRIDE { 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::HttpStreamFactory::ResetStaticSettingsToInit(); 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)NetTestSuite::NetTestSuite(int argc, char** argv) 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : TestSuite(argc, argv) { 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)NetTestSuite::NetTestSuite(int argc, char** argv, 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool create_at_exit_manager) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) : TestSuite(argc, argv, create_at_exit_manager) { 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)NetTestSuite::~NetTestSuite() {} 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void NetTestSuite::Initialize() { 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestSuite::Initialize(); 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ::testing::UnitTest::GetInstance()->listeners().Append(new StaticReset()); 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InitializeTestThread(); 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void NetTestSuite::Shutdown() { 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(USE_NSS) || defined(OS_IOS) 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::ShutdownNSSHttpIO(); 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // We want to destroy this here before the TestSuite continues to tear down 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // the environment. 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message_loop_.reset(); 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TestSuite::Shutdown(); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void NetTestSuite::InitializeTestThread() { 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) network_change_notifier_.reset(net::NetworkChangeNotifier::CreateMock()); 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) InitializeTestThreadNoNetworkChangeNotifier(); 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void NetTestSuite::InitializeTestThreadNoNetworkChangeNotifier() { 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host_resolver_proc_ = new net::RuleBasedHostResolverProc(NULL); 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_host_resolver_proc_.Init(host_resolver_proc_.get()); 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // In case any attempts are made to resolve host names, force them all to 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // be mapped to localhost. This prevents DNS queries from being sent in 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // the process of running these unit tests. 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) host_resolver_proc_->AddRule("*", "127.0.0.1"); 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message_loop_.reset(new base::MessageLoopForIO()); 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 68