| Index: net/dns/dns_test_util.cc
|
| diff --git a/net/dns/dns_test_util.cc b/net/dns/dns_test_util.cc
|
| deleted file mode 100644
|
| index aee3ba743b3b58715bc03e9404deb5aa7e92c32a..0000000000000000000000000000000000000000
|
| --- a/net/dns/dns_test_util.cc
|
| +++ /dev/null
|
| @@ -1,229 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "net/dns/dns_test_util.h"
|
| -
|
| -#include <string>
|
| -
|
| -#include "base/big_endian.h"
|
| -#include "base/bind.h"
|
| -#include "base/memory/weak_ptr.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/sys_byteorder.h"
|
| -#include "net/base/dns_util.h"
|
| -#include "net/base/io_buffer.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/dns/address_sorter.h"
|
| -#include "net/dns/dns_query.h"
|
| -#include "net/dns/dns_response.h"
|
| -#include "net/dns/dns_transaction.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace net {
|
| -namespace {
|
| -
|
| -class MockAddressSorter : public AddressSorter {
|
| - public:
|
| - ~MockAddressSorter() override {}
|
| - void Sort(const AddressList& list,
|
| - const CallbackType& callback) const override {
|
| - // Do nothing.
|
| - callback.Run(true, list);
|
| - }
|
| -};
|
| -
|
| -// A DnsTransaction which uses MockDnsClientRuleList to determine the response.
|
| -class MockTransaction : public DnsTransaction,
|
| - public base::SupportsWeakPtr<MockTransaction> {
|
| - public:
|
| - MockTransaction(const MockDnsClientRuleList& rules,
|
| - const std::string& hostname,
|
| - uint16 qtype,
|
| - const DnsTransactionFactory::CallbackType& callback)
|
| - : result_(MockDnsClientRule::FAIL),
|
| - hostname_(hostname),
|
| - qtype_(qtype),
|
| - callback_(callback),
|
| - started_(false),
|
| - delayed_(false) {
|
| - // Find the relevant rule which matches |qtype| and prefix of |hostname|.
|
| - for (size_t i = 0; i < rules.size(); ++i) {
|
| - const std::string& prefix = rules[i].prefix;
|
| - if ((rules[i].qtype == qtype) &&
|
| - (hostname.size() >= prefix.size()) &&
|
| - (hostname.compare(0, prefix.size(), prefix) == 0)) {
|
| - result_ = rules[i].result;
|
| - delayed_ = rules[i].delay;
|
| - break;
|
| - }
|
| - }
|
| - }
|
| -
|
| - virtual const std::string& GetHostname() const override {
|
| - return hostname_;
|
| - }
|
| -
|
| - virtual uint16 GetType() const override {
|
| - return qtype_;
|
| - }
|
| -
|
| - virtual void Start() override {
|
| - EXPECT_FALSE(started_);
|
| - started_ = true;
|
| - if (delayed_)
|
| - return;
|
| - // Using WeakPtr to cleanly cancel when transaction is destroyed.
|
| - base::MessageLoop::current()->PostTask(
|
| - FROM_HERE, base::Bind(&MockTransaction::Finish, AsWeakPtr()));
|
| - }
|
| -
|
| - void FinishDelayedTransaction() {
|
| - EXPECT_TRUE(delayed_);
|
| - delayed_ = false;
|
| - Finish();
|
| - }
|
| -
|
| - bool delayed() const { return delayed_; }
|
| -
|
| - private:
|
| - void Finish() {
|
| - switch (result_) {
|
| - case MockDnsClientRule::EMPTY:
|
| - case MockDnsClientRule::OK: {
|
| - std::string qname;
|
| - DNSDomainFromDot(hostname_, &qname);
|
| - DnsQuery query(0, qname, qtype_);
|
| -
|
| - DnsResponse response;
|
| - char* buffer = response.io_buffer()->data();
|
| - int nbytes = query.io_buffer()->size();
|
| - memcpy(buffer, query.io_buffer()->data(), nbytes);
|
| - dns_protocol::Header* header =
|
| - reinterpret_cast<dns_protocol::Header*>(buffer);
|
| - header->flags |= dns_protocol::kFlagResponse;
|
| -
|
| - if (MockDnsClientRule::OK == result_) {
|
| - const uint16 kPointerToQueryName =
|
| - static_cast<uint16>(0xc000 | sizeof(*header));
|
| -
|
| - const uint32 kTTL = 86400; // One day.
|
| -
|
| - // Size of RDATA which is a IPv4 or IPv6 address.
|
| - size_t rdata_size = qtype_ == net::dns_protocol::kTypeA ?
|
| - net::kIPv4AddressSize : net::kIPv6AddressSize;
|
| -
|
| - // 12 is the sum of sizes of the compressed name reference, TYPE,
|
| - // CLASS, TTL and RDLENGTH.
|
| - size_t answer_size = 12 + rdata_size;
|
| -
|
| - // Write answer with loopback IP address.
|
| - header->ancount = base::HostToNet16(1);
|
| - base::BigEndianWriter writer(buffer + nbytes, answer_size);
|
| - writer.WriteU16(kPointerToQueryName);
|
| - writer.WriteU16(qtype_);
|
| - writer.WriteU16(net::dns_protocol::kClassIN);
|
| - writer.WriteU32(kTTL);
|
| - writer.WriteU16(rdata_size);
|
| - if (qtype_ == net::dns_protocol::kTypeA) {
|
| - char kIPv4Loopback[] = { 0x7f, 0, 0, 1 };
|
| - writer.WriteBytes(kIPv4Loopback, sizeof(kIPv4Loopback));
|
| - } else {
|
| - char kIPv6Loopback[] = { 0, 0, 0, 0, 0, 0, 0, 0,
|
| - 0, 0, 0, 0, 0, 0, 0, 1 };
|
| - writer.WriteBytes(kIPv6Loopback, sizeof(kIPv6Loopback));
|
| - }
|
| - nbytes += answer_size;
|
| - }
|
| - EXPECT_TRUE(response.InitParse(nbytes, query));
|
| - callback_.Run(this, OK, &response);
|
| - } break;
|
| - case MockDnsClientRule::FAIL:
|
| - callback_.Run(this, ERR_NAME_NOT_RESOLVED, NULL);
|
| - break;
|
| - case MockDnsClientRule::TIMEOUT:
|
| - callback_.Run(this, ERR_DNS_TIMED_OUT, NULL);
|
| - break;
|
| - default:
|
| - NOTREACHED();
|
| - break;
|
| - }
|
| - }
|
| -
|
| - MockDnsClientRule::Result result_;
|
| - const std::string hostname_;
|
| - const uint16 qtype_;
|
| - DnsTransactionFactory::CallbackType callback_;
|
| - bool started_;
|
| - bool delayed_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -// A DnsTransactionFactory which creates MockTransaction.
|
| -class MockTransactionFactory : public DnsTransactionFactory {
|
| - public:
|
| - explicit MockTransactionFactory(const MockDnsClientRuleList& rules)
|
| - : rules_(rules) {}
|
| -
|
| - ~MockTransactionFactory() override {}
|
| -
|
| - scoped_ptr<DnsTransaction> CreateTransaction(
|
| - const std::string& hostname,
|
| - uint16 qtype,
|
| - const DnsTransactionFactory::CallbackType& callback,
|
| - const BoundNetLog&) override {
|
| - MockTransaction* transaction =
|
| - new MockTransaction(rules_, hostname, qtype, callback);
|
| - if (transaction->delayed())
|
| - delayed_transactions_.push_back(transaction->AsWeakPtr());
|
| - return scoped_ptr<DnsTransaction>(transaction);
|
| - }
|
| -
|
| - void CompleteDelayedTransactions() {
|
| - DelayedTransactionList old_delayed_transactions;
|
| - old_delayed_transactions.swap(delayed_transactions_);
|
| - for (DelayedTransactionList::iterator it = old_delayed_transactions.begin();
|
| - it != old_delayed_transactions.end(); ++it) {
|
| - if (it->get())
|
| - (*it)->FinishDelayedTransaction();
|
| - }
|
| - }
|
| -
|
| - private:
|
| - typedef std::vector<base::WeakPtr<MockTransaction> > DelayedTransactionList;
|
| -
|
| - MockDnsClientRuleList rules_;
|
| - DelayedTransactionList delayed_transactions_;
|
| -};
|
| -
|
| -MockDnsClient::MockDnsClient(const DnsConfig& config,
|
| - const MockDnsClientRuleList& rules)
|
| - : config_(config),
|
| - factory_(new MockTransactionFactory(rules)),
|
| - address_sorter_(new MockAddressSorter()) {
|
| -}
|
| -
|
| -MockDnsClient::~MockDnsClient() {}
|
| -
|
| -void MockDnsClient::SetConfig(const DnsConfig& config) {
|
| - config_ = config;
|
| -}
|
| -
|
| -const DnsConfig* MockDnsClient::GetConfig() const {
|
| - return config_.IsValid() ? &config_ : NULL;
|
| -}
|
| -
|
| -DnsTransactionFactory* MockDnsClient::GetTransactionFactory() {
|
| - return config_.IsValid() ? factory_.get() : NULL;
|
| -}
|
| -
|
| -AddressSorter* MockDnsClient::GetAddressSorter() {
|
| - return address_sorter_.get();
|
| -}
|
| -
|
| -void MockDnsClient::CompleteDelayedTransactions() {
|
| - factory_->CompleteDelayedTransactions();
|
| -}
|
| -
|
| -} // namespace net
|
|
|