Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Side by Side Diff: chrome/browser/net/dns_probe_service_unittest.cc

Issue 13270005: Display DNS probe results. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Fix FilePath initalization on Windows Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/net/dns_probe_service.h" 5 #include "chrome/browser/net/dns_probe_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "chrome/browser/net/dns_probe_job.h" 12 #include "chrome/browser/net/dns_probe_job.h"
13 #include "chrome/common/net/net_error_info.h" 13 #include "chrome/common/net/net_error_info.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
16 using chrome_common_net::DnsProbeResult; 16 using chrome_common_net::DnsProbeStatus;
17 17
18 namespace chrome_browser_net { 18 namespace chrome_browser_net {
19 19
20 namespace { 20 namespace {
21 21
22 class MockDnsProbeJob : public DnsProbeJob { 22 class MockDnsProbeJob : public DnsProbeJob {
23 public: 23 public:
24 MockDnsProbeJob(const CallbackType& callback, 24 MockDnsProbeJob(const CallbackType& callback,
25 DnsProbeJob::Result result) 25 DnsProbeJob::Result result)
26 : weak_factory_(this) { 26 : weak_factory_(this) {
27 MessageLoop::current()->PostTask( 27 MessageLoop::current()->PostTask(
28 FROM_HERE, 28 FROM_HERE,
29 base::Bind(&MockDnsProbeJob::CallCallback, 29 base::Bind(&MockDnsProbeJob::CallCallback,
30 weak_factory_.GetWeakPtr(), 30 weak_factory_.GetWeakPtr(),
31 callback, 31 callback,
32 result)); 32 result));
33 } 33 }
34 34
35 virtual ~MockDnsProbeJob() { } 35 virtual ~MockDnsProbeJob() { }
36 36
37 private: 37 private:
38 void CallCallback(const CallbackType& callback, Result result) { 38 void CallCallback(const CallbackType& callback, Result result) {
39 callback.Run(this, result); 39 callback.Run(this, result);
40 } 40 }
41 41
42 base::WeakPtrFactory<MockDnsProbeJob> weak_factory_; 42 base::WeakPtrFactory<MockDnsProbeJob> weak_factory_;
43 }; 43 };
44 44
45 class TestDnsProbeService : public DnsProbeService { 45 class MockDnsProbeJobFactory : public DnsProbeService::JobFactory {
46 public: 46 public:
47 TestDnsProbeService() 47 MockDnsProbeJobFactory()
48 : DnsProbeService(), 48 : system_result_(DnsProbeJob::MAX_RESULT),
49 system_job_created_(false), 49 public_result_(DnsProbeJob::MAX_RESULT),
50 public_job_created_(false), 50 system_fail_(false),
51 mock_system_result_(DnsProbeJob::SERVERS_UNKNOWN), 51 results_set_(false),
52 mock_public_result_(DnsProbeJob::SERVERS_UNKNOWN), 52 system_created_(false),
53 mock_system_fail_(false) { 53 public_created_(false) { }
54
55 virtual scoped_ptr<DnsProbeJob> CreateSystemJob(
56 const DnsProbeJob::CallbackType& job_callback) OVERRIDE {
57 DCHECK(results_set_);
58
59 system_created_ = true;
60
61 if (system_fail_)
62 return scoped_ptr<DnsProbeJob>(NULL);
63
64 return scoped_ptr<DnsProbeJob>(
65 new MockDnsProbeJob(job_callback, system_result_));
54 } 66 }
55 67
56 virtual ~TestDnsProbeService() { } 68 virtual scoped_ptr<DnsProbeJob> CreatePublicJob(
69 const DnsProbeJob::CallbackType& job_callback) OVERRIDE {
70 DCHECK(results_set_);
57 71
58 void set_mock_results( 72 public_created_ = true;
59 DnsProbeJob::Result mock_system_result, 73
60 DnsProbeJob::Result mock_public_result) { 74 return scoped_ptr<DnsProbeJob>(
61 mock_system_result_ = mock_system_result; 75 new MockDnsProbeJob(job_callback, public_result_));
62 mock_public_result_ = mock_public_result;
63 } 76 }
64 77
65 void set_mock_system_fail(bool mock_system_fail) { 78 void Reset() {
66 mock_system_fail_ = mock_system_fail; 79 system_created_ = false;
80 public_created_ = false;
67 } 81 }
68 82
69 bool jobs_created(void) { 83 void SetResults(
70 return system_job_created_ && public_job_created_; 84 DnsProbeJob::Result system_result,
85 DnsProbeJob::Result public_result,
86 bool system_fail) {
87 system_result_ = system_result;
88 public_result_ = public_result;
89 system_fail_ = system_fail;
90 results_set_ = true;
91 system_created_ = false;
92 public_created_ = false;
71 } 93 }
72 94
73 void ResetJobsCreated() { 95 bool jobs_created() { return system_created_ && public_created_; }
74 system_job_created_ = false;
75 public_job_created_ = false;
76 }
77
78 void MockExpireResults() {
79 ExpireResults();
80 }
81
82 bool system_job_created_;
83 bool public_job_created_;
84 96
85 private: 97 private:
86 // Override methods in DnsProbeService to return mock jobs: 98 DnsProbeJob::Result system_result_;
87 99 DnsProbeJob::Result public_result_;
88 virtual scoped_ptr<DnsProbeJob> CreateSystemProbeJob( 100 bool system_fail_;
89 const DnsProbeJob::CallbackType& job_callback) OVERRIDE { 101 bool results_set_;
90 if (mock_system_fail_) 102 bool system_created_;
91 return scoped_ptr<DnsProbeJob>(NULL); 103 bool public_created_;
92
93 system_job_created_ = true;
94 return scoped_ptr<DnsProbeJob>(
95 new MockDnsProbeJob(job_callback,
96 mock_system_result_));
97 }
98
99 virtual scoped_ptr<DnsProbeJob> CreatePublicProbeJob(
100 const DnsProbeJob::CallbackType& job_callback) OVERRIDE {
101 public_job_created_ = true;
102 return scoped_ptr<DnsProbeJob>(
103 new MockDnsProbeJob(job_callback,
104 mock_public_result_));
105 }
106
107 DnsProbeJob::Result mock_system_result_;
108 DnsProbeJob::Result mock_public_result_;
109 bool mock_system_fail_;
110 }; 104 };
111 105
112 class DnsProbeServiceTest : public testing::Test { 106 class DnsProbeServiceTest : public testing::Test {
113 public: 107 public:
114 DnsProbeServiceTest() 108 DnsProbeServiceTest()
115 : callback_called_(false), 109 : callback_called_(false),
116 callback_result_(chrome_common_net::DNS_PROBE_UNKNOWN) { 110 callback_result_(chrome_common_net::DNS_PROBE_MAX) {
111 job_factory_ = new MockDnsProbeJobFactory();
112 service_ = DnsProbeService::CreateDefaultWithJobFactory(
113 scoped_ptr<DnsProbeService::JobFactory>(job_factory_));
114 }
115
116 virtual ~DnsProbeServiceTest() {
117 // job_factory_ is owned by service_, which will delete it for us.
118 delete service_;
117 } 119 }
118 120
119 void Probe() { 121 void Probe() {
120 service_.ProbeDns(base::Bind(&DnsProbeServiceTest::ProbeCallback, 122 service_->ProbeDns(base::Bind(&DnsProbeServiceTest::ProbeCallback,
121 base::Unretained(this))); 123 base::Unretained(this)));
122 } 124 }
123 125
124 void RunUntilIdle() { 126 void RunUntilIdle() {
125 base::RunLoop run_loop; 127 base::RunLoop run_loop;
126 run_loop.RunUntilIdle(); 128 run_loop.RunUntilIdle();
127 } 129 }
128 130
129 void Reset() { 131 void Reset() {
130 service_.ResetJobsCreated();
131 callback_called_ = false; 132 callback_called_ = false;
133 job_factory_->Reset();
132 } 134 }
133 135
134 MessageLoopForIO message_loop_; 136 void SetJobResults(
135 TestDnsProbeService service_; 137 DnsProbeJob::Result system_result,
136 bool callback_called_; 138 DnsProbeJob::Result public_result,
137 DnsProbeResult callback_result_; 139 bool system_fail) {
140 job_factory_->SetResults(system_result, public_result, system_fail);
141 }
142
143 void ExpireServiceResult() {
144 service_->ExpireResultForTesting();
145 }
146
147 bool jobs_created() { return job_factory_->jobs_created(); }
148
149 bool callback_called() { return callback_called_; }
150 DnsProbeStatus callback_result() { return callback_result_; }
138 151
139 private: 152 private:
140 void ProbeCallback(DnsProbeResult result) { 153 void ProbeCallback(DnsProbeStatus result) {
141 callback_called_ = true; 154 callback_called_ = true;
142 callback_result_ = result; 155 callback_result_ = result;
143 } 156 }
157
158 // Owned by service_.
159 MockDnsProbeJobFactory* job_factory_;
160 DnsProbeService* service_;
161 bool callback_called_;
162 DnsProbeStatus callback_result_;
163 MessageLoopForIO message_loop_;
144 }; 164 };
145 165
146 TEST_F(DnsProbeServiceTest, Null) { 166 TEST_F(DnsProbeServiceTest, Null) {
147 } 167 }
148 168
149 TEST_F(DnsProbeServiceTest, Probe) { 169 TEST_F(DnsProbeServiceTest, Probe) {
150 service_.set_mock_results(DnsProbeJob::SERVERS_CORRECT, 170 SetJobResults(DnsProbeJob::SERVERS_CORRECT,
151 DnsProbeJob::SERVERS_CORRECT); 171 DnsProbeJob::SERVERS_CORRECT,
172 false);
152 173
153 Probe(); 174 Probe();
154 EXPECT_TRUE(service_.jobs_created()); 175 EXPECT_TRUE(jobs_created());
155 EXPECT_FALSE(callback_called_); 176 EXPECT_FALSE(callback_called());
156 177
157 RunUntilIdle(); 178 RunUntilIdle();
158 EXPECT_TRUE(callback_called_); 179 EXPECT_TRUE(callback_called());
159 EXPECT_EQ(chrome_common_net::DNS_PROBE_NXDOMAIN, callback_result_); 180 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, callback_result());
160 } 181 }
161 182
162 TEST_F(DnsProbeServiceTest, Cache) { 183 TEST_F(DnsProbeServiceTest, Cache) {
163 service_.set_mock_results(DnsProbeJob::SERVERS_CORRECT, 184 SetJobResults(DnsProbeJob::SERVERS_CORRECT,
164 DnsProbeJob::SERVERS_CORRECT); 185 DnsProbeJob::SERVERS_CORRECT,
186 false);
165 187
166 Probe(); 188 Probe();
167 RunUntilIdle(); 189 RunUntilIdle();
168 Reset();
169 190
170 // Cached NXDOMAIN result should persist. 191 // Cached NXDOMAIN result should persist.
171 192
193 Reset();
194
172 Probe(); 195 Probe();
173 EXPECT_FALSE(service_.jobs_created()); 196 EXPECT_FALSE(jobs_created());
174 197
175 RunUntilIdle(); 198 RunUntilIdle();
176 EXPECT_TRUE(callback_called_); 199 EXPECT_TRUE(callback_called());
177 EXPECT_EQ(chrome_common_net::DNS_PROBE_NXDOMAIN, callback_result_); 200 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, callback_result());
178 } 201 }
179 202
180 TEST_F(DnsProbeServiceTest, Expired) { 203 TEST_F(DnsProbeServiceTest, Expired) {
181 service_.set_mock_results(DnsProbeJob::SERVERS_CORRECT, 204 SetJobResults(DnsProbeJob::SERVERS_CORRECT,
182 DnsProbeJob::SERVERS_CORRECT); 205 DnsProbeJob::SERVERS_CORRECT,
206 false);
183 207
184 Probe(); 208 Probe();
185 EXPECT_TRUE(service_.jobs_created()); 209 EXPECT_TRUE(jobs_created());
186 210
187 RunUntilIdle(); 211 RunUntilIdle();
188 EXPECT_TRUE(callback_called_); 212 EXPECT_TRUE(callback_called());
189 EXPECT_EQ(chrome_common_net::DNS_PROBE_NXDOMAIN, callback_result_); 213 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, callback_result());
190 214
215 ExpireServiceResult();
191 Reset(); 216 Reset();
192 217
193 service_.MockExpireResults();
194
195 Probe(); 218 Probe();
196 EXPECT_TRUE(service_.jobs_created()); 219 EXPECT_TRUE(jobs_created());
197 220
198 RunUntilIdle(); 221 RunUntilIdle();
199 EXPECT_TRUE(callback_called_); 222 EXPECT_TRUE(callback_called());
200 EXPECT_EQ(chrome_common_net::DNS_PROBE_NXDOMAIN, callback_result_); 223 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_NXDOMAIN, callback_result());
201 } 224 }
202 225
203 TEST_F(DnsProbeServiceTest, SystemFail) { 226 TEST_F(DnsProbeServiceTest, SystemFail) {
204 service_.set_mock_results(DnsProbeJob::SERVERS_CORRECT, 227 SetJobResults(DnsProbeJob::SERVERS_CORRECT,
205 DnsProbeJob::SERVERS_CORRECT); 228 DnsProbeJob::SERVERS_CORRECT,
206 service_.set_mock_system_fail(true); 229 true);
207 230
208 Probe(); 231 Probe();
209 EXPECT_TRUE(callback_called_); 232 EXPECT_TRUE(callback_called());
210 EXPECT_EQ(chrome_common_net::DNS_PROBE_UNKNOWN, callback_result_); 233 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_UNKNOWN, callback_result());
211 234
212 Reset(); 235 Reset();
213 236
214 RunUntilIdle(); 237 RunUntilIdle();
215 EXPECT_FALSE(callback_called_); 238 EXPECT_FALSE(callback_called());
216 } 239 }
217 240
218 } // namespace 241 } // namespace
219 242
220 } // namespace chrome_browser_net 243 } // namespace chrome_browser_net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698