From 43378636d03a863f5aaafda1ff6b03689166b1bc Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Sat, 1 Oct 2022 17:10:36 +0200 Subject: libnetwork/resolvconf: allow tests to be run on unix Looks like the intent is to exclude windows (which wouldn't have /etc/resolv.conf nor systemd), but most tests would run fine elsewhere. This allows running the tests on macOS for local testing. Signed-off-by: Sebastiaan van Stijn --- libnetwork/resolvconf/resolvconf_linux_test.go | 299 ------------------------ libnetwork/resolvconf/resolvconf_unix_test.go | 302 +++++++++++++++++++++++++ 2 files changed, 302 insertions(+), 299 deletions(-) delete mode 100644 libnetwork/resolvconf/resolvconf_linux_test.go create mode 100644 libnetwork/resolvconf/resolvconf_unix_test.go (limited to 'libnetwork') diff --git a/libnetwork/resolvconf/resolvconf_linux_test.go b/libnetwork/resolvconf/resolvconf_linux_test.go deleted file mode 100644 index 42f6707e24..0000000000 --- a/libnetwork/resolvconf/resolvconf_linux_test.go +++ /dev/null @@ -1,299 +0,0 @@ -package resolvconf - -import ( - "bytes" - "os" - "testing" -) - -func TestGet(t *testing.T) { - actual, err := Get() - if err != nil { - t.Fatal(err) - } - expected, err := os.ReadFile(Path()) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(actual.Content, expected) { - t.Errorf("%s and GetResolvConf have different content.", Path()) - } - if !bytes.Equal(actual.Hash, hashData(expected)) { - t.Errorf("%s and GetResolvConf have different hashes.", Path()) - } -} - -func TestGetNameservers(t *testing.T) { - for resolv, result := range map[string][]string{` -nameserver 1.2.3.4 -nameserver 40.3.200.10 -search example.com`: {"1.2.3.4", "40.3.200.10"}, - `search example.com`: {}, - `nameserver 1.2.3.4 -search example.com -nameserver 4.30.20.100`: {"1.2.3.4", "4.30.20.100"}, - ``: {}, - ` nameserver 1.2.3.4 `: {"1.2.3.4"}, - `search example.com -nameserver 1.2.3.4 -#nameserver 4.3.2.1`: {"1.2.3.4"}, - `search example.com -nameserver 1.2.3.4 # not 4.3.2.1`: {"1.2.3.4"}, - } { - test := GetNameservers([]byte(resolv), IP) - if !strSlicesEqual(test, result) { - t.Errorf("Wrong nameserver string {%s} should be %v. Input: %s", test, result, resolv) - } - } -} - -func TestGetNameserversAsCIDR(t *testing.T) { - for resolv, result := range map[string][]string{` -nameserver 1.2.3.4 -nameserver 40.3.200.10 -search example.com`: {"1.2.3.4/32", "40.3.200.10/32"}, - `search example.com`: {}, - `nameserver 1.2.3.4 -search example.com -nameserver 4.30.20.100`: {"1.2.3.4/32", "4.30.20.100/32"}, - ``: {}, - ` nameserver 1.2.3.4 `: {"1.2.3.4/32"}, - `search example.com -nameserver 1.2.3.4 -#nameserver 4.3.2.1`: {"1.2.3.4/32"}, - `search example.com -nameserver 1.2.3.4 # not 4.3.2.1`: {"1.2.3.4/32"}, - } { - test := GetNameserversAsCIDR([]byte(resolv)) - if !strSlicesEqual(test, result) { - t.Errorf("Wrong nameserver string {%s} should be %v. Input: %s", test, result, resolv) - } - } -} - -func TestGetSearchDomains(t *testing.T) { - for resolv, result := range map[string][]string{ - `search example.com`: {"example.com"}, - `search example.com # ignored`: {"example.com"}, - ` search example.com `: {"example.com"}, - ` search example.com # ignored`: {"example.com"}, - `search foo.example.com example.com`: {"foo.example.com", "example.com"}, - ` search foo.example.com example.com `: {"foo.example.com", "example.com"}, - ` search foo.example.com example.com # ignored`: {"foo.example.com", "example.com"}, - ``: {}, - `# ignored`: {}, - `nameserver 1.2.3.4 -search foo.example.com example.com`: {"foo.example.com", "example.com"}, - `nameserver 1.2.3.4 -search dup1.example.com dup2.example.com -search foo.example.com example.com`: {"foo.example.com", "example.com"}, - `nameserver 1.2.3.4 -search foo.example.com example.com -nameserver 4.30.20.100`: {"foo.example.com", "example.com"}, - } { - test := GetSearchDomains([]byte(resolv)) - if !strSlicesEqual(test, result) { - t.Errorf("Wrong search domain string {%s} should be %v. Input: %s", test, result, resolv) - } - } -} - -func TestGetOptions(t *testing.T) { - for resolv, result := range map[string][]string{ - `options opt1`: {"opt1"}, - `options opt1 # ignored`: {"opt1"}, - ` options opt1 `: {"opt1"}, - ` options opt1 # ignored`: {"opt1"}, - `options opt1 opt2 opt3`: {"opt1", "opt2", "opt3"}, - `options opt1 opt2 opt3 # ignored`: {"opt1", "opt2", "opt3"}, - ` options opt1 opt2 opt3 `: {"opt1", "opt2", "opt3"}, - ` options opt1 opt2 opt3 # ignored`: {"opt1", "opt2", "opt3"}, - ``: {}, - `# ignored`: {}, - `nameserver 1.2.3.4`: {}, - `nameserver 1.2.3.4 -options opt1 opt2 opt3`: {"opt1", "opt2", "opt3"}, - `nameserver 1.2.3.4 -options opt1 opt2 -options opt3 opt4`: {"opt3", "opt4"}, - } { - test := GetOptions([]byte(resolv)) - if !strSlicesEqual(test, result) { - t.Errorf("Wrong options string {%s} should be %v. Input: %s", test, result, resolv) - } - } -} - -func strSlicesEqual(a, b []string) bool { - if len(a) != len(b) { - return false - } - - for i, v := range a { - if v != b[i] { - return false - } - } - - return true -} - -func TestBuild(t *testing.T) { - tmpDir := t.TempDir() - file, err := os.CreateTemp(tmpDir, "") - if err != nil { - t.Fatal(err) - } - - _, err = Build(file.Name(), []string{"ns1", "ns2", "ns3"}, []string{"search1"}, []string{"opt1"}) - if err != nil { - t.Fatal(err) - } - - content, err := os.ReadFile(file.Name()) - if err != nil { - t.Fatal(err) - } - - if expected := "search search1\nnameserver ns1\nnameserver ns2\nnameserver ns3\noptions opt1\n"; !bytes.Contains(content, []byte(expected)) { - t.Errorf("Expected to find '%s' got '%s'", expected, content) - } -} - -func TestBuildWithZeroLengthDomainSearch(t *testing.T) { - tmpDir := t.TempDir() - file, err := os.CreateTemp(tmpDir, "") - if err != nil { - t.Fatal(err) - } - - _, err = Build(file.Name(), []string{"ns1", "ns2", "ns3"}, []string{"."}, []string{"opt1"}) - if err != nil { - t.Fatal(err) - } - - content, err := os.ReadFile(file.Name()) - if err != nil { - t.Fatal(err) - } - - if expected := "nameserver ns1\nnameserver ns2\nnameserver ns3\noptions opt1\n"; !bytes.Contains(content, []byte(expected)) { - t.Errorf("Expected to find '%s' got '%s'", expected, content) - } - if notExpected := "search ."; bytes.Contains(content, []byte(notExpected)) { - t.Errorf("Expected to not find '%s' got '%s'", notExpected, content) - } -} - -func TestBuildWithNoOptions(t *testing.T) { - tmpDir := t.TempDir() - file, err := os.CreateTemp(tmpDir, "") - if err != nil { - t.Fatal(err) - } - - _, err = Build(file.Name(), []string{"ns1", "ns2", "ns3"}, []string{"search1"}, []string{}) - if err != nil { - t.Fatal(err) - } - - content, err := os.ReadFile(file.Name()) - if err != nil { - t.Fatal(err) - } - - if expected := "search search1\nnameserver ns1\nnameserver ns2\nnameserver ns3\n"; !bytes.Contains(content, []byte(expected)) { - t.Errorf("Expected to find '%s' got '%s'", expected, content) - } - if notExpected := "search ."; bytes.Contains(content, []byte(notExpected)) { - t.Errorf("Expected to not find '%s' got '%s'", notExpected, content) - } -} - -func TestFilterResolvDNS(t *testing.T) { - ns0 := "nameserver 10.16.60.14\nnameserver 10.16.60.21\n" - - if result, _ := FilterResolvDNS([]byte(ns0), false); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed No Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } - - ns1 := "nameserver 10.16.60.14\nnameserver 10.16.60.21\nnameserver 127.0.0.1\n" - if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } - - ns1 = "nameserver 10.16.60.14\nnameserver 127.0.0.1\nnameserver 10.16.60.21\n" - if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } - - ns1 = "nameserver 127.0.1.1\nnameserver 10.16.60.14\nnameserver 10.16.60.21\n" - if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } - - ns1 = "nameserver ::1\nnameserver 10.16.60.14\nnameserver 127.0.2.1\nnameserver 10.16.60.21\n" - if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } - - ns1 = "nameserver 10.16.60.14\nnameserver ::1\nnameserver 10.16.60.21\nnameserver ::1" - if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } - - // with IPv6 disabled (false param), the IPv6 nameserver should be removed - ns1 = "nameserver 10.16.60.14\nnameserver 2002:dead:beef::1\nnameserver 10.16.60.21\nnameserver ::1" - if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed Localhost+IPv6 off: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } - - // with IPv6 disabled (false param), the IPv6 link-local nameserver with zone ID should be removed - ns1 = "nameserver 10.16.60.14\nnameserver FE80::BB1%1\nnameserver FE80::BB1%eth0\nnameserver 10.16.60.21\n" - if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed Localhost+IPv6 off: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } - - // with IPv6 enabled, the IPv6 nameserver should be preserved - ns0 = "nameserver 10.16.60.14\nnameserver 2002:dead:beef::1\nnameserver 10.16.60.21\n" - ns1 = "nameserver 10.16.60.14\nnameserver 2002:dead:beef::1\nnameserver 10.16.60.21\nnameserver ::1" - if result, _ := FilterResolvDNS([]byte(ns1), true); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed Localhost+IPv6 on: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } - - // with IPv6 enabled, and no non-localhost servers, Google defaults (both IPv4+IPv6) should be added - ns0 = "\nnameserver 8.8.8.8\nnameserver 8.8.4.4\nnameserver 2001:4860:4860::8888\nnameserver 2001:4860:4860::8844" - ns1 = "nameserver 127.0.0.1\nnameserver ::1\nnameserver 127.0.2.1" - if result, _ := FilterResolvDNS([]byte(ns1), true); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed no Localhost+IPv6 enabled: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } - - // with IPv6 disabled, and no non-localhost servers, Google defaults (only IPv4) should be added - ns0 = "\nnameserver 8.8.8.8\nnameserver 8.8.4.4" - ns1 = "nameserver 127.0.0.1\nnameserver ::1\nnameserver 127.0.2.1" - if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { - if ns0 != string(result.Content) { - t.Errorf("Failed no Localhost+IPv6 enabled: expected \n<%s> got \n<%s>", ns0, string(result.Content)) - } - } -} diff --git a/libnetwork/resolvconf/resolvconf_unix_test.go b/libnetwork/resolvconf/resolvconf_unix_test.go new file mode 100644 index 0000000000..9d630074c8 --- /dev/null +++ b/libnetwork/resolvconf/resolvconf_unix_test.go @@ -0,0 +1,302 @@ +//go:build !windows +// +build !windows + +package resolvconf + +import ( + "bytes" + "os" + "testing" +) + +func TestGet(t *testing.T) { + actual, err := Get() + if err != nil { + t.Fatal(err) + } + expected, err := os.ReadFile(Path()) + if err != nil { + t.Fatal(err) + } + if !bytes.Equal(actual.Content, expected) { + t.Errorf("%s and GetResolvConf have different content.", Path()) + } + if !bytes.Equal(actual.Hash, hashData(expected)) { + t.Errorf("%s and GetResolvConf have different hashes.", Path()) + } +} + +func TestGetNameservers(t *testing.T) { + for resolv, result := range map[string][]string{` +nameserver 1.2.3.4 +nameserver 40.3.200.10 +search example.com`: {"1.2.3.4", "40.3.200.10"}, + `search example.com`: {}, + `nameserver 1.2.3.4 +search example.com +nameserver 4.30.20.100`: {"1.2.3.4", "4.30.20.100"}, + ``: {}, + ` nameserver 1.2.3.4 `: {"1.2.3.4"}, + `search example.com +nameserver 1.2.3.4 +#nameserver 4.3.2.1`: {"1.2.3.4"}, + `search example.com +nameserver 1.2.3.4 # not 4.3.2.1`: {"1.2.3.4"}, + } { + test := GetNameservers([]byte(resolv), IP) + if !strSlicesEqual(test, result) { + t.Errorf("Wrong nameserver string {%s} should be %v. Input: %s", test, result, resolv) + } + } +} + +func TestGetNameserversAsCIDR(t *testing.T) { + for resolv, result := range map[string][]string{` +nameserver 1.2.3.4 +nameserver 40.3.200.10 +search example.com`: {"1.2.3.4/32", "40.3.200.10/32"}, + `search example.com`: {}, + `nameserver 1.2.3.4 +search example.com +nameserver 4.30.20.100`: {"1.2.3.4/32", "4.30.20.100/32"}, + ``: {}, + ` nameserver 1.2.3.4 `: {"1.2.3.4/32"}, + `search example.com +nameserver 1.2.3.4 +#nameserver 4.3.2.1`: {"1.2.3.4/32"}, + `search example.com +nameserver 1.2.3.4 # not 4.3.2.1`: {"1.2.3.4/32"}, + } { + test := GetNameserversAsCIDR([]byte(resolv)) + if !strSlicesEqual(test, result) { + t.Errorf("Wrong nameserver string {%s} should be %v. Input: %s", test, result, resolv) + } + } +} + +func TestGetSearchDomains(t *testing.T) { + for resolv, result := range map[string][]string{ + `search example.com`: {"example.com"}, + `search example.com # ignored`: {"example.com"}, + ` search example.com `: {"example.com"}, + ` search example.com # ignored`: {"example.com"}, + `search foo.example.com example.com`: {"foo.example.com", "example.com"}, + ` search foo.example.com example.com `: {"foo.example.com", "example.com"}, + ` search foo.example.com example.com # ignored`: {"foo.example.com", "example.com"}, + ``: {}, + `# ignored`: {}, + `nameserver 1.2.3.4 +search foo.example.com example.com`: {"foo.example.com", "example.com"}, + `nameserver 1.2.3.4 +search dup1.example.com dup2.example.com +search foo.example.com example.com`: {"foo.example.com", "example.com"}, + `nameserver 1.2.3.4 +search foo.example.com example.com +nameserver 4.30.20.100`: {"foo.example.com", "example.com"}, + } { + test := GetSearchDomains([]byte(resolv)) + if !strSlicesEqual(test, result) { + t.Errorf("Wrong search domain string {%s} should be %v. Input: %s", test, result, resolv) + } + } +} + +func TestGetOptions(t *testing.T) { + for resolv, result := range map[string][]string{ + `options opt1`: {"opt1"}, + `options opt1 # ignored`: {"opt1"}, + ` options opt1 `: {"opt1"}, + ` options opt1 # ignored`: {"opt1"}, + `options opt1 opt2 opt3`: {"opt1", "opt2", "opt3"}, + `options opt1 opt2 opt3 # ignored`: {"opt1", "opt2", "opt3"}, + ` options opt1 opt2 opt3 `: {"opt1", "opt2", "opt3"}, + ` options opt1 opt2 opt3 # ignored`: {"opt1", "opt2", "opt3"}, + ``: {}, + `# ignored`: {}, + `nameserver 1.2.3.4`: {}, + `nameserver 1.2.3.4 +options opt1 opt2 opt3`: {"opt1", "opt2", "opt3"}, + `nameserver 1.2.3.4 +options opt1 opt2 +options opt3 opt4`: {"opt3", "opt4"}, + } { + test := GetOptions([]byte(resolv)) + if !strSlicesEqual(test, result) { + t.Errorf("Wrong options string {%s} should be %v. Input: %s", test, result, resolv) + } + } +} + +func strSlicesEqual(a, b []string) bool { + if len(a) != len(b) { + return false + } + + for i, v := range a { + if v != b[i] { + return false + } + } + + return true +} + +func TestBuild(t *testing.T) { + tmpDir := t.TempDir() + file, err := os.CreateTemp(tmpDir, "") + if err != nil { + t.Fatal(err) + } + + _, err = Build(file.Name(), []string{"ns1", "ns2", "ns3"}, []string{"search1"}, []string{"opt1"}) + if err != nil { + t.Fatal(err) + } + + content, err := os.ReadFile(file.Name()) + if err != nil { + t.Fatal(err) + } + + if expected := "search search1\nnameserver ns1\nnameserver ns2\nnameserver ns3\noptions opt1\n"; !bytes.Contains(content, []byte(expected)) { + t.Errorf("Expected to find '%s' got '%s'", expected, content) + } +} + +func TestBuildWithZeroLengthDomainSearch(t *testing.T) { + tmpDir := t.TempDir() + file, err := os.CreateTemp(tmpDir, "") + if err != nil { + t.Fatal(err) + } + + _, err = Build(file.Name(), []string{"ns1", "ns2", "ns3"}, []string{"."}, []string{"opt1"}) + if err != nil { + t.Fatal(err) + } + + content, err := os.ReadFile(file.Name()) + if err != nil { + t.Fatal(err) + } + + if expected := "nameserver ns1\nnameserver ns2\nnameserver ns3\noptions opt1\n"; !bytes.Contains(content, []byte(expected)) { + t.Errorf("Expected to find '%s' got '%s'", expected, content) + } + if notExpected := "search ."; bytes.Contains(content, []byte(notExpected)) { + t.Errorf("Expected to not find '%s' got '%s'", notExpected, content) + } +} + +func TestBuildWithNoOptions(t *testing.T) { + tmpDir := t.TempDir() + file, err := os.CreateTemp(tmpDir, "") + if err != nil { + t.Fatal(err) + } + + _, err = Build(file.Name(), []string{"ns1", "ns2", "ns3"}, []string{"search1"}, []string{}) + if err != nil { + t.Fatal(err) + } + + content, err := os.ReadFile(file.Name()) + if err != nil { + t.Fatal(err) + } + + if expected := "search search1\nnameserver ns1\nnameserver ns2\nnameserver ns3\n"; !bytes.Contains(content, []byte(expected)) { + t.Errorf("Expected to find '%s' got '%s'", expected, content) + } + if notExpected := "search ."; bytes.Contains(content, []byte(notExpected)) { + t.Errorf("Expected to not find '%s' got '%s'", notExpected, content) + } +} + +func TestFilterResolvDNS(t *testing.T) { + ns0 := "nameserver 10.16.60.14\nnameserver 10.16.60.21\n" + + if result, _ := FilterResolvDNS([]byte(ns0), false); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed No Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } + + ns1 := "nameserver 10.16.60.14\nnameserver 10.16.60.21\nnameserver 127.0.0.1\n" + if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } + + ns1 = "nameserver 10.16.60.14\nnameserver 127.0.0.1\nnameserver 10.16.60.21\n" + if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } + + ns1 = "nameserver 127.0.1.1\nnameserver 10.16.60.14\nnameserver 10.16.60.21\n" + if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } + + ns1 = "nameserver ::1\nnameserver 10.16.60.14\nnameserver 127.0.2.1\nnameserver 10.16.60.21\n" + if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } + + ns1 = "nameserver 10.16.60.14\nnameserver ::1\nnameserver 10.16.60.21\nnameserver ::1" + if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed Localhost: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } + + // with IPv6 disabled (false param), the IPv6 nameserver should be removed + ns1 = "nameserver 10.16.60.14\nnameserver 2002:dead:beef::1\nnameserver 10.16.60.21\nnameserver ::1" + if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed Localhost+IPv6 off: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } + + // with IPv6 disabled (false param), the IPv6 link-local nameserver with zone ID should be removed + ns1 = "nameserver 10.16.60.14\nnameserver FE80::BB1%1\nnameserver FE80::BB1%eth0\nnameserver 10.16.60.21\n" + if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed Localhost+IPv6 off: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } + + // with IPv6 enabled, the IPv6 nameserver should be preserved + ns0 = "nameserver 10.16.60.14\nnameserver 2002:dead:beef::1\nnameserver 10.16.60.21\n" + ns1 = "nameserver 10.16.60.14\nnameserver 2002:dead:beef::1\nnameserver 10.16.60.21\nnameserver ::1" + if result, _ := FilterResolvDNS([]byte(ns1), true); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed Localhost+IPv6 on: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } + + // with IPv6 enabled, and no non-localhost servers, Google defaults (both IPv4+IPv6) should be added + ns0 = "\nnameserver 8.8.8.8\nnameserver 8.8.4.4\nnameserver 2001:4860:4860::8888\nnameserver 2001:4860:4860::8844" + ns1 = "nameserver 127.0.0.1\nnameserver ::1\nnameserver 127.0.2.1" + if result, _ := FilterResolvDNS([]byte(ns1), true); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed no Localhost+IPv6 enabled: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } + + // with IPv6 disabled, and no non-localhost servers, Google defaults (only IPv4) should be added + ns0 = "\nnameserver 8.8.8.8\nnameserver 8.8.4.4" + ns1 = "nameserver 127.0.0.1\nnameserver ::1\nnameserver 127.0.2.1" + if result, _ := FilterResolvDNS([]byte(ns1), false); result != nil { + if ns0 != string(result.Content) { + t.Errorf("Failed no Localhost+IPv6 enabled: expected \n<%s> got \n<%s>", ns0, string(result.Content)) + } + } +} -- cgit v1.2.1