diff options
author | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-04 20:41:24 +0000 |
---|---|---|
committer | eroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-04 20:41:24 +0000 |
commit | 483bf127599968f88d42f4ae6fb62b4c30d4aba7 (patch) | |
tree | 78ef31c7971999504a85d15a1347c6c2b113258f /chrome/browser/net/connection_tester_unittest.cc | |
parent | dffed056d438c98bad557de56e6da549c6912ca5 (diff) | |
download | chromium_src-483bf127599968f88d42f4ae6fb62b4c30d4aba7.zip chromium_src-483bf127599968f88d42f4ae6fb62b4c30d4aba7.tar.gz chromium_src-483bf127599968f88d42f4ae6fb62b4c30d4aba7.tar.bz2 |
Add a tool for testing your network setup.
It runs a series of experiments using alternate network settings, to try and discover what the misconfiguration is.
DESIGN=http://docs.google.com/Doc?id=dfhcnb2v_22cjtdznvg
TEST=ConnectionTesterTest.*
Review URL: http://codereview.chromium.org/1937001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@46387 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/net/connection_tester_unittest.cc')
-rw-r--r-- | chrome/browser/net/connection_tester_unittest.cc | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/chrome/browser/net/connection_tester_unittest.cc b/chrome/browser/net/connection_tester_unittest.cc new file mode 100644 index 0000000..b9cf2ca --- /dev/null +++ b/chrome/browser/net/connection_tester_unittest.cc @@ -0,0 +1,138 @@ +// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/net/connection_tester.h" + +#include "net/base/mock_host_resolver.h" +#include "net/url_request/url_request_unittest.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "testing/platform_test.h" + +namespace { + +// This is a testing delegate which simply counts how many times each of +// the delegate's methods were invoked. +class ConnectionTesterDelegate : public ConnectionTester::Delegate { + public: + ConnectionTesterDelegate() + : start_connection_test_suite_count_(0), + start_connection_test_experiment_count_(0), + completed_connection_test_experiment_count_(0), + completed_connection_test_suite_count_(0) { + } + + virtual void OnStartConnectionTestSuite() { + start_connection_test_suite_count_++; + } + + virtual void OnStartConnectionTestExperiment( + const ConnectionTester::Experiment& experiment) { + start_connection_test_experiment_count_++; + } + + virtual void OnCompletedConnectionTestExperiment( + const ConnectionTester::Experiment& experiment, + int result) { + completed_connection_test_experiment_count_++; + } + + virtual void OnCompletedConnectionTestSuite() { + completed_connection_test_suite_count_++; + MessageLoop::current()->Quit(); + } + + int start_connection_test_suite_count() const { + return start_connection_test_suite_count_; + } + + int start_connection_test_experiment_count() const { + return start_connection_test_experiment_count_; + } + + int completed_connection_test_experiment_count() const { + return completed_connection_test_experiment_count_; + } + + int completed_connection_test_suite_count() const { + return completed_connection_test_suite_count_; + } + + private: + int start_connection_test_suite_count_; + int start_connection_test_experiment_count_; + int completed_connection_test_experiment_count_; + int completed_connection_test_suite_count_; +}; + +// The test fixture is responsible for: +// - Making sure each test has an IO loop running +// - Catching any host resolve requests and mapping them to localhost +// (so the test doesn't use any external network dependencies). +class ConnectionTesterTest : public PlatformTest { + public: + ConnectionTesterTest() : message_loop_(MessageLoop::TYPE_IO) { + scoped_refptr<net::RuleBasedHostResolverProc> catchall_resolver = + new net::RuleBasedHostResolverProc(NULL); + + catchall_resolver->AddRule("*", "127.0.0.1"); + + scoped_host_resolver_proc_.Init(catchall_resolver); + } + + protected: + net::ScopedDefaultHostResolverProc scoped_host_resolver_proc_; + ConnectionTesterDelegate test_delegate_; + MessageLoop message_loop_; +}; + +TEST_F(ConnectionTesterTest, RunAllTests) { + scoped_refptr<HTTPTestServer> server = + HTTPTestServer::CreateForkingServer(L"net/data/url_request_unittest/"); + + ConnectionTester tester(&test_delegate_); + + // Start the test suite on URL "echoall". + // TODO(eroman): Is this URL right? + GURL url = server->TestServerPage("echoall"); + tester.RunAllTests(url); + + // Wait for all the tests to complete. + MessageLoop::current()->Run(); + + const int kNumExperiments = + ConnectionTester::PROXY_EXPERIMENT_COUNT * + ConnectionTester::HOST_RESOLVER_EXPERIMENT_COUNT; + + EXPECT_EQ(1, test_delegate_.start_connection_test_suite_count()); + EXPECT_EQ(kNumExperiments, + test_delegate_.start_connection_test_experiment_count()); + EXPECT_EQ(kNumExperiments, + test_delegate_.completed_connection_test_experiment_count()); + EXPECT_EQ(1, test_delegate_.completed_connection_test_suite_count()); +} + +TEST_F(ConnectionTesterTest, DeleteWhileInProgress) { + scoped_refptr<HTTPTestServer> server = + HTTPTestServer::CreateForkingServer(L"net/data/url_request_unittest/"); + + ConnectionTester tester(&test_delegate_); + + // Start the test suite on URL "echoall". + // TODO(eroman): Is this URL right? + GURL url = server->TestServerPage("echoall"); + tester.RunAllTests(url); + + MessageLoop::current()->RunAllPending(); + + EXPECT_EQ(1, test_delegate_.start_connection_test_suite_count()); + EXPECT_EQ(1, test_delegate_.start_connection_test_experiment_count()); + EXPECT_EQ(0, test_delegate_.completed_connection_test_experiment_count()); + EXPECT_EQ(0, test_delegate_.completed_connection_test_suite_count()); + + // Note here that we don't wait for the tests to complete + // (so |tester| will be deleted upon leaving this scope. +} + +} // namespace + |