| 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 |