dns_test_util.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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 3// found in the LICENSE file. 4 5#ifndef NET_DNS_DNS_TEST_UTIL_H_ 6#define NET_DNS_DNS_TEST_UTIL_H_ 7 8#include <string> 9#include <vector> 10 11#include "base/basictypes.h" 12#include "base/memory/scoped_ptr.h" 13#include "net/dns/dns_config_service.h" 14#include "net/dns/dns_protocol.h" 15 16namespace net { 17 18//----------------------------------------------------------------------------- 19// Query/response set for www.google.com, ID is fixed to 0. 20static const char kT0HostName[] = "www.google.com"; 21static const uint16 kT0Qtype = dns_protocol::kTypeA; 22static const char kT0DnsName[] = { 23 0x03, 'w', 'w', 'w', 24 0x06, 'g', 'o', 'o', 'g', 'l', 'e', 25 0x03, 'c', 'o', 'm', 26 0x00 27}; 28static const size_t kT0QuerySize = 32; 29static const uint8 kT0ResponseDatagram[] = { 30 // response contains one CNAME for www.l.google.com and the following 31 // IP addresses: 74.125.226.{179,180,176,177,178} 32 0x00, 0x00, 0x81, 0x80, 0x00, 0x01, 0x00, 0x06, 33 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0x77, 0x77, 34 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x03, 35 0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, 0x00, 0x01, 36 0xc0, 0x0c, 0x00, 0x05, 0x00, 0x01, 0x00, 0x01, 37 0x4d, 0x13, 0x00, 0x08, 0x03, 0x77, 0x77, 0x77, 38 0x01, 0x6c, 0xc0, 0x10, 0xc0, 0x2c, 0x00, 0x01, 39 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x04, 40 0x4a, 0x7d, 0xe2, 0xb3, 0xc0, 0x2c, 0x00, 0x01, 41 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x04, 42 0x4a, 0x7d, 0xe2, 0xb4, 0xc0, 0x2c, 0x00, 0x01, 43 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x04, 44 0x4a, 0x7d, 0xe2, 0xb0, 0xc0, 0x2c, 0x00, 0x01, 45 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x04, 46 0x4a, 0x7d, 0xe2, 0xb1, 0xc0, 0x2c, 0x00, 0x01, 47 0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x04, 48 0x4a, 0x7d, 0xe2, 0xb2 49}; 50static const char* const kT0IpAddresses[] = { 51 "74.125.226.179", "74.125.226.180", "74.125.226.176", 52 "74.125.226.177", "74.125.226.178" 53}; 54static const char kT0CanonName[] = "www.l.google.com"; 55static const int kT0TTL = 0x000000e4; 56// +1 for the CNAME record. 57static const unsigned kT0RecordCount = arraysize(kT0IpAddresses) + 1; 58 59//----------------------------------------------------------------------------- 60// Query/response set for codereview.chromium.org, ID is fixed to 1. 61static const char kT1HostName[] = "codereview.chromium.org"; 62static const uint16 kT1Qtype = dns_protocol::kTypeA; 63static const char kT1DnsName[] = { 64 0x0a, 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w', 65 0x08, 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm', 66 0x03, 'o', 'r', 'g', 67 0x00 68}; 69static const size_t kT1QuerySize = 41; 70static const uint8 kT1ResponseDatagram[] = { 71 // response contains one CNAME for ghs.l.google.com and the following 72 // IP address: 64.233.169.121 73 0x00, 0x01, 0x81, 0x80, 0x00, 0x01, 0x00, 0x02, 74 0x00, 0x00, 0x00, 0x00, 0x0a, 0x63, 0x6f, 0x64, 75 0x65, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x08, 76 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d, 77 0x03, 0x6f, 0x72, 0x67, 0x00, 0x00, 0x01, 0x00, 78 0x01, 0xc0, 0x0c, 0x00, 0x05, 0x00, 0x01, 0x00, 79 0x01, 0x41, 0x75, 0x00, 0x12, 0x03, 0x67, 0x68, 80 0x73, 0x01, 0x6c, 0x06, 0x67, 0x6f, 0x6f, 0x67, 81 0x6c, 0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0xc0, 82 0x35, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 83 0x0b, 0x00, 0x04, 0x40, 0xe9, 0xa9, 0x79 84}; 85static const char* const kT1IpAddresses[] = { 86 "64.233.169.121" 87}; 88static const char kT1CanonName[] = "ghs.l.google.com"; 89static const int kT1TTL = 0x0000010b; 90// +1 for the CNAME record. 91static const unsigned kT1RecordCount = arraysize(kT1IpAddresses) + 1; 92 93//----------------------------------------------------------------------------- 94// Query/response set for www.ccs.neu.edu, ID is fixed to 2. 95static const char kT2HostName[] = "www.ccs.neu.edu"; 96static const uint16 kT2Qtype = dns_protocol::kTypeA; 97static const char kT2DnsName[] = { 98 0x03, 'w', 'w', 'w', 99 0x03, 'c', 'c', 's', 100 0x03, 'n', 'e', 'u', 101 0x03, 'e', 'd', 'u', 102 0x00 103}; 104static const size_t kT2QuerySize = 33; 105static const uint8 kT2ResponseDatagram[] = { 106 // response contains one CNAME for vulcan.ccs.neu.edu and the following 107 // IP address: 129.10.116.81 108 0x00, 0x02, 0x81, 0x80, 0x00, 0x01, 0x00, 0x02, 109 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0x77, 0x77, 110 0x03, 0x63, 0x63, 0x73, 0x03, 0x6e, 0x65, 0x75, 111 0x03, 0x65, 0x64, 0x75, 0x00, 0x00, 0x01, 0x00, 112 0x01, 0xc0, 0x0c, 0x00, 0x05, 0x00, 0x01, 0x00, 113 0x00, 0x01, 0x2c, 0x00, 0x09, 0x06, 0x76, 0x75, 114 0x6c, 0x63, 0x61, 0x6e, 0xc0, 0x10, 0xc0, 0x2d, 115 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x2c, 116 0x00, 0x04, 0x81, 0x0a, 0x74, 0x51 117}; 118static const char* const kT2IpAddresses[] = { 119 "129.10.116.81" 120}; 121static const char kT2CanonName[] = "vulcan.ccs.neu.edu"; 122static const int kT2TTL = 0x0000012c; 123// +1 for the CNAME record. 124static const unsigned kT2RecordCount = arraysize(kT2IpAddresses) + 1; 125 126//----------------------------------------------------------------------------- 127// Query/response set for www.google.az, ID is fixed to 3. 128static const char kT3HostName[] = "www.google.az"; 129static const uint16 kT3Qtype = dns_protocol::kTypeA; 130static const char kT3DnsName[] = { 131 0x03, 'w', 'w', 'w', 132 0x06, 'g', 'o', 'o', 'g', 'l', 'e', 133 0x02, 'a', 'z', 134 0x00 135}; 136static const size_t kT3QuerySize = 31; 137static const uint8 kT3ResponseDatagram[] = { 138 // response contains www.google.com as CNAME for www.google.az and 139 // www.l.google.com as CNAME for www.google.com and the following 140 // IP addresses: 74.125.226.{178,179,180,176,177} 141 0x00, 0x03, 0x81, 0x80, 0x00, 0x01, 0x00, 0x07, 142 0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0x77, 0x77, 143 0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x02, 144 0x61, 0x7a, 0x00, 0x00, 0x01, 0x00, 0x01, 0xc0, 145 0x0c, 0x00, 0x05, 0x00, 0x01, 0x00, 0x01, 0x50, 146 0x99, 0x00, 0x10, 0x03, 0x77, 0x77, 0x77, 0x06, 147 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x03, 0x63, 148 0x6f, 0x6d, 0x00, 0xc0, 0x2b, 0x00, 0x05, 0x00, 149 0x01, 0x00, 0x01, 0x50, 0x99, 0x00, 0x08, 0x03, 150 0x77, 0x77, 0x77, 0x01, 0x6c, 0xc0, 0x2f, 0xc0, 151 0x47, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 152 0x15, 0x00, 0x04, 0x4a, 0x7d, 0xe2, 0xb2, 0xc0, 153 0x47, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 154 0x15, 0x00, 0x04, 0x4a, 0x7d, 0xe2, 0xb3, 0xc0, 155 0x47, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 156 0x15, 0x00, 0x04, 0x4a, 0x7d, 0xe2, 0xb4, 0xc0, 157 0x47, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 158 0x15, 0x00, 0x04, 0x4a, 0x7d, 0xe2, 0xb0, 0xc0, 159 0x47, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 160 0x15, 0x00, 0x04, 0x4a, 0x7d, 0xe2, 0xb1 161}; 162static const char* const kT3IpAddresses[] = { 163 "74.125.226.178", "74.125.226.179", "74.125.226.180", 164 "74.125.226.176", "74.125.226.177" 165}; 166static const char kT3CanonName[] = "www.l.google.com"; 167static const int kT3TTL = 0x00000015; 168// +2 for the CNAME records. 169static const unsigned kT3RecordCount = arraysize(kT3IpAddresses) + 2; 170 171class DnsClient; 172 173struct MockDnsClientRule { 174 enum Result { 175 FAIL_SYNC, // Fail synchronously with ERR_NAME_NOT_RESOLVED. 176 FAIL_ASYNC, // Fail asynchronously with ERR_NAME_NOT_RESOLVED. 177 EMPTY, // Return an empty response. 178 OK, // Return a response with loopback address. 179 }; 180 181 MockDnsClientRule(const std::string& prefix_arg, 182 uint16 qtype_arg, 183 Result result_arg) 184 : result(result_arg), prefix(prefix_arg), qtype(qtype_arg) { } 185 186 Result result; 187 std::string prefix; 188 uint16 qtype; 189}; 190 191typedef std::vector<MockDnsClientRule> MockDnsClientRuleList; 192 193// Creates mock DnsClient for testing HostResolverImpl. 194scoped_ptr<DnsClient> CreateMockDnsClient(const DnsConfig& config, 195 const MockDnsClientRuleList& rules); 196 197} // namespace net 198 199#endif // NET_DNS_DNS_TEST_UTIL_H_ 200