#ifndef NET_DNS_DNS_TEST_UTIL_H_
#define NET_DNS_DNS_TEST_UTIL_H_
#include <string>
#include <vector>
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "net/dns/dns_client.h"
#include "net/dns/dns_config_service.h"
#include "net/dns/dns_protocol.h"
namespace net {
static const char kT0HostName[] = "www.google.com";
static const uint16 kT0Qtype = dns_protocol::kTypeA;
static const char kT0DnsName[] = {
0x03, 'w', 'w', 'w',
0x06, 'g', 'o', 'o', 'g', 'l', 'e',
0x03, 'c', 'o', 'm',
0x00
};
static const size_t kT0QuerySize = 32;
static const uint8 kT0ResponseDatagram[] = {
0x00, 0x00, 0x81, 0x80, 0x00, 0x01, 0x00, 0x06,
0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0x77, 0x77,
0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x03,
0x63, 0x6f, 0x6d, 0x00, 0x00, 0x01, 0x00, 0x01,
0xc0, 0x0c, 0x00, 0x05, 0x00, 0x01, 0x00, 0x01,
0x4d, 0x13, 0x00, 0x08, 0x03, 0x77, 0x77, 0x77,
0x01, 0x6c, 0xc0, 0x10, 0xc0, 0x2c, 0x00, 0x01,
0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x04,
0x4a, 0x7d, 0xe2, 0xb3, 0xc0, 0x2c, 0x00, 0x01,
0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x04,
0x4a, 0x7d, 0xe2, 0xb4, 0xc0, 0x2c, 0x00, 0x01,
0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x04,
0x4a, 0x7d, 0xe2, 0xb0, 0xc0, 0x2c, 0x00, 0x01,
0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x04,
0x4a, 0x7d, 0xe2, 0xb1, 0xc0, 0x2c, 0x00, 0x01,
0x00, 0x01, 0x00, 0x00, 0x00, 0xe4, 0x00, 0x04,
0x4a, 0x7d, 0xe2, 0xb2
};
static const char* const kT0IpAddresses[] = {
"74.125.226.179", "74.125.226.180", "74.125.226.176",
"74.125.226.177", "74.125.226.178"
};
static const char kT0CanonName[] = "www.l.google.com";
static const int kT0TTL = 0x000000e4;
static const unsigned kT0RecordCount = arraysize(kT0IpAddresses) + 1;
static const char kT1HostName[] = "codereview.chromium.org";
static const uint16 kT1Qtype = dns_protocol::kTypeA;
static const char kT1DnsName[] = {
0x0a, 'c', 'o', 'd', 'e', 'r', 'e', 'v', 'i', 'e', 'w',
0x08, 'c', 'h', 'r', 'o', 'm', 'i', 'u', 'm',
0x03, 'o', 'r', 'g',
0x00
};
static const size_t kT1QuerySize = 41;
static const uint8 kT1ResponseDatagram[] = {
0x00, 0x01, 0x81, 0x80, 0x00, 0x01, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00, 0x0a, 0x63, 0x6f, 0x64,
0x65, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x08,
0x63, 0x68, 0x72, 0x6f, 0x6d, 0x69, 0x75, 0x6d,
0x03, 0x6f, 0x72, 0x67, 0x00, 0x00, 0x01, 0x00,
0x01, 0xc0, 0x0c, 0x00, 0x05, 0x00, 0x01, 0x00,
0x01, 0x41, 0x75, 0x00, 0x12, 0x03, 0x67, 0x68,
0x73, 0x01, 0x6c, 0x06, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x03, 0x63, 0x6f, 0x6d, 0x00, 0xc0,
0x35, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01,
0x0b, 0x00, 0x04, 0x40, 0xe9, 0xa9, 0x79
};
static const char* const kT1IpAddresses[] = {
"64.233.169.121"
};
static const char kT1CanonName[] = "ghs.l.google.com";
static const int kT1TTL = 0x0000010b;
static const unsigned kT1RecordCount = arraysize(kT1IpAddresses) + 1;
static const char kT2HostName[] = "www.ccs.neu.edu";
static const uint16 kT2Qtype = dns_protocol::kTypeA;
static const char kT2DnsName[] = {
0x03, 'w', 'w', 'w',
0x03, 'c', 'c', 's',
0x03, 'n', 'e', 'u',
0x03, 'e', 'd', 'u',
0x00
};
static const size_t kT2QuerySize = 33;
static const uint8 kT2ResponseDatagram[] = {
0x00, 0x02, 0x81, 0x80, 0x00, 0x01, 0x00, 0x02,
0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0x77, 0x77,
0x03, 0x63, 0x63, 0x73, 0x03, 0x6e, 0x65, 0x75,
0x03, 0x65, 0x64, 0x75, 0x00, 0x00, 0x01, 0x00,
0x01, 0xc0, 0x0c, 0x00, 0x05, 0x00, 0x01, 0x00,
0x00, 0x01, 0x2c, 0x00, 0x09, 0x06, 0x76, 0x75,
0x6c, 0x63, 0x61, 0x6e, 0xc0, 0x10, 0xc0, 0x2d,
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x2c,
0x00, 0x04, 0x81, 0x0a, 0x74, 0x51
};
static const char* const kT2IpAddresses[] = {
"129.10.116.81"
};
static const char kT2CanonName[] = "vulcan.ccs.neu.edu";
static const int kT2TTL = 0x0000012c;
static const unsigned kT2RecordCount = arraysize(kT2IpAddresses) + 1;
static const char kT3HostName[] = "www.google.az";
static const uint16 kT3Qtype = dns_protocol::kTypeA;
static const char kT3DnsName[] = {
0x03, 'w', 'w', 'w',
0x06, 'g', 'o', 'o', 'g', 'l', 'e',
0x02, 'a', 'z',
0x00
};
static const size_t kT3QuerySize = 31;
static const uint8 kT3ResponseDatagram[] = {
0x00, 0x03, 0x81, 0x80, 0x00, 0x01, 0x00, 0x08,
0x00, 0x00, 0x00, 0x00, 0x03, 0x77, 0x77, 0x77,
0x06, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x02,
0x61, 0x7a, 0x00, 0x00, 0x01, 0x00, 0x01, 0xc0,
0x0c, 0x00, 0x05, 0x00, 0x01, 0x00, 0x01, 0x50,
0x99, 0x00, 0x10, 0x03, 0x77, 0x77, 0x77, 0x06,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x03, 0x63,
0x6f, 0x6d, 0x00, 0xc0, 0x2b, 0x00, 0x05, 0x00,
0x01, 0x00, 0x02, 0x50, 0x99, 0x00, 0x08, 0x03,
0x77, 0x77, 0x77, 0x01, 0x6c, 0xc0, 0x2f, 0xc0,
0x47, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x04,
0x15, 0x00, 0x04, 0x4a, 0x7d, 0xe2, 0xb2, 0xc0,
0x47, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x30,
0x15, 0x00, 0x04, 0x4a, 0x7d, 0xe2, 0xb3, 0xc0,
0x47, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x20,
0x15, 0x00, 0x04, 0x4a, 0x7d, 0xe2, 0xb4, 0xc0,
0x47, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00,
0x15, 0x00, 0x04, 0x4a, 0x7d, 0xe2, 0xb0, 0xc0,
0x47, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x10,
0x15, 0x00, 0x04, 0x4a, 0x7d, 0xe2, 0xb1, 0x01,
0x74, 0xc0, 0x2f, 0x00, 0x10, 0x00, 0x01, 0x00,
0x00, 0x00, 0x01, 0x00, 0x04, 0xde, 0xad, 0xfe,
0xed
};
static const char* const kT3IpAddresses[] = {
"74.125.226.178", "74.125.226.179", "74.125.226.180",
"74.125.226.176", "74.125.226.177"
};
static const char kT3CanonName[] = "www.l.google.com";
static const int kT3TTL = 0x00000015;
static const unsigned kT3RecordCount = arraysize(kT3IpAddresses) + 3;
class AddressSorter;
class DnsClient;
class MockTransactionFactory;
struct MockDnsClientRule {
enum Result {
FAIL,
TIMEOUT,
EMPTY,
OK,
};
MockDnsClientRule(const std::string& prefix_arg,
uint16 qtype_arg,
Result result_arg,
bool delay)
: result(result_arg), prefix(prefix_arg), qtype(qtype_arg),
delay(delay) {}
Result result;
std::string prefix;
uint16 qtype;
bool delay;
};
typedef std::vector<MockDnsClientRule> MockDnsClientRuleList;
class MockDnsClient : public DnsClient {
public:
MockDnsClient(const DnsConfig& config, const MockDnsClientRuleList& rules);
virtual ~MockDnsClient();
virtual void SetConfig(const DnsConfig& config) OVERRIDE;
virtual const DnsConfig* GetConfig() const OVERRIDE;
virtual DnsTransactionFactory* GetTransactionFactory() OVERRIDE;
virtual AddressSorter* GetAddressSorter() OVERRIDE;
void CompleteDelayedTransactions();
private:
DnsConfig config_;
scoped_ptr<MockTransactionFactory> factory_;
scoped_ptr<AddressSorter> address_sorter_;
};
}
#endif