summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net/connection_tester_unittest.cc
diff options
context:
space:
mode:
authoreroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-04 20:41:24 +0000
committereroman@chromium.org <eroman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-04 20:41:24 +0000
commit483bf127599968f88d42f4ae6fb62b4c30d4aba7 (patch)
tree78ef31c7971999504a85d15a1347c6c2b113258f /chrome/browser/net/connection_tester_unittest.cc
parentdffed056d438c98bad557de56e6da549c6912ca5 (diff)
downloadchromium_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.cc138
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
+