| Index: chrome/browser/net/dns_probe_runner_unittest.cc | 
| diff --git a/chrome/browser/net/dns_probe_runner_unittest.cc b/chrome/browser/net/dns_probe_runner_unittest.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..2b1e59131638c329cc26d2117339d2805bcbb84b | 
| --- /dev/null | 
| +++ b/chrome/browser/net/dns_probe_runner_unittest.cc | 
| @@ -0,0 +1,95 @@ | 
| +// Copyright (c) 2013 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 "base/bind.h" | 
| +#include "base/memory/weak_ptr.h" | 
| +#include "base/message_loop.h" | 
| +#include "base/run_loop.h" | 
| +#include "chrome/browser/net/dns_probe_runner.h" | 
| +#include "chrome/browser/net/dns_probe_test_util.h" | 
| +#include "content/public/test/test_browser_thread_bundle.h" | 
| +#include "net/dns/dns_client.h" | 
| +#include "testing/gtest/include/gtest/gtest.h" | 
| + | 
| +using base::MessageLoopForIO; | 
| +using base::RunLoop; | 
| +using content::TestBrowserThreadBundle; | 
| +using net::MockDnsClientRule; | 
| + | 
| +namespace chrome_browser_net { | 
| + | 
| +namespace { | 
| + | 
| +class TestDnsProbeRunnerCallback { | 
| + public: | 
| +  TestDnsProbeRunnerCallback() | 
| +      : callback_(base::Bind(&TestDnsProbeRunnerCallback::OnCalled, | 
| +                             base::Unretained(this))), | 
| +        called_(false) {} | 
| + | 
| +  const base::Closure& callback() const { return callback_; } | 
| +  bool called() const { return called_; } | 
| + | 
| + private: | 
| +  void OnCalled() { | 
| +    EXPECT_FALSE(called_); | 
| +    called_ = true; | 
| +  } | 
| + | 
| +  base::Closure callback_; | 
| +  bool called_; | 
| +}; | 
| + | 
| +class DnsProbeRunnerTest : public testing::Test { | 
| + protected: | 
| +  void RunTest(MockDnsClientRule::Result query_result, | 
| +               DnsProbeRunner::Result expected_probe_result); | 
| + | 
| +  TestBrowserThreadBundle bundle_; | 
| +  DnsProbeRunner runner_; | 
| +}; | 
| + | 
| +void DnsProbeRunnerTest::RunTest( | 
| +    MockDnsClientRule::Result query_result, | 
| +    DnsProbeRunner::Result expected_probe_result) { | 
| +  TestDnsProbeRunnerCallback callback; | 
| + | 
| +  runner_.SetClient(CreateMockDnsClientForProbes(query_result)); | 
| +  runner_.RunProbe(callback.callback()); | 
| +  EXPECT_TRUE(runner_.IsRunning()); | 
| + | 
| +  RunLoop().RunUntilIdle(); | 
| +  EXPECT_FALSE(runner_.IsRunning()); | 
| +  EXPECT_TRUE(callback.called()); | 
| +  EXPECT_EQ(expected_probe_result, runner_.result()); | 
| +} | 
| + | 
| +TEST_F(DnsProbeRunnerTest, Probe_OK) { | 
| +  RunTest(MockDnsClientRule::OK, DnsProbeRunner::CORRECT); | 
| +} | 
| + | 
| +TEST_F(DnsProbeRunnerTest, Probe_EMPTY) { | 
| +  RunTest(MockDnsClientRule::EMPTY, DnsProbeRunner::INCORRECT); | 
| +} | 
| + | 
| +TEST_F(DnsProbeRunnerTest, Probe_TIMEOUT) { | 
| +  RunTest(MockDnsClientRule::TIMEOUT, DnsProbeRunner::UNREACHABLE); | 
| +} | 
| + | 
| +TEST_F(DnsProbeRunnerTest, Probe_FAIL_ASYNC) { | 
| +  RunTest(MockDnsClientRule::FAIL_ASYNC, DnsProbeRunner::INCORRECT); | 
| +} | 
| + | 
| +TEST_F(DnsProbeRunnerTest, Probe_FAIL_SYNC) { | 
| +  RunTest(MockDnsClientRule::FAIL_SYNC, DnsProbeRunner::INCORRECT); | 
| +} | 
| + | 
| +TEST_F(DnsProbeRunnerTest, TwoProbes) { | 
| +  RunTest(MockDnsClientRule::OK, DnsProbeRunner::CORRECT); | 
| +  RunTest(MockDnsClientRule::EMPTY, DnsProbeRunner::INCORRECT); | 
| +} | 
| + | 
| +}  // namespace | 
| + | 
| +}  // namespace chrome_browser_net | 
|  |