shill: Spawn mulitple DNS queries when a remote URL is added to ConnectionHealthChecker
When ConnectionHealthChecker::AddRemoteURL is called,
(1) Multiple DNS queries are made for the same URL.
(2) All non-duplicate IP addresses returned are stored.
(3) When trying to connection to remote hosts, IP addresses are chosen
at random.
BUG=chromium:229985
TEST=run and build unit-tests
Change-Id: I3ac062bc27071ea13606ce59e0f4a2313e64716e
Reviewed-on: https://gerrit.chromium.org/gerrit/47945
Commit-Queue: Ben Chan <benchan@chromium.org>
Reviewed-by: Ben Chan <benchan@chromium.org>
Tested-by: Ben Chan <benchan@chromium.org>
diff --git a/mock_dns_client_factory.h b/mock_dns_client_factory.h
new file mode 100644
index 0000000..aa9a541
--- /dev/null
+++ b/mock_dns_client_factory.h
@@ -0,0 +1,46 @@
+// Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SHILL_MOCK_DNS_CLIENT_FACTORY_H_
+#define SHILL_MOCK_DNS_CLIENT_FACTORY_H_
+
+#include <string>
+#include <vector>
+
+#include <base/lazy_instance.h>
+#include <gmock/gmock.h>
+
+#include "shill/dns_client_factory.h"
+#include "shill/event_dispatcher.h"
+#include "shill/ip_address.h"
+
+namespace shill {
+
+class MockDNSClientFactory : public DNSClientFactory {
+ public:
+ virtual ~MockDNSClientFactory();
+
+ // This is a singleton. Use MockDNSClientFactory::GetInstance()->Foo()
+ static MockDNSClientFactory *GetInstance();
+
+ MOCK_METHOD6(CreateDNSClient,
+ DNSClient *(IPAddress::Family family,
+ const std::string &interface_name,
+ const std::vector<std::string> &dns_servers,
+ int timeout_ms,
+ EventDispatcher *dispatcher,
+ const DNSClient::ClientCallback &callback));
+
+ protected:
+ MockDNSClientFactory();
+
+ private:
+ friend struct base::DefaultLazyInstanceTraits<MockDNSClientFactory>;
+
+ DISALLOW_COPY_AND_ASSIGN(MockDNSClientFactory);
+};
+
+} // namespace shill
+
+#endif // SHILL_MOCK_DNS_CLIENT_FACTORY_H_