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

Side by Side Diff: net/dns/mapped_host_resolver_unittest.cc

Issue 2116983002: Change HostResolver::Resolve() to take an std::unique_ptr<Request>* rather than a RequestHandle* (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: http_stream_factory_impl_job_controller_unittest RequestHandle* to unique_ptr Created 4 years, 4 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 "net/dns/mapped_host_resolver.h" 5 #include "net/dns/mapped_host_resolver.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "net/base/address_list.h" 9 #include "net/base/address_list.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
(...skipping 11 matching lines...) Expand all
22 22
23 namespace { 23 namespace {
24 24
25 std::string FirstAddress(const AddressList& address_list) { 25 std::string FirstAddress(const AddressList& address_list) {
26 if (address_list.empty()) 26 if (address_list.empty())
27 return std::string(); 27 return std::string();
28 return address_list.front().ToString(); 28 return address_list.front().ToString();
29 } 29 }
30 30
31 TEST(MappedHostResolverTest, Inclusion) { 31 TEST(MappedHostResolverTest, Inclusion) {
32 // Outstanding request.
33 std::unique_ptr<HostResolver::Request> request;
32 // Create a mock host resolver, with specific hostname to IP mappings. 34 // Create a mock host resolver, with specific hostname to IP mappings.
33 std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver()); 35 std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
34 resolver_impl->rules()->AddSimulatedFailure("*google.com"); 36 resolver_impl->rules()->AddSimulatedFailure("*google.com");
35 resolver_impl->rules()->AddRule("baz.com", "192.168.1.5"); 37 resolver_impl->rules()->AddRule("baz.com", "192.168.1.5");
36 resolver_impl->rules()->AddRule("foo.com", "192.168.1.8"); 38 resolver_impl->rules()->AddRule("foo.com", "192.168.1.8");
37 resolver_impl->rules()->AddRule("proxy", "192.168.1.11"); 39 resolver_impl->rules()->AddRule("proxy", "192.168.1.11");
38 40
39 // Create a remapped resolver that uses |resolver_impl|. 41 // Create a remapped resolver that uses |resolver_impl|.
40 std::unique_ptr<MappedHostResolver> resolver( 42 std::unique_ptr<MappedHostResolver> resolver(
41 new MappedHostResolver(std::move(resolver_impl))); 43 new MappedHostResolver(std::move(resolver_impl)));
42 44
43 int rv; 45 int rv;
44 AddressList address_list; 46 AddressList address_list;
45 47
46 // Try resolving "www.google.com:80". There are no mappings yet, so this 48 // Try resolving "www.google.com:80". There are no mappings yet, so this
47 // hits |resolver_impl| and fails. 49 // hits |resolver_impl| and fails.
48 TestCompletionCallback callback; 50 TestCompletionCallback callback;
49 rv = resolver->Resolve( 51 rv = resolver->Resolve(
50 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), 52 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)),
51 DEFAULT_PRIORITY, 53 DEFAULT_PRIORITY, &address_list, callback.callback(), &request,
52 &address_list,
53 callback.callback(),
54 NULL,
55 BoundNetLog()); 54 BoundNetLog());
56 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 55 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
57 rv = callback.WaitForResult(); 56 rv = callback.WaitForResult();
58 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); 57 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED));
59 58
60 // Remap *.google.com to baz.com. 59 // Remap *.google.com to baz.com.
61 EXPECT_TRUE(resolver->AddRuleFromString("map *.google.com baz.com")); 60 EXPECT_TRUE(resolver->AddRuleFromString("map *.google.com baz.com"));
61 request.reset();
62 62
63 // Try resolving "www.google.com:80". Should be remapped to "baz.com:80". 63 // Try resolving "www.google.com:80". Should be remapped to "baz.com:80".
64 rv = resolver->Resolve( 64 rv = resolver->Resolve(
65 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), 65 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)),
66 DEFAULT_PRIORITY, 66 DEFAULT_PRIORITY, &address_list, callback.callback(), &request,
67 &address_list,
68 callback.callback(),
69 NULL,
70 BoundNetLog()); 67 BoundNetLog());
71 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 68 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
72 rv = callback.WaitForResult(); 69 rv = callback.WaitForResult();
73 EXPECT_THAT(rv, IsOk()); 70 EXPECT_THAT(rv, IsOk());
74 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list)); 71 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list));
72 request.reset();
75 73
76 // Try resolving "foo.com:77". This will NOT be remapped, so result 74 // Try resolving "foo.com:77". This will NOT be remapped, so result
77 // is "foo.com:77". 75 // is "foo.com:77".
78 rv = resolver->Resolve(HostResolver::RequestInfo(HostPortPair("foo.com", 77)), 76 rv = resolver->Resolve(HostResolver::RequestInfo(HostPortPair("foo.com", 77)),
79 DEFAULT_PRIORITY, 77 DEFAULT_PRIORITY, &address_list, callback.callback(),
80 &address_list, 78 &request, BoundNetLog());
81 callback.callback(),
82 NULL,
83 BoundNetLog());
84 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 79 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
85 rv = callback.WaitForResult(); 80 rv = callback.WaitForResult();
86 EXPECT_THAT(rv, IsOk()); 81 EXPECT_THAT(rv, IsOk());
87 EXPECT_EQ("192.168.1.8:77", FirstAddress(address_list)); 82 EXPECT_EQ("192.168.1.8:77", FirstAddress(address_list));
83 request.reset();
88 84
89 // Remap "*.org" to "proxy:99". 85 // Remap "*.org" to "proxy:99".
90 EXPECT_TRUE(resolver->AddRuleFromString("Map *.org proxy:99")); 86 EXPECT_TRUE(resolver->AddRuleFromString("Map *.org proxy:99"));
91 87
92 // Try resolving "chromium.org:61". Should be remapped to "proxy:99". 88 // Try resolving "chromium.org:61". Should be remapped to "proxy:99".
93 rv = resolver->Resolve( 89 rv = resolver->Resolve(
94 HostResolver::RequestInfo(HostPortPair("chromium.org", 61)), 90 HostResolver::RequestInfo(HostPortPair("chromium.org", 61)),
95 DEFAULT_PRIORITY, 91 DEFAULT_PRIORITY, &address_list, callback.callback(), &request,
96 &address_list,
97 callback.callback(),
98 NULL,
99 BoundNetLog()); 92 BoundNetLog());
100 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 93 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
101 rv = callback.WaitForResult(); 94 rv = callback.WaitForResult();
102 EXPECT_THAT(rv, IsOk()); 95 EXPECT_THAT(rv, IsOk());
103 EXPECT_EQ("192.168.1.11:99", FirstAddress(address_list)); 96 EXPECT_EQ("192.168.1.11:99", FirstAddress(address_list));
104 } 97 }
105 98
106 // Tests that exclusions are respected. 99 // Tests that exclusions are respected.
107 TEST(MappedHostResolverTest, Exclusion) { 100 TEST(MappedHostResolverTest, Exclusion) {
101 // Outstanding request.
102 std::unique_ptr<HostResolver::Request> request;
108 // Create a mock host resolver, with specific hostname to IP mappings. 103 // Create a mock host resolver, with specific hostname to IP mappings.
109 std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver()); 104 std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
110 resolver_impl->rules()->AddRule("baz", "192.168.1.5"); 105 resolver_impl->rules()->AddRule("baz", "192.168.1.5");
111 resolver_impl->rules()->AddRule("www.google.com", "192.168.1.3"); 106 resolver_impl->rules()->AddRule("www.google.com", "192.168.1.3");
112 107
113 // Create a remapped resolver that uses |resolver_impl|. 108 // Create a remapped resolver that uses |resolver_impl|.
114 std::unique_ptr<MappedHostResolver> resolver( 109 std::unique_ptr<MappedHostResolver> resolver(
115 new MappedHostResolver(std::move(resolver_impl))); 110 new MappedHostResolver(std::move(resolver_impl)));
116 111
117 int rv; 112 int rv;
118 AddressList address_list; 113 AddressList address_list;
119 TestCompletionCallback callback; 114 TestCompletionCallback callback;
120 115
121 // Remap "*.com" to "baz". 116 // Remap "*.com" to "baz".
122 EXPECT_TRUE(resolver->AddRuleFromString("map *.com baz")); 117 EXPECT_TRUE(resolver->AddRuleFromString("map *.com baz"));
123 118
124 // Add an exclusion for "*.google.com". 119 // Add an exclusion for "*.google.com".
125 EXPECT_TRUE(resolver->AddRuleFromString("EXCLUDE *.google.com")); 120 EXPECT_TRUE(resolver->AddRuleFromString("EXCLUDE *.google.com"));
126 121
127 // Try resolving "www.google.com". Should not be remapped due to exclusion). 122 // Try resolving "www.google.com". Should not be remapped due to exclusion).
128 rv = resolver->Resolve( 123 rv = resolver->Resolve(
129 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), 124 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)),
130 DEFAULT_PRIORITY, 125 DEFAULT_PRIORITY, &address_list, callback.callback(), &request,
131 &address_list,
132 callback.callback(),
133 NULL,
134 BoundNetLog()); 126 BoundNetLog());
135 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 127 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
136 rv = callback.WaitForResult(); 128 rv = callback.WaitForResult();
137 EXPECT_THAT(rv, IsOk()); 129 EXPECT_THAT(rv, IsOk());
138 EXPECT_EQ("192.168.1.3:80", FirstAddress(address_list)); 130 EXPECT_EQ("192.168.1.3:80", FirstAddress(address_list));
131 request.reset();
139 132
140 // Try resolving "chrome.com:80". Should be remapped to "baz:80". 133 // Try resolving "chrome.com:80". Should be remapped to "baz:80".
141 rv = resolver->Resolve( 134 rv = resolver->Resolve(
142 HostResolver::RequestInfo(HostPortPair("chrome.com", 80)), 135 HostResolver::RequestInfo(HostPortPair("chrome.com", 80)),
143 DEFAULT_PRIORITY, 136 DEFAULT_PRIORITY, &address_list, callback.callback(), &request,
144 &address_list,
145 callback.callback(),
146 NULL,
147 BoundNetLog()); 137 BoundNetLog());
148 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 138 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
149 rv = callback.WaitForResult(); 139 rv = callback.WaitForResult();
150 EXPECT_THAT(rv, IsOk()); 140 EXPECT_THAT(rv, IsOk());
151 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list)); 141 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list));
152 } 142 }
153 143
154 TEST(MappedHostResolverTest, SetRulesFromString) { 144 TEST(MappedHostResolverTest, SetRulesFromString) {
145 // Outstanding request.
146 std::unique_ptr<HostResolver::Request> request;
155 // Create a mock host resolver, with specific hostname to IP mappings. 147 // Create a mock host resolver, with specific hostname to IP mappings.
156 std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver()); 148 std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
157 resolver_impl->rules()->AddRule("baz", "192.168.1.7"); 149 resolver_impl->rules()->AddRule("baz", "192.168.1.7");
158 resolver_impl->rules()->AddRule("bar", "192.168.1.9"); 150 resolver_impl->rules()->AddRule("bar", "192.168.1.9");
159 151
160 // Create a remapped resolver that uses |resolver_impl|. 152 // Create a remapped resolver that uses |resolver_impl|.
161 std::unique_ptr<MappedHostResolver> resolver( 153 std::unique_ptr<MappedHostResolver> resolver(
162 new MappedHostResolver(std::move(resolver_impl))); 154 new MappedHostResolver(std::move(resolver_impl)));
163 155
164 int rv; 156 int rv;
165 AddressList address_list; 157 AddressList address_list;
166 TestCompletionCallback callback; 158 TestCompletionCallback callback;
167 159
168 // Remap "*.com" to "baz", and *.net to "bar:60". 160 // Remap "*.com" to "baz", and *.net to "bar:60".
169 resolver->SetRulesFromString("map *.com baz , map *.net bar:60"); 161 resolver->SetRulesFromString("map *.com baz , map *.net bar:60");
170 162
171 // Try resolving "www.google.com". Should be remapped to "baz". 163 // Try resolving "www.google.com". Should be remapped to "baz".
172 rv = resolver->Resolve( 164 rv = resolver->Resolve(
173 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), 165 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)),
174 DEFAULT_PRIORITY, 166 DEFAULT_PRIORITY, &address_list, callback.callback(), &request,
175 &address_list,
176 callback.callback(),
177 NULL,
178 BoundNetLog()); 167 BoundNetLog());
179 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 168 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
180 rv = callback.WaitForResult(); 169 rv = callback.WaitForResult();
181 EXPECT_THAT(rv, IsOk()); 170 EXPECT_THAT(rv, IsOk());
182 EXPECT_EQ("192.168.1.7:80", FirstAddress(address_list)); 171 EXPECT_EQ("192.168.1.7:80", FirstAddress(address_list));
172 request.reset();
183 173
184 // Try resolving "chrome.net:80". Should be remapped to "bar:60". 174 // Try resolving "chrome.net:80". Should be remapped to "bar:60".
185 rv = resolver->Resolve( 175 rv = resolver->Resolve(
186 HostResolver::RequestInfo(HostPortPair("chrome.net", 80)), 176 HostResolver::RequestInfo(HostPortPair("chrome.net", 80)),
187 DEFAULT_PRIORITY, 177 DEFAULT_PRIORITY, &address_list, callback.callback(), &request,
188 &address_list,
189 callback.callback(),
190 NULL,
191 BoundNetLog()); 178 BoundNetLog());
192 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 179 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
193 rv = callback.WaitForResult(); 180 rv = callback.WaitForResult();
194 EXPECT_THAT(rv, IsOk()); 181 EXPECT_THAT(rv, IsOk());
195 EXPECT_EQ("192.168.1.9:60", FirstAddress(address_list)); 182 EXPECT_EQ("192.168.1.9:60", FirstAddress(address_list));
196 } 183 }
197 184
198 // Parsing bad rules should silently discard the rule (and never crash). 185 // Parsing bad rules should silently discard the rule (and never crash).
199 TEST(MappedHostResolverTest, ParseInvalidRules) { 186 TEST(MappedHostResolverTest, ParseInvalidRules) {
200 std::unique_ptr<MappedHostResolver> resolver( 187 std::unique_ptr<MappedHostResolver> resolver(
201 new MappedHostResolver(std::unique_ptr<HostResolver>())); 188 new MappedHostResolver(std::unique_ptr<HostResolver>()));
202 189
203 EXPECT_FALSE(resolver->AddRuleFromString("xyz")); 190 EXPECT_FALSE(resolver->AddRuleFromString("xyz"));
204 EXPECT_FALSE(resolver->AddRuleFromString(std::string())); 191 EXPECT_FALSE(resolver->AddRuleFromString(std::string()));
205 EXPECT_FALSE(resolver->AddRuleFromString(" ")); 192 EXPECT_FALSE(resolver->AddRuleFromString(" "));
206 EXPECT_FALSE(resolver->AddRuleFromString("EXCLUDE")); 193 EXPECT_FALSE(resolver->AddRuleFromString("EXCLUDE"));
207 EXPECT_FALSE(resolver->AddRuleFromString("EXCLUDE foo bar")); 194 EXPECT_FALSE(resolver->AddRuleFromString("EXCLUDE foo bar"));
208 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE")); 195 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE"));
209 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE x")); 196 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE x"));
210 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE x :10")); 197 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE x :10"));
211 } 198 }
212 199
213 // Test mapping hostnames to resolving failures. 200 // Test mapping hostnames to resolving failures.
214 TEST(MappedHostResolverTest, MapToError) { 201 TEST(MappedHostResolverTest, MapToError) {
202 // Outstanding request.
203 std::unique_ptr<HostResolver::Request> request;
215 std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver()); 204 std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver());
216 resolver_impl->rules()->AddRule("*", "192.168.1.5"); 205 resolver_impl->rules()->AddRule("*", "192.168.1.5");
217 206
218 std::unique_ptr<MappedHostResolver> resolver( 207 std::unique_ptr<MappedHostResolver> resolver(
219 new MappedHostResolver(std::move(resolver_impl))); 208 new MappedHostResolver(std::move(resolver_impl)));
220 209
221 int rv; 210 int rv;
222 AddressList address_list; 211 AddressList address_list;
223 212
224 // Remap *.google.com to resolving failures. 213 // Remap *.google.com to resolving failures.
225 EXPECT_TRUE(resolver->AddRuleFromString("MAP *.google.com ~NOTFOUND")); 214 EXPECT_TRUE(resolver->AddRuleFromString("MAP *.google.com ~NOTFOUND"));
226 215
227 // Try resolving www.google.com --> Should give an error. 216 // Try resolving www.google.com --> Should give an error.
228 TestCompletionCallback callback1; 217 TestCompletionCallback callback1;
229 rv = resolver->Resolve( 218 rv = resolver->Resolve(
230 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), 219 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)),
231 DEFAULT_PRIORITY, 220 DEFAULT_PRIORITY, &address_list, callback1.callback(), &request,
232 &address_list,
233 callback1.callback(),
234 NULL,
235 BoundNetLog()); 221 BoundNetLog());
236 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); 222 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED));
223 request.reset();
237 224
238 // Try resolving www.foo.com --> Should succeed. 225 // Try resolving www.foo.com --> Should succeed.
239 TestCompletionCallback callback2; 226 TestCompletionCallback callback2;
240 rv = resolver->Resolve( 227 rv = resolver->Resolve(
241 HostResolver::RequestInfo(HostPortPair("www.foo.com", 80)), 228 HostResolver::RequestInfo(HostPortPair("www.foo.com", 80)),
242 DEFAULT_PRIORITY, 229 DEFAULT_PRIORITY, &address_list, callback2.callback(), &request,
243 &address_list,
244 callback2.callback(),
245 NULL,
246 BoundNetLog()); 230 BoundNetLog());
247 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 231 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
248 rv = callback2.WaitForResult(); 232 rv = callback2.WaitForResult();
249 EXPECT_THAT(rv, IsOk()); 233 EXPECT_THAT(rv, IsOk());
250 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list)); 234 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list));
251 } 235 }
252 236
253 } // namespace 237 } // namespace
254 238
255 } // namespace net 239 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698