17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 27dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 37dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// found in the LICENSE file. 47dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/bind.h" 67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/memory/weak_ptr.h" 79ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/run_loop.h" 97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/net/dns_probe_runner.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/net/dns_probe_test_util.h" 117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h" 127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/dns/dns_client.h" 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochusing base::MessageLoopForIO; 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochusing base::RunLoop; 177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochusing content::TestBrowserThreadBundle; 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing net::DnsClient; 19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing net::DnsConfig; 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochusing net::MockDnsClientRule; 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace chrome_browser_net { 237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace { 257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass TestDnsProbeRunnerCallback { 277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch public: 287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch TestDnsProbeRunnerCallback() 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : callback_(base::Bind(&TestDnsProbeRunnerCallback::OnCalled, 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Unretained(this))), 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch called_(false) {} 327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::Closure& callback() const { return callback_; } 347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool called() const { return called_; } 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch private: 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void OnCalled() { 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(called_); 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch called_ = true; 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Closure callback_; 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool called_; 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass DnsProbeRunnerTest : public testing::Test { 477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch protected: 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void RunTest(MockDnsClientRule::Result query_result, 497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DnsProbeRunner::Result expected_probe_result); 507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch TestBrowserThreadBundle bundle_; 527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DnsProbeRunner runner_; 537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}; 547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid DnsProbeRunnerTest::RunTest( 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch MockDnsClientRule::Result query_result, 577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DnsProbeRunner::Result expected_probe_result) { 587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch TestDnsProbeRunnerCallback callback; 597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch runner_.SetClient(CreateMockDnsClientForProbes(query_result)); 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch runner_.RunProbe(callback.callback()); 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(runner_.IsRunning()); 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RunLoop().RunUntilIdle(); 657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_FALSE(runner_.IsRunning()); 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_TRUE(callback.called()); 677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch EXPECT_EQ(expected_probe_result, runner_.result()); 687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 707dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(DnsProbeRunnerTest, Probe_OK) { 717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RunTest(MockDnsClientRule::OK, DnsProbeRunner::CORRECT); 727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 747dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(DnsProbeRunnerTest, Probe_EMPTY) { 757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RunTest(MockDnsClientRule::EMPTY, DnsProbeRunner::INCORRECT); 767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 787dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(DnsProbeRunnerTest, Probe_TIMEOUT) { 797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RunTest(MockDnsClientRule::TIMEOUT, DnsProbeRunner::UNREACHABLE); 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 82ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochTEST_F(DnsProbeRunnerTest, Probe_FAIL) { 83ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RunTest(MockDnsClientRule::FAIL, DnsProbeRunner::INCORRECT); 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(DnsProbeRunnerTest, TwoProbes) { 877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RunTest(MockDnsClientRule::OK, DnsProbeRunner::CORRECT); 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RunTest(MockDnsClientRule::EMPTY, DnsProbeRunner::INCORRECT); 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 91ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochTEST_F(DnsProbeRunnerTest, InvalidDnsConfig) { 92ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<DnsClient> dns_client(DnsClient::CreateClient(NULL)); 93ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DnsConfig empty_config; 94ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch dns_client->SetConfig(empty_config); 95ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ASSERT_EQ(NULL, dns_client->GetTransactionFactory()); 96ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch runner_.SetClient(dns_client.Pass()); 97ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 98ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch TestDnsProbeRunnerCallback callback; 99ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 100ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch runner_.RunProbe(callback.callback()); 101ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(runner_.IsRunning()); 102ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch RunLoop().RunUntilIdle(); 104ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_FALSE(runner_.IsRunning()); 105ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_TRUE(callback.called()); 106ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch EXPECT_EQ(DnsProbeRunner::UNKNOWN, runner_.result()); 107ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} 108ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch 1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace 1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace chrome_browser_net 112