Chromium Code Reviews| 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 #ifndef NET_DNS_DNS_TEST_UTIL_H_ | 5 #ifndef NET_DNS_DNS_TEST_UTIL_H_ |
| 6 #define NET_DNS_DNS_TEST_UTIL_H_ | 6 #define NET_DNS_DNS_TEST_UTIL_H_ |
| 7 | 7 |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| 11 #include <memory> | 11 #include <memory> |
| 12 #include <string> | 12 #include <string> |
| 13 #include <vector> | 13 #include <vector> |
| 14 | 14 |
| 15 #include "base/big_endian.h" | |
| 16 #include "base/callback_forward.h" | |
| 15 #include "net/dns/dns_client.h" | 17 #include "net/dns/dns_client.h" |
| 16 #include "net/dns/dns_config_service.h" | 18 #include "net/dns/dns_config_service.h" |
| 17 #include "net/dns/dns_protocol.h" | 19 #include "net/dns/dns_protocol.h" |
| 18 | 20 |
| 19 namespace net { | 21 namespace net { |
| 20 | 22 |
| 21 //----------------------------------------------------------------------------- | 23 //----------------------------------------------------------------------------- |
| 22 // Query/response set for www.google.com, ID is fixed to 0. | 24 // Query/response set for www.google.com, ID is fixed to 0. |
| 23 static const char kT0HostName[] = "www.google.com"; | 25 static const char kT0HostName[] = "www.google.com"; |
| 24 static const uint16_t kT0Qtype = dns_protocol::kTypeA; | 26 static const uint16_t kT0Qtype = dns_protocol::kTypeA; |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 158 class MockTransactionFactory; | 160 class MockTransactionFactory; |
| 159 | 161 |
| 160 struct MockDnsClientRule { | 162 struct MockDnsClientRule { |
| 161 enum Result { | 163 enum Result { |
| 162 FAIL, // Fail asynchronously with ERR_NAME_NOT_RESOLVED. | 164 FAIL, // Fail asynchronously with ERR_NAME_NOT_RESOLVED. |
| 163 TIMEOUT, // Fail asynchronously with ERR_DNS_TIMEOUT. | 165 TIMEOUT, // Fail asynchronously with ERR_DNS_TIMEOUT. |
| 164 EMPTY, // Return an empty response. | 166 EMPTY, // Return an empty response. |
| 165 OK, // Return a response with loopback address. | 167 OK, // Return a response with loopback address. |
| 166 }; | 168 }; |
| 167 | 169 |
| 170 // The type of callback invoked in order to prepare a response to a mock DNS | |
| 171 // request. An empty response will be created, which can then be manipulated | |
| 172 // via the |response_header| and |answer_writer|. It must return net::OK | |
| 173 // when done, unless it is intended that the request fail, in which case it | |
| 174 // must return a different net::Error. | |
| 175 using ResponseCallback = | |
| 176 base::Callback<int(dns_protocol::Header* response_header, | |
| 177 base::BigEndianWriter* answer_writer)>; | |
|
mmenke
2016/06/02 19:46:05
Can you just use mock UDP sockets for this?
Reaso
| |
| 178 | |
| 179 // Expect a mock DNS request with the given |prefix| and |qtype|. | |
| 180 // The response is dictated by |result|. | |
| 168 // If |delay| is true, matching transactions will be delayed until triggered | 181 // If |delay| is true, matching transactions will be delayed until triggered |
| 169 // by the consumer. | 182 // by the consumer. |
| 170 MockDnsClientRule(const std::string& prefix_arg, | 183 MockDnsClientRule(const std::string& prefix, |
| 171 uint16_t qtype_arg, | 184 uint16_t qtype, |
| 172 Result result_arg, | 185 Result result, |
| 173 bool delay) | 186 bool delay); |
| 174 : result(result_arg), | |
| 175 prefix(prefix_arg), | |
| 176 qtype(qtype_arg), | |
| 177 delay(delay) {} | |
| 178 | 187 |
| 179 Result result; | 188 // Expect a mock DNS request with the given |prefix| and |qtype|. |
| 189 // In response, invoke |response_callback|, which can modify the response | |
| 190 // header, write answers into the response, or return a net::Error. | |
| 191 // If |delay| is true, matching transactions will be delayed until triggered | |
| 192 // by the consumer. | |
| 193 MockDnsClientRule(const std::string& prefix, | |
| 194 uint16_t qtype, | |
| 195 ResponseCallback response_callback, | |
| 196 bool delay); | |
| 197 | |
| 198 MockDnsClientRule(const MockDnsClientRule& copy); | |
| 199 MockDnsClientRule(MockDnsClientRule&& move); | |
| 200 | |
| 201 ~MockDnsClientRule(); | |
| 202 | |
| 203 ResponseCallback response_callback; | |
| 180 std::string prefix; | 204 std::string prefix; |
| 181 uint16_t qtype; | 205 uint16_t qtype; |
| 182 bool delay; | 206 bool delay; |
| 183 }; | 207 }; |
| 184 | 208 |
| 185 typedef std::vector<MockDnsClientRule> MockDnsClientRuleList; | 209 typedef std::vector<MockDnsClientRule> MockDnsClientRuleList; |
| 186 | 210 |
| 187 // MockDnsClient provides MockTransactionFactory. | 211 // MockDnsClient provides MockTransactionFactory. |
| 188 class MockDnsClient : public DnsClient { | 212 class MockDnsClient : public DnsClient { |
| 189 public: | 213 public: |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 201 | 225 |
| 202 private: | 226 private: |
| 203 DnsConfig config_; | 227 DnsConfig config_; |
| 204 std::unique_ptr<MockTransactionFactory> factory_; | 228 std::unique_ptr<MockTransactionFactory> factory_; |
| 205 std::unique_ptr<AddressSorter> address_sorter_; | 229 std::unique_ptr<AddressSorter> address_sorter_; |
| 206 }; | 230 }; |
| 207 | 231 |
| 208 } // namespace net | 232 } // namespace net |
| 209 | 233 |
| 210 #endif // NET_DNS_DNS_TEST_UTIL_H_ | 234 #endif // NET_DNS_DNS_TEST_UTIL_H_ |
| OLD | NEW |