From 1e6594d087bc47e278d91fb1b41c077f298064d7 Mon Sep 17 00:00:00 2001
From: "W. Trevor King" <wking@tremily.us>
Date: Sat, 16 May 2015 09:33:22 -0700
Subject: [PATCH] namesys/dns: Pluggable lookupTXT field

So we can attach a mock lookup function for testing.
---
 core/commands/dns.go |  2 +-
 namesys/dns.go       | 16 +++++++++++++++-
 namesys/namesys.go   |  2 +-
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/core/commands/dns.go b/core/commands/dns.go
index 900f0ee1e..e24b6a483 100644
--- a/core/commands/dns.go
+++ b/core/commands/dns.go
@@ -56,7 +56,7 @@ The resolver will give:
 
 		recursive, _, _ := req.Option("recursive").Bool()
 		name := req.Arguments()[0]
-		var resolver namesys.DNSResolver
+		resolver := namesys.NewDNSResolver()
 
 		depth := 1
 		if recursive {
diff --git a/namesys/dns.go b/namesys/dns.go
index f57ddce59..3703bd8d0 100644
--- a/namesys/dns.go
+++ b/namesys/dns.go
@@ -11,12 +11,26 @@ import (
 	path "github.com/ipfs/go-ipfs/path"
 )
 
+type LookupTXTFunc func(name string) (txt []string, err error)
+
 // DNSResolver implements a Resolver on DNS domains
 type DNSResolver struct {
+	lookupTXT LookupTXTFunc
 	// TODO: maybe some sort of caching?
 	// cache would need a timeout
 }
 
+// NewDNSResolver constructs a name resolver using DNS TXT records.
+func NewDNSResolver() Resolver {
+	return &DNSResolver{lookupTXT: net.LookupTXT}
+}
+
+// newDNSResolver constructs a name resolver using DNS TXT records,
+// returning a resolver instead of NewDNSResolver's Resolver.
+func newDNSResolver() resolver {
+	return &DNSResolver{lookupTXT: net.LookupTXT}
+}
+
 // Resolve implements Resolver.
 func (r *DNSResolver) Resolve(ctx context.Context, name string) (path.Path, error) {
 	return r.ResolveN(ctx, name, DefaultDepthLimit)
@@ -36,7 +50,7 @@ func (r *DNSResolver) resolveOnce(ctx context.Context, name string) (path.Path,
 	}
 
 	log.Infof("DNSResolver resolving %s", name)
-	txt, err := net.LookupTXT(name)
+	txt, err := r.lookupTXT(name)
 	if err != nil {
 		return "", err
 	}
diff --git a/namesys/namesys.go b/namesys/namesys.go
index 0f5b853be..7fe317b66 100644
--- a/namesys/namesys.go
+++ b/namesys/namesys.go
@@ -27,7 +27,7 @@ type mpns struct {
 func NewNameSystem(r routing.IpfsRouting) NameSystem {
 	return &mpns{
 		resolvers: map[string]resolver{
-			"dns":      new(DNSResolver),
+			"dns":      newDNSResolver(),
 			"proquint": new(ProquintResolver),
 			"dht":      newRoutingResolver(r),
 		},
-- 
GitLab