dns_probe_runner_unittest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
1// Copyright 2013 The Chromium Authors. All rights reserved.
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 "base/bind.h"
6#include "base/memory/weak_ptr.h"
7#include "base/message_loop.h"
8#include "base/run_loop.h"
9#include "chrome/browser/net/dns_probe_runner.h"
10#include "chrome/browser/net/dns_probe_test_util.h"
11#include "content/public/test/test_browser_thread_bundle.h"
12#include "net/dns/dns_client.h"
13#include "testing/gtest/include/gtest/gtest.h"
14
15using base::MessageLoopForIO;
16using base::RunLoop;
17using content::TestBrowserThreadBundle;
18using net::MockDnsClientRule;
19
20namespace chrome_browser_net {
21
22namespace {
23
24class TestDnsProbeRunnerCallback {
25 public:
26  TestDnsProbeRunnerCallback()
27      : callback_(base::Bind(&TestDnsProbeRunnerCallback::OnCalled,
28                             base::Unretained(this))),
29        called_(false) {}
30
31  const base::Closure& callback() const { return callback_; }
32  bool called() const { return called_; }
33
34 private:
35  void OnCalled() {
36    EXPECT_FALSE(called_);
37    called_ = true;
38  }
39
40  base::Closure callback_;
41  bool called_;
42};
43
44class DnsProbeRunnerTest : public testing::Test {
45 protected:
46  void RunTest(MockDnsClientRule::Result query_result,
47               DnsProbeRunner::Result expected_probe_result);
48
49  TestBrowserThreadBundle bundle_;
50  DnsProbeRunner runner_;
51};
52
53void DnsProbeRunnerTest::RunTest(
54    MockDnsClientRule::Result query_result,
55    DnsProbeRunner::Result expected_probe_result) {
56  TestDnsProbeRunnerCallback callback;
57
58  runner_.SetClient(CreateMockDnsClientForProbes(query_result));
59  runner_.RunProbe(callback.callback());
60  EXPECT_TRUE(runner_.IsRunning());
61
62  RunLoop().RunUntilIdle();
63  EXPECT_FALSE(runner_.IsRunning());
64  EXPECT_TRUE(callback.called());
65  EXPECT_EQ(expected_probe_result, runner_.result());
66}
67
68TEST_F(DnsProbeRunnerTest, Probe_OK) {
69  RunTest(MockDnsClientRule::OK, DnsProbeRunner::CORRECT);
70}
71
72TEST_F(DnsProbeRunnerTest, Probe_EMPTY) {
73  RunTest(MockDnsClientRule::EMPTY, DnsProbeRunner::INCORRECT);
74}
75
76TEST_F(DnsProbeRunnerTest, Probe_TIMEOUT) {
77  RunTest(MockDnsClientRule::TIMEOUT, DnsProbeRunner::UNREACHABLE);
78}
79
80TEST_F(DnsProbeRunnerTest, Probe_FAIL_ASYNC) {
81  RunTest(MockDnsClientRule::FAIL_ASYNC, DnsProbeRunner::INCORRECT);
82}
83
84TEST_F(DnsProbeRunnerTest, Probe_FAIL_SYNC) {
85  RunTest(MockDnsClientRule::FAIL_SYNC, DnsProbeRunner::INCORRECT);
86}
87
88TEST_F(DnsProbeRunnerTest, TwoProbes) {
89  RunTest(MockDnsClientRule::OK, DnsProbeRunner::CORRECT);
90  RunTest(MockDnsClientRule::EMPTY, DnsProbeRunner::INCORRECT);
91}
92
93}  // namespace
94
95}  // namespace chrome_browser_net
96