summaryrefslogtreecommitdiffstats
path: root/chrome/browser/net/dns_probe_service_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/net/dns_probe_service_unittest.cc')
-rw-r--r--chrome/browser/net/dns_probe_service_unittest.cc104
1 files changed, 68 insertions, 36 deletions
diff --git a/chrome/browser/net/dns_probe_service_unittest.cc b/chrome/browser/net/dns_probe_service_unittest.cc
index 06aec2c..62e886e 100644
--- a/chrome/browser/net/dns_probe_service_unittest.cc
+++ b/chrome/browser/net/dns_probe_service_unittest.cc
@@ -5,6 +5,8 @@
#include "chrome/browser/net/dns_probe_service.h"
#include "base/bind.h"
+#include "base/compiler_specific.h"
+#include "base/memory/weak_ptr.h"
#include "base/message_loop.h"
#include "base/run_loop.h"
#include "chrome/browser/net/dns_probe_job.h"
@@ -16,14 +18,24 @@ namespace {
class MockDnsProbeJob : public DnsProbeJob {
public:
- MockDnsProbeJob(const CallbackType& callback,
- Result result) {
+ MockDnsProbeJob(const CallbackType& callback, Result result)
+ : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
MessageLoop::current()->PostTask(
FROM_HERE,
- base::Bind(callback, base::Unretained(this), result));
+ base::Bind(&MockDnsProbeJob::CallCallback,
+ weak_factory_.GetWeakPtr(),
+ callback,
+ result));
}
virtual ~MockDnsProbeJob() { }
+
+ private:
+ void CallCallback(const CallbackType& callback, Result result) {
+ callback.Run(this, result);
+ }
+
+ base::WeakPtrFactory<MockDnsProbeJob> weak_factory_;
};
class TestDnsProbeService : public DnsProbeService {
@@ -33,18 +45,32 @@ class TestDnsProbeService : public DnsProbeService {
system_job_created_(false),
public_job_created_(false),
mock_system_result_(DnsProbeJob::SERVERS_UNKNOWN),
- mock_public_result_(DnsProbeJob::SERVERS_UNKNOWN) {
+ mock_public_result_(DnsProbeJob::SERVERS_UNKNOWN),
+ mock_system_fail_(false) {
}
virtual ~TestDnsProbeService() { }
- void SetMockJobResults(
+ void set_mock_results(
DnsProbeJob::Result mock_system_result,
DnsProbeJob::Result mock_public_result) {
mock_system_result_ = mock_system_result;
mock_public_result_ = mock_public_result;
}
+ void set_mock_system_fail(bool mock_system_fail) {
+ mock_system_fail_ = mock_system_fail;
+ }
+
+ bool jobs_created(void) {
+ return system_job_created_ && public_job_created_;
+ }
+
+ void ResetJobsCreated() {
+ system_job_created_ = false;
+ public_job_created_ = false;
+ }
+
void MockExpireResults() {
ExpireResults();
}
@@ -57,6 +83,9 @@ class TestDnsProbeService : public DnsProbeService {
virtual scoped_ptr<DnsProbeJob> CreateSystemProbeJob(
const DnsProbeJob::CallbackType& job_callback) OVERRIDE {
+ if (mock_system_fail_)
+ return scoped_ptr<DnsProbeJob>(NULL);
+
system_job_created_ = true;
return scoped_ptr<DnsProbeJob>(
new MockDnsProbeJob(job_callback,
@@ -73,6 +102,7 @@ class TestDnsProbeService : public DnsProbeService {
DnsProbeJob::Result mock_system_result_;
DnsProbeJob::Result mock_public_result_;
+ bool mock_system_fail_;
};
class DnsProbeServiceTest : public testing::Test {
@@ -82,14 +112,9 @@ class DnsProbeServiceTest : public testing::Test {
callback_result_(DnsProbeService::PROBE_UNKNOWN) {
}
- void SetMockJobResults(DnsProbeJob::Result mock_system_result,
- DnsProbeJob::Result mock_public_result) {
- service_.SetMockJobResults(mock_system_result, mock_public_result);
- }
-
void Probe() {
service_.ProbeDns(base::Bind(&DnsProbeServiceTest::ProbeCallback,
- base::Unretained(this)));
+ base::Unretained(this)));
}
void RunUntilIdle() {
@@ -97,8 +122,9 @@ class DnsProbeServiceTest : public testing::Test {
run_loop.RunUntilIdle();
}
- void ExpireResults() {
- service_.MockExpireResults();
+ void Reset() {
+ service_.ResetJobsCreated();
+ callback_called_ = false;
}
MessageLoopForIO message_loop_;
@@ -117,11 +143,11 @@ TEST_F(DnsProbeServiceTest, Null) {
}
TEST_F(DnsProbeServiceTest, Probe) {
- SetMockJobResults(DnsProbeJob::SERVERS_CORRECT, DnsProbeJob::SERVERS_CORRECT);
+ service_.set_mock_results(DnsProbeJob::SERVERS_CORRECT,
+ DnsProbeJob::SERVERS_CORRECT);
Probe();
- EXPECT_TRUE(service_.system_job_created_);
- EXPECT_TRUE(service_.public_job_created_);
+ EXPECT_TRUE(service_.jobs_created());
EXPECT_FALSE(callback_called_);
RunUntilIdle();
@@ -130,23 +156,17 @@ TEST_F(DnsProbeServiceTest, Probe) {
}
TEST_F(DnsProbeServiceTest, Cache) {
- SetMockJobResults(DnsProbeJob::SERVERS_CORRECT, DnsProbeJob::SERVERS_CORRECT);
+ service_.set_mock_results(DnsProbeJob::SERVERS_CORRECT,
+ DnsProbeJob::SERVERS_CORRECT);
Probe();
- EXPECT_TRUE(service_.system_job_created_);
- EXPECT_TRUE(service_.public_job_created_);
-
RunUntilIdle();
- EXPECT_TRUE(callback_called_);
- EXPECT_EQ(DnsProbeService::PROBE_NXDOMAIN, callback_result_);
+ Reset();
- callback_called_ = false;
- service_.system_job_created_ = false;
- service_.public_job_created_ = false;
+ // Cached NXDOMAIN result should persist.
Probe();
- EXPECT_FALSE(service_.system_job_created_);
- EXPECT_FALSE(service_.public_job_created_);
+ EXPECT_FALSE(service_.jobs_created());
RunUntilIdle();
EXPECT_TRUE(callback_called_);
@@ -154,31 +174,43 @@ TEST_F(DnsProbeServiceTest, Cache) {
}
TEST_F(DnsProbeServiceTest, Expired) {
- SetMockJobResults(DnsProbeJob::SERVERS_CORRECT, DnsProbeJob::SERVERS_CORRECT);
+ service_.set_mock_results(DnsProbeJob::SERVERS_CORRECT,
+ DnsProbeJob::SERVERS_CORRECT);
Probe();
- EXPECT_TRUE(service_.system_job_created_);
- EXPECT_TRUE(service_.public_job_created_);
+ EXPECT_TRUE(service_.jobs_created());
RunUntilIdle();
EXPECT_TRUE(callback_called_);
EXPECT_EQ(DnsProbeService::PROBE_NXDOMAIN, callback_result_);
- callback_called_ = false;
- service_.system_job_created_ = false;
- service_.public_job_created_ = false;
+ Reset();
- ExpireResults();
+ service_.MockExpireResults();
Probe();
- EXPECT_TRUE(service_.system_job_created_);
- EXPECT_TRUE(service_.public_job_created_);
+ EXPECT_TRUE(service_.jobs_created());
RunUntilIdle();
EXPECT_TRUE(callback_called_);
EXPECT_EQ(DnsProbeService::PROBE_NXDOMAIN, callback_result_);
}
+TEST_F(DnsProbeServiceTest, SystemFail) {
+ service_.set_mock_results(DnsProbeJob::SERVERS_CORRECT,
+ DnsProbeJob::SERVERS_CORRECT);
+ service_.set_mock_system_fail(true);
+
+ Probe();
+ EXPECT_TRUE(callback_called_);
+ EXPECT_EQ(DnsProbeService::PROBE_UNKNOWN, callback_result_);
+
+ Reset();
+
+ RunUntilIdle();
+ EXPECT_FALSE(callback_called_);
+}
+
} // namespace
} // namespace chrome_browser_net