OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/base/mapped_host_resolver.h" | 5 #include "net/base/mapped_host_resolver.h" |
6 | 6 |
7 #include "net/base/address_list.h" | 7 #include "net/base/address_list.h" |
8 #include "net/base/mock_host_resolver.h" | 8 #include "net/base/mock_host_resolver.h" |
9 #include "net/base/net_errors.h" | 9 #include "net/base/net_errors.h" |
10 #include "net/base/net_log.h" | 10 #include "net/base/net_log.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 | 26 |
27 // Create a remapped resolver that uses |resolver_impl|. | 27 // Create a remapped resolver that uses |resolver_impl|. |
28 scoped_ptr<MappedHostResolver> resolver( | 28 scoped_ptr<MappedHostResolver> resolver( |
29 new MappedHostResolver(resolver_impl)); | 29 new MappedHostResolver(resolver_impl)); |
30 | 30 |
31 int rv; | 31 int rv; |
32 AddressList address_list; | 32 AddressList address_list; |
33 | 33 |
34 // Try resolving "www.google.com:80". There are no mappings yet, so this | 34 // Try resolving "www.google.com:80". There are no mappings yet, so this |
35 // hits |resolver_impl| and fails. | 35 // hits |resolver_impl| and fails. |
36 TestOldCompletionCallback callback; | 36 TestCompletionCallback callback; |
37 rv = resolver->Resolve(HostResolver::RequestInfo( | 37 rv = resolver->Resolve(HostResolver::RequestInfo( |
38 HostPortPair("www.google.com", 80)), | 38 HostPortPair("www.google.com", 80)), |
39 &address_list, &callback, NULL, BoundNetLog()); | 39 &address_list, callback.callback(), NULL, |
| 40 BoundNetLog()); |
40 EXPECT_EQ(ERR_IO_PENDING, rv); | 41 EXPECT_EQ(ERR_IO_PENDING, rv); |
41 rv = callback.WaitForResult(); | 42 rv = callback.WaitForResult(); |
42 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); | 43 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); |
43 | 44 |
44 // Remap *.google.com to baz.com. | 45 // Remap *.google.com to baz.com. |
45 EXPECT_TRUE(resolver->AddRuleFromString("map *.google.com baz.com")); | 46 EXPECT_TRUE(resolver->AddRuleFromString("map *.google.com baz.com")); |
46 | 47 |
47 // Try resolving "www.google.com:80". Should be remapped to "baz.com:80". | 48 // Try resolving "www.google.com:80". Should be remapped to "baz.com:80". |
48 rv = resolver->Resolve(HostResolver::RequestInfo( | 49 rv = resolver->Resolve(HostResolver::RequestInfo( |
49 HostPortPair("www.google.com", 80)), | 50 HostPortPair("www.google.com", 80)), |
50 &address_list, &callback, NULL, BoundNetLog()); | 51 &address_list, callback.callback(), NULL, |
| 52 BoundNetLog()); |
51 EXPECT_EQ(ERR_IO_PENDING, rv); | 53 EXPECT_EQ(ERR_IO_PENDING, rv); |
52 rv = callback.WaitForResult(); | 54 rv = callback.WaitForResult(); |
53 EXPECT_EQ(OK, rv); | 55 EXPECT_EQ(OK, rv); |
54 EXPECT_EQ("192.168.1.5", NetAddressToString(address_list.head())); | 56 EXPECT_EQ("192.168.1.5", NetAddressToString(address_list.head())); |
55 EXPECT_EQ(80, address_list.GetPort()); | 57 EXPECT_EQ(80, address_list.GetPort()); |
56 | 58 |
57 // Try resolving "foo.com:77". This will NOT be remapped, so result | 59 // Try resolving "foo.com:77". This will NOT be remapped, so result |
58 // is "foo.com:77". | 60 // is "foo.com:77". |
59 rv = resolver->Resolve(HostResolver::RequestInfo(HostPortPair("foo.com", 77)), | 61 rv = resolver->Resolve(HostResolver::RequestInfo(HostPortPair("foo.com", 77)), |
60 &address_list, &callback, NULL, BoundNetLog()); | 62 &address_list, callback.callback(), NULL, |
| 63 BoundNetLog()); |
61 EXPECT_EQ(ERR_IO_PENDING, rv); | 64 EXPECT_EQ(ERR_IO_PENDING, rv); |
62 rv = callback.WaitForResult(); | 65 rv = callback.WaitForResult(); |
63 EXPECT_EQ(OK, rv); | 66 EXPECT_EQ(OK, rv); |
64 EXPECT_EQ("192.168.1.8", NetAddressToString(address_list.head())); | 67 EXPECT_EQ("192.168.1.8", NetAddressToString(address_list.head())); |
65 EXPECT_EQ(77, address_list.GetPort()); | 68 EXPECT_EQ(77, address_list.GetPort()); |
66 | 69 |
67 // Remap "*.org" to "proxy:99". | 70 // Remap "*.org" to "proxy:99". |
68 EXPECT_TRUE(resolver->AddRuleFromString("Map *.org proxy:99")); | 71 EXPECT_TRUE(resolver->AddRuleFromString("Map *.org proxy:99")); |
69 | 72 |
70 // Try resolving "chromium.org:61". Should be remapped to "proxy:99". | 73 // Try resolving "chromium.org:61". Should be remapped to "proxy:99". |
71 rv = resolver->Resolve(HostResolver::RequestInfo | 74 rv = resolver->Resolve(HostResolver::RequestInfo |
72 (HostPortPair("chromium.org", 61)), | 75 (HostPortPair("chromium.org", 61)), |
73 &address_list, &callback, NULL, BoundNetLog()); | 76 &address_list, callback.callback(), NULL, |
| 77 BoundNetLog()); |
74 EXPECT_EQ(ERR_IO_PENDING, rv); | 78 EXPECT_EQ(ERR_IO_PENDING, rv); |
75 rv = callback.WaitForResult(); | 79 rv = callback.WaitForResult(); |
76 EXPECT_EQ(OK, rv); | 80 EXPECT_EQ(OK, rv); |
77 EXPECT_EQ("192.168.1.11", NetAddressToString(address_list.head())); | 81 EXPECT_EQ("192.168.1.11", NetAddressToString(address_list.head())); |
78 EXPECT_EQ(99, address_list.GetPort()); | 82 EXPECT_EQ(99, address_list.GetPort()); |
79 } | 83 } |
80 | 84 |
81 // Tests that exclusions are respected. | 85 // Tests that exclusions are respected. |
82 TEST(MappedHostResolverTest, Exclusion) { | 86 TEST(MappedHostResolverTest, Exclusion) { |
83 // Create a mock host resolver, with specific hostname to IP mappings. | 87 // Create a mock host resolver, with specific hostname to IP mappings. |
84 MockHostResolver* resolver_impl(new MockHostResolver()); | 88 MockHostResolver* resolver_impl(new MockHostResolver()); |
85 resolver_impl->rules()->AddRule("baz", "192.168.1.5"); | 89 resolver_impl->rules()->AddRule("baz", "192.168.1.5"); |
86 resolver_impl->rules()->AddRule("www.google.com", "192.168.1.3"); | 90 resolver_impl->rules()->AddRule("www.google.com", "192.168.1.3"); |
87 | 91 |
88 // Create a remapped resolver that uses |resolver_impl|. | 92 // Create a remapped resolver that uses |resolver_impl|. |
89 scoped_ptr<MappedHostResolver> resolver( | 93 scoped_ptr<MappedHostResolver> resolver( |
90 new MappedHostResolver(resolver_impl)); | 94 new MappedHostResolver(resolver_impl)); |
91 | 95 |
92 int rv; | 96 int rv; |
93 AddressList address_list; | 97 AddressList address_list; |
94 TestOldCompletionCallback callback; | 98 TestCompletionCallback callback; |
95 | 99 |
96 // Remap "*.com" to "baz". | 100 // Remap "*.com" to "baz". |
97 EXPECT_TRUE(resolver->AddRuleFromString("map *.com baz")); | 101 EXPECT_TRUE(resolver->AddRuleFromString("map *.com baz")); |
98 | 102 |
99 // Add an exclusion for "*.google.com". | 103 // Add an exclusion for "*.google.com". |
100 EXPECT_TRUE(resolver->AddRuleFromString("EXCLUDE *.google.com")); | 104 EXPECT_TRUE(resolver->AddRuleFromString("EXCLUDE *.google.com")); |
101 | 105 |
102 // Try resolving "www.google.com". Should not be remapped due to exclusion). | 106 // Try resolving "www.google.com". Should not be remapped due to exclusion). |
103 rv = resolver->Resolve(HostResolver::RequestInfo( | 107 rv = resolver->Resolve(HostResolver::RequestInfo( |
104 HostPortPair("www.google.com", 80)), | 108 HostPortPair("www.google.com", 80)), |
105 &address_list, &callback, NULL, BoundNetLog()); | 109 &address_list, callback.callback(), NULL, |
| 110 BoundNetLog()); |
106 EXPECT_EQ(ERR_IO_PENDING, rv); | 111 EXPECT_EQ(ERR_IO_PENDING, rv); |
107 rv = callback.WaitForResult(); | 112 rv = callback.WaitForResult(); |
108 EXPECT_EQ(OK, rv); | 113 EXPECT_EQ(OK, rv); |
109 EXPECT_EQ("192.168.1.3", NetAddressToString(address_list.head())); | 114 EXPECT_EQ("192.168.1.3", NetAddressToString(address_list.head())); |
110 EXPECT_EQ(80, address_list.GetPort()); | 115 EXPECT_EQ(80, address_list.GetPort()); |
111 | 116 |
112 // Try resolving "chrome.com:80". Should be remapped to "baz:80". | 117 // Try resolving "chrome.com:80". Should be remapped to "baz:80". |
113 rv = resolver->Resolve(HostResolver::RequestInfo( | 118 rv = resolver->Resolve(HostResolver::RequestInfo( |
114 HostPortPair("chrome.com", 80)), | 119 HostPortPair("chrome.com", 80)), |
115 &address_list, &callback, NULL, BoundNetLog()); | 120 &address_list, callback.callback(), NULL, |
| 121 BoundNetLog()); |
116 EXPECT_EQ(ERR_IO_PENDING, rv); | 122 EXPECT_EQ(ERR_IO_PENDING, rv); |
117 rv = callback.WaitForResult(); | 123 rv = callback.WaitForResult(); |
118 EXPECT_EQ(OK, rv); | 124 EXPECT_EQ(OK, rv); |
119 EXPECT_EQ("192.168.1.5", NetAddressToString(address_list.head())); | 125 EXPECT_EQ("192.168.1.5", NetAddressToString(address_list.head())); |
120 EXPECT_EQ(80, address_list.GetPort()); | 126 EXPECT_EQ(80, address_list.GetPort()); |
121 } | 127 } |
122 | 128 |
123 TEST(MappedHostResolverTest, SetRulesFromString) { | 129 TEST(MappedHostResolverTest, SetRulesFromString) { |
124 // Create a mock host resolver, with specific hostname to IP mappings. | 130 // Create a mock host resolver, with specific hostname to IP mappings. |
125 MockHostResolver* resolver_impl(new MockHostResolver()); | 131 MockHostResolver* resolver_impl(new MockHostResolver()); |
126 resolver_impl->rules()->AddRule("baz", "192.168.1.7"); | 132 resolver_impl->rules()->AddRule("baz", "192.168.1.7"); |
127 resolver_impl->rules()->AddRule("bar", "192.168.1.9"); | 133 resolver_impl->rules()->AddRule("bar", "192.168.1.9"); |
128 | 134 |
129 // Create a remapped resolver that uses |resolver_impl|. | 135 // Create a remapped resolver that uses |resolver_impl|. |
130 scoped_ptr<MappedHostResolver> resolver( | 136 scoped_ptr<MappedHostResolver> resolver( |
131 new MappedHostResolver(resolver_impl)); | 137 new MappedHostResolver(resolver_impl)); |
132 | 138 |
133 int rv; | 139 int rv; |
134 AddressList address_list; | 140 AddressList address_list; |
135 TestOldCompletionCallback callback; | 141 TestCompletionCallback callback; |
136 | 142 |
137 // Remap "*.com" to "baz", and *.net to "bar:60". | 143 // Remap "*.com" to "baz", and *.net to "bar:60". |
138 resolver->SetRulesFromString("map *.com baz , map *.net bar:60"); | 144 resolver->SetRulesFromString("map *.com baz , map *.net bar:60"); |
139 | 145 |
140 // Try resolving "www.google.com". Should be remapped to "baz". | 146 // Try resolving "www.google.com". Should be remapped to "baz". |
141 rv = resolver->Resolve(HostResolver::RequestInfo( | 147 rv = resolver->Resolve(HostResolver::RequestInfo( |
142 HostPortPair("www.google.com", 80)), | 148 HostPortPair("www.google.com", 80)), |
143 &address_list, &callback, NULL, BoundNetLog()); | 149 &address_list, callback.callback(), NULL, |
| 150 BoundNetLog()); |
144 EXPECT_EQ(ERR_IO_PENDING, rv); | 151 EXPECT_EQ(ERR_IO_PENDING, rv); |
145 rv = callback.WaitForResult(); | 152 rv = callback.WaitForResult(); |
146 EXPECT_EQ(OK, rv); | 153 EXPECT_EQ(OK, rv); |
147 EXPECT_EQ("192.168.1.7", NetAddressToString(address_list.head())); | 154 EXPECT_EQ("192.168.1.7", NetAddressToString(address_list.head())); |
148 EXPECT_EQ(80, address_list.GetPort()); | 155 EXPECT_EQ(80, address_list.GetPort()); |
149 | 156 |
150 // Try resolving "chrome.net:80". Should be remapped to "bar:60". | 157 // Try resolving "chrome.net:80". Should be remapped to "bar:60". |
151 rv = resolver->Resolve(HostResolver::RequestInfo( | 158 rv = resolver->Resolve(HostResolver::RequestInfo( |
152 HostPortPair("chrome.net", 80)), | 159 HostPortPair("chrome.net", 80)), |
153 &address_list, &callback, NULL, BoundNetLog()); | 160 &address_list, callback.callback(), NULL, |
| 161 BoundNetLog()); |
154 EXPECT_EQ(ERR_IO_PENDING, rv); | 162 EXPECT_EQ(ERR_IO_PENDING, rv); |
155 rv = callback.WaitForResult(); | 163 rv = callback.WaitForResult(); |
156 EXPECT_EQ(OK, rv); | 164 EXPECT_EQ(OK, rv); |
157 EXPECT_EQ("192.168.1.9", NetAddressToString(address_list.head())); | 165 EXPECT_EQ("192.168.1.9", NetAddressToString(address_list.head())); |
158 EXPECT_EQ(60, address_list.GetPort()); | 166 EXPECT_EQ(60, address_list.GetPort()); |
159 } | 167 } |
160 | 168 |
161 // Parsing bad rules should silently discard the rule (and never crash). | 169 // Parsing bad rules should silently discard the rule (and never crash). |
162 TEST(MappedHostResolverTest, ParseInvalidRules) { | 170 TEST(MappedHostResolverTest, ParseInvalidRules) { |
163 scoped_ptr<MappedHostResolver> resolver(new MappedHostResolver(NULL)); | 171 scoped_ptr<MappedHostResolver> resolver(new MappedHostResolver(NULL)); |
164 | 172 |
165 EXPECT_FALSE(resolver->AddRuleFromString("xyz")); | 173 EXPECT_FALSE(resolver->AddRuleFromString("xyz")); |
166 EXPECT_FALSE(resolver->AddRuleFromString("")); | 174 EXPECT_FALSE(resolver->AddRuleFromString("")); |
167 EXPECT_FALSE(resolver->AddRuleFromString(" ")); | 175 EXPECT_FALSE(resolver->AddRuleFromString(" ")); |
168 EXPECT_FALSE(resolver->AddRuleFromString("EXCLUDE")); | 176 EXPECT_FALSE(resolver->AddRuleFromString("EXCLUDE")); |
169 EXPECT_FALSE(resolver->AddRuleFromString("EXCLUDE foo bar")); | 177 EXPECT_FALSE(resolver->AddRuleFromString("EXCLUDE foo bar")); |
170 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE")); | 178 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE")); |
171 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE x")); | 179 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE x")); |
172 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE x :10")); | 180 EXPECT_FALSE(resolver->AddRuleFromString("INCLUDE x :10")); |
173 } | 181 } |
174 | 182 |
175 } // namespace | 183 } // namespace |
176 | 184 |
177 } // namespace net | 185 } // namespace net |
OLD | NEW |