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

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

Powered by Google App Engine
This is Rietveld 408576698