OLD | NEW |
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 | 44 |
45 int rv; | 45 int rv; |
46 AddressList address_list; | 46 AddressList address_list; |
47 | 47 |
48 // 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 |
49 // hits |resolver_impl| and fails. | 49 // hits |resolver_impl| and fails. |
50 TestCompletionCallback callback; | 50 TestCompletionCallback callback; |
51 rv = resolver->Resolve( | 51 rv = resolver->Resolve( |
52 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), | 52 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), |
53 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, | 53 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, |
54 BoundNetLog()); | 54 NetLogWithSource()); |
55 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 55 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
56 rv = callback.WaitForResult(); | 56 rv = callback.WaitForResult(); |
57 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); | 57 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); |
58 | 58 |
59 // Remap *.google.com to baz.com. | 59 // Remap *.google.com to baz.com. |
60 EXPECT_TRUE(resolver->AddRuleFromString("map *.google.com baz.com")); | 60 EXPECT_TRUE(resolver->AddRuleFromString("map *.google.com baz.com")); |
61 request.reset(); | 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, &address_list, callback.callback(), &request, | 66 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, |
67 BoundNetLog()); | 67 NetLogWithSource()); |
68 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 68 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
69 rv = callback.WaitForResult(); | 69 rv = callback.WaitForResult(); |
70 EXPECT_THAT(rv, IsOk()); | 70 EXPECT_THAT(rv, IsOk()); |
71 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list)); | 71 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list)); |
72 request.reset(); | 72 request.reset(); |
73 | 73 |
74 // 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 |
75 // is "foo.com:77". | 75 // is "foo.com:77". |
76 rv = resolver->Resolve(HostResolver::RequestInfo(HostPortPair("foo.com", 77)), | 76 rv = resolver->Resolve(HostResolver::RequestInfo(HostPortPair("foo.com", 77)), |
77 DEFAULT_PRIORITY, &address_list, callback.callback(), | 77 DEFAULT_PRIORITY, &address_list, callback.callback(), |
78 &request, BoundNetLog()); | 78 &request, NetLogWithSource()); |
79 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 79 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
80 rv = callback.WaitForResult(); | 80 rv = callback.WaitForResult(); |
81 EXPECT_THAT(rv, IsOk()); | 81 EXPECT_THAT(rv, IsOk()); |
82 EXPECT_EQ("192.168.1.8:77", FirstAddress(address_list)); | 82 EXPECT_EQ("192.168.1.8:77", FirstAddress(address_list)); |
83 request.reset(); | 83 request.reset(); |
84 | 84 |
85 // Remap "*.org" to "proxy:99". | 85 // Remap "*.org" to "proxy:99". |
86 EXPECT_TRUE(resolver->AddRuleFromString("Map *.org proxy:99")); | 86 EXPECT_TRUE(resolver->AddRuleFromString("Map *.org proxy:99")); |
87 | 87 |
88 // Try resolving "chromium.org:61". Should be remapped to "proxy:99". | 88 // Try resolving "chromium.org:61". Should be remapped to "proxy:99". |
89 rv = resolver->Resolve( | 89 rv = resolver->Resolve( |
90 HostResolver::RequestInfo(HostPortPair("chromium.org", 61)), | 90 HostResolver::RequestInfo(HostPortPair("chromium.org", 61)), |
91 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, | 91 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, |
92 BoundNetLog()); | 92 NetLogWithSource()); |
93 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 93 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
94 rv = callback.WaitForResult(); | 94 rv = callback.WaitForResult(); |
95 EXPECT_THAT(rv, IsOk()); | 95 EXPECT_THAT(rv, IsOk()); |
96 EXPECT_EQ("192.168.1.11:99", FirstAddress(address_list)); | 96 EXPECT_EQ("192.168.1.11:99", FirstAddress(address_list)); |
97 } | 97 } |
98 | 98 |
99 // Tests that exclusions are respected. | 99 // Tests that exclusions are respected. |
100 TEST(MappedHostResolverTest, Exclusion) { | 100 TEST(MappedHostResolverTest, Exclusion) { |
101 // Outstanding request. | 101 // Outstanding request. |
102 std::unique_ptr<HostResolver::Request> request; | 102 std::unique_ptr<HostResolver::Request> request; |
(...skipping 13 matching lines...) Expand all Loading... |
116 // Remap "*.com" to "baz". | 116 // Remap "*.com" to "baz". |
117 EXPECT_TRUE(resolver->AddRuleFromString("map *.com baz")); | 117 EXPECT_TRUE(resolver->AddRuleFromString("map *.com baz")); |
118 | 118 |
119 // Add an exclusion for "*.google.com". | 119 // Add an exclusion for "*.google.com". |
120 EXPECT_TRUE(resolver->AddRuleFromString("EXCLUDE *.google.com")); | 120 EXPECT_TRUE(resolver->AddRuleFromString("EXCLUDE *.google.com")); |
121 | 121 |
122 // 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). |
123 rv = resolver->Resolve( | 123 rv = resolver->Resolve( |
124 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), | 124 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), |
125 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, | 125 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, |
126 BoundNetLog()); | 126 NetLogWithSource()); |
127 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 127 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
128 rv = callback.WaitForResult(); | 128 rv = callback.WaitForResult(); |
129 EXPECT_THAT(rv, IsOk()); | 129 EXPECT_THAT(rv, IsOk()); |
130 EXPECT_EQ("192.168.1.3:80", FirstAddress(address_list)); | 130 EXPECT_EQ("192.168.1.3:80", FirstAddress(address_list)); |
131 request.reset(); | 131 request.reset(); |
132 | 132 |
133 // Try resolving "chrome.com:80". Should be remapped to "baz:80". | 133 // Try resolving "chrome.com:80". Should be remapped to "baz:80". |
134 rv = resolver->Resolve( | 134 rv = resolver->Resolve( |
135 HostResolver::RequestInfo(HostPortPair("chrome.com", 80)), | 135 HostResolver::RequestInfo(HostPortPair("chrome.com", 80)), |
136 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, | 136 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, |
137 BoundNetLog()); | 137 NetLogWithSource()); |
138 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 138 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
139 rv = callback.WaitForResult(); | 139 rv = callback.WaitForResult(); |
140 EXPECT_THAT(rv, IsOk()); | 140 EXPECT_THAT(rv, IsOk()); |
141 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list)); | 141 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list)); |
142 } | 142 } |
143 | 143 |
144 TEST(MappedHostResolverTest, SetRulesFromString) { | 144 TEST(MappedHostResolverTest, SetRulesFromString) { |
145 // Outstanding request. | 145 // Outstanding request. |
146 std::unique_ptr<HostResolver::Request> request; | 146 std::unique_ptr<HostResolver::Request> request; |
147 // Create a mock host resolver, with specific hostname to IP mappings. | 147 // Create a mock host resolver, with specific hostname to IP mappings. |
148 std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver()); | 148 std::unique_ptr<MockHostResolver> resolver_impl(new MockHostResolver()); |
149 resolver_impl->rules()->AddRule("baz", "192.168.1.7"); | 149 resolver_impl->rules()->AddRule("baz", "192.168.1.7"); |
150 resolver_impl->rules()->AddRule("bar", "192.168.1.9"); | 150 resolver_impl->rules()->AddRule("bar", "192.168.1.9"); |
151 | 151 |
152 // Create a remapped resolver that uses |resolver_impl|. | 152 // Create a remapped resolver that uses |resolver_impl|. |
153 std::unique_ptr<MappedHostResolver> resolver( | 153 std::unique_ptr<MappedHostResolver> resolver( |
154 new MappedHostResolver(std::move(resolver_impl))); | 154 new MappedHostResolver(std::move(resolver_impl))); |
155 | 155 |
156 int rv; | 156 int rv; |
157 AddressList address_list; | 157 AddressList address_list; |
158 TestCompletionCallback callback; | 158 TestCompletionCallback callback; |
159 | 159 |
160 // Remap "*.com" to "baz", and *.net to "bar:60". | 160 // Remap "*.com" to "baz", and *.net to "bar:60". |
161 resolver->SetRulesFromString("map *.com baz , map *.net bar:60"); | 161 resolver->SetRulesFromString("map *.com baz , map *.net bar:60"); |
162 | 162 |
163 // Try resolving "www.google.com". Should be remapped to "baz". | 163 // Try resolving "www.google.com". Should be remapped to "baz". |
164 rv = resolver->Resolve( | 164 rv = resolver->Resolve( |
165 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), | 165 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), |
166 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, | 166 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, |
167 BoundNetLog()); | 167 NetLogWithSource()); |
168 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 168 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
169 rv = callback.WaitForResult(); | 169 rv = callback.WaitForResult(); |
170 EXPECT_THAT(rv, IsOk()); | 170 EXPECT_THAT(rv, IsOk()); |
171 EXPECT_EQ("192.168.1.7:80", FirstAddress(address_list)); | 171 EXPECT_EQ("192.168.1.7:80", FirstAddress(address_list)); |
172 request.reset(); | 172 request.reset(); |
173 | 173 |
174 // Try resolving "chrome.net:80". Should be remapped to "bar:60". | 174 // Try resolving "chrome.net:80". Should be remapped to "bar:60". |
175 rv = resolver->Resolve( | 175 rv = resolver->Resolve( |
176 HostResolver::RequestInfo(HostPortPair("chrome.net", 80)), | 176 HostResolver::RequestInfo(HostPortPair("chrome.net", 80)), |
177 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, | 177 DEFAULT_PRIORITY, &address_list, callback.callback(), &request, |
178 BoundNetLog()); | 178 NetLogWithSource()); |
179 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 179 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
180 rv = callback.WaitForResult(); | 180 rv = callback.WaitForResult(); |
181 EXPECT_THAT(rv, IsOk()); | 181 EXPECT_THAT(rv, IsOk()); |
182 EXPECT_EQ("192.168.1.9:60", FirstAddress(address_list)); | 182 EXPECT_EQ("192.168.1.9:60", FirstAddress(address_list)); |
183 } | 183 } |
184 | 184 |
185 // Parsing bad rules should silently discard the rule (and never crash). | 185 // Parsing bad rules should silently discard the rule (and never crash). |
186 TEST(MappedHostResolverTest, ParseInvalidRules) { | 186 TEST(MappedHostResolverTest, ParseInvalidRules) { |
187 std::unique_ptr<MappedHostResolver> resolver( | 187 std::unique_ptr<MappedHostResolver> resolver( |
188 new MappedHostResolver(std::unique_ptr<HostResolver>())); | 188 new MappedHostResolver(std::unique_ptr<HostResolver>())); |
(...skipping 22 matching lines...) Expand all Loading... |
211 AddressList address_list; | 211 AddressList address_list; |
212 | 212 |
213 // Remap *.google.com to resolving failures. | 213 // Remap *.google.com to resolving failures. |
214 EXPECT_TRUE(resolver->AddRuleFromString("MAP *.google.com ~NOTFOUND")); | 214 EXPECT_TRUE(resolver->AddRuleFromString("MAP *.google.com ~NOTFOUND")); |
215 | 215 |
216 // Try resolving www.google.com --> Should give an error. | 216 // Try resolving www.google.com --> Should give an error. |
217 TestCompletionCallback callback1; | 217 TestCompletionCallback callback1; |
218 rv = resolver->Resolve( | 218 rv = resolver->Resolve( |
219 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), | 219 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), |
220 DEFAULT_PRIORITY, &address_list, callback1.callback(), &request, | 220 DEFAULT_PRIORITY, &address_list, callback1.callback(), &request, |
221 BoundNetLog()); | 221 NetLogWithSource()); |
222 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); | 222 EXPECT_THAT(rv, IsError(ERR_NAME_NOT_RESOLVED)); |
223 request.reset(); | 223 request.reset(); |
224 | 224 |
225 // Try resolving www.foo.com --> Should succeed. | 225 // Try resolving www.foo.com --> Should succeed. |
226 TestCompletionCallback callback2; | 226 TestCompletionCallback callback2; |
227 rv = resolver->Resolve( | 227 rv = resolver->Resolve( |
228 HostResolver::RequestInfo(HostPortPair("www.foo.com", 80)), | 228 HostResolver::RequestInfo(HostPortPair("www.foo.com", 80)), |
229 DEFAULT_PRIORITY, &address_list, callback2.callback(), &request, | 229 DEFAULT_PRIORITY, &address_list, callback2.callback(), &request, |
230 BoundNetLog()); | 230 NetLogWithSource()); |
231 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 231 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
232 rv = callback2.WaitForResult(); | 232 rv = callback2.WaitForResult(); |
233 EXPECT_THAT(rv, IsOk()); | 233 EXPECT_THAT(rv, IsOk()); |
234 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list)); | 234 EXPECT_EQ("192.168.1.5:80", FirstAddress(address_list)); |
235 } | 235 } |
236 | 236 |
237 } // namespace | 237 } // namespace |
238 | 238 |
239 } // namespace net | 239 } // namespace net |
OLD | NEW |