From 35e062dde1eaa985bdb050e8a5bb753e836f8560 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 2 Jun 2025 12:18:40 +0200 Subject: [PATCH] libnetwork/resolvconf: rewrite TestBuild tests to a table-test Also adding test-cases for; - empty options for all fields - invalid nameServer (domain instead of IP). Signed-off-by: Sebastiaan van Stijn --- libnetwork/resolvconf/resolvconf_unix_test.go | 138 ++++++++---------- 1 file changed, 62 insertions(+), 76 deletions(-) diff --git a/libnetwork/resolvconf/resolvconf_unix_test.go b/libnetwork/resolvconf/resolvconf_unix_test.go index 3f98a7e39d..20859a70e2 100644 --- a/libnetwork/resolvconf/resolvconf_unix_test.go +++ b/libnetwork/resolvconf/resolvconf_unix_test.go @@ -300,93 +300,79 @@ const ( ) func TestBuild(t *testing.T) { - tmpDir := t.TempDir() - file, err := os.CreateTemp(tmpDir, "") - if err != nil { - t.Fatal(err) - } - - f, err := Build(file.Name(), []string{testNS1, testNS2, testNS3}, []string{"search1"}, []string{"opt1"}) - if err != nil { - t.Fatal(err) - } - - const expected = `nameserver 192.0.2.1 + tests := []struct { + doc string + nameServers []string + dnsSearch []string + dnsOptions []string + expOut string + expErr string + }{ + { + doc: "no options", + expOut: ``, + }, + { + doc: "all options", + nameServers: []string{testNS1, testNS2, testNS3}, + dnsSearch: []string{"search1"}, + dnsOptions: []string{"opt1"}, + expOut: `nameserver 192.0.2.1 nameserver 2001:db8::1 nameserver 203.0.113.3 search search1 options opt1 -` - - if !bytes.Equal(f.Content, []byte(expected)) { - t.Errorf("Expected to find '%s' got '%s'", expected, f.Content) - } - content, err := os.ReadFile(file.Name()) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(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) - } - - f, err := Build(file.Name(), []string{testNS1, testNS2, testNS3}, []string{"."}, []string{"opt1"}) - if err != nil { - t.Fatal(err) - } - - const expected = `nameserver 192.0.2.1 +`, + }, + { + doc: "zero-length dns search", + nameServers: []string{testNS1, testNS2, testNS3}, + dnsSearch: []string{"."}, + dnsOptions: []string{"opt1"}, + expOut: `nameserver 192.0.2.1 nameserver 2001:db8::1 nameserver 203.0.113.3 options opt1 -` - - if !bytes.Equal(f.Content, []byte(expected)) { - t.Errorf("Expected to find '%s' got '%s'", expected, f.Content) - } - content, err := os.ReadFile(file.Name()) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(content, []byte(expected)) { - t.Errorf("Expected to find '%s' got '%s'", expected, content) - } -} - -func TestBuildWithNoOptions(t *testing.T) { - tmpDir := t.TempDir() - file, err := os.CreateTemp(tmpDir, "") - if err != nil { - t.Fatal(err) - } - - f, err := Build(file.Name(), []string{testNS1, testNS2, testNS3}, []string{"search1"}, []string{}) - if err != nil { - t.Fatal(err) - } - - const expected = `nameserver 192.0.2.1 +`, + }, + { + doc: "no dns options", + nameServers: []string{testNS1, testNS2, testNS3}, + dnsSearch: []string{"search1"}, + dnsOptions: []string{}, + expOut: `nameserver 192.0.2.1 nameserver 2001:db8::1 nameserver 203.0.113.3 search search1 -` +`, + }, + { + doc: "invalid nameserver", + nameServers: []string{"resolver.example.com"}, + expErr: `ParseAddr("resolver.example.com"): unexpected character (at "resolver.example.com")`, + }, + } - if !bytes.Equal(f.Content, []byte(expected)) { - t.Errorf("Expected to find '%s' got '%s'", expected, f.Content) - } - content, err := os.ReadFile(file.Name()) - if err != nil { - t.Fatal(err) - } - if !bytes.Equal(content, []byte(expected)) { - t.Errorf("Expected to find '%s' got '%s'", expected, content) + tmpDir := t.TempDir() + for _, tc := range tests { + t.Run(tc.doc, func(t *testing.T) { + file, err := os.CreateTemp(tmpDir, "") + assert.NilError(t, err) + + f, err := Build(file.Name(), tc.nameServers, tc.dnsSearch, tc.dnsOptions) + if tc.expErr != "" { + assert.Error(t, err, tc.expErr) + } else if err != nil { + assert.NilError(t, err) + assert.Equal(t, string(f.Content), tc.expOut) + } + + // Verify the content matches the expected; for error-cases, + // this verifies the file is empty. + content, err := os.ReadFile(file.Name()) + assert.NilError(t, err) + assert.Equal(t, string(content), tc.expOut) + }) } }