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_