浏览代码

daemon/config: clean up tests to use common helper

Signed-off-by: Bjorn Neergaard <bneergaard@mirantis.com>
Bjorn Neergaard 2 年之前
父节点
当前提交
1dcf7d5b03
共有 3 个文件被更改,包括 46 次插入99 次删除
  1. 8 18
      daemon/config/config_linux_test.go
  2. 36 71
      daemon/config/config_test.go
  3. 2 10
      daemon/config/config_windows_test.go

+ 8 - 18
daemon/config/config_linux_test.go

@@ -10,11 +10,10 @@ import (
 	"github.com/spf13/pflag"
 	"github.com/spf13/pflag"
 	"gotest.tools/v3/assert"
 	"gotest.tools/v3/assert"
 	is "gotest.tools/v3/assert/cmp"
 	is "gotest.tools/v3/assert/cmp"
-	"gotest.tools/v3/fs"
 )
 )
 
 
 func TestGetConflictFreeConfiguration(t *testing.T) {
 func TestGetConflictFreeConfiguration(t *testing.T) {
-	configFileData := `
+	configFile := makeConfigFile(t, `
 		{
 		{
 			"debug": true,
 			"debug": true,
 			"default-ulimits": {
 			"default-ulimits": {
@@ -27,10 +26,7 @@ func TestGetConflictFreeConfiguration(t *testing.T) {
 			"log-opts": {
 			"log-opts": {
 				"tag": "test_tag"
 				"tag": "test_tag"
 			}
 			}
-		}`
-
-	file := fs.NewFile(t, "docker-config", fs.WithContent(configFileData))
-	defer file.Remove()
+		}`)
 
 
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	var debug bool
 	var debug bool
@@ -38,7 +34,7 @@ func TestGetConflictFreeConfiguration(t *testing.T) {
 	flags.Var(opts.NewNamedUlimitOpt("default-ulimits", nil), "default-ulimit", "")
 	flags.Var(opts.NewNamedUlimitOpt("default-ulimits", nil), "default-ulimit", "")
 	flags.Var(opts.NewNamedMapOpts("log-opts", nil, nil), "log-opt", "")
 	flags.Var(opts.NewNamedMapOpts("log-opts", nil, nil), "log-opt", "")
 
 
-	cc, err := getConflictFreeConfiguration(file.Path(), flags)
+	cc, err := getConflictFreeConfiguration(configFile, flags)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	assert.Check(t, cc.Debug)
 	assert.Check(t, cc.Debug)
@@ -55,7 +51,7 @@ func TestGetConflictFreeConfiguration(t *testing.T) {
 }
 }
 
 
 func TestDaemonConfigurationMerge(t *testing.T) {
 func TestDaemonConfigurationMerge(t *testing.T) {
-	configFileData := `
+	configFile := makeConfigFile(t, `
 		{
 		{
 			"debug": true,
 			"debug": true,
 			"default-ulimits": {
 			"default-ulimits": {
@@ -65,10 +61,7 @@ func TestDaemonConfigurationMerge(t *testing.T) {
 					"Soft": 1024
 					"Soft": 1024
 				}
 				}
 			}
 			}
-		}`
-
-	file := fs.NewFile(t, "docker-config", fs.WithContent(configFileData))
-	defer file.Remove()
+		}`)
 
 
 	conf, err := New()
 	conf, err := New()
 	assert.NilError(t, err)
 	assert.NilError(t, err)
@@ -83,7 +76,7 @@ func TestDaemonConfigurationMerge(t *testing.T) {
 	assert.Check(t, flags.Set("log-driver", "syslog"))
 	assert.Check(t, flags.Set("log-driver", "syslog"))
 	assert.Check(t, flags.Set("log-opt", "tag=from_flag"))
 	assert.Check(t, flags.Set("log-opt", "tag=from_flag"))
 
 
-	cc, err := MergeDaemonConfigurations(conf, flags, file.Path())
+	cc, err := MergeDaemonConfigurations(conf, flags, configFile)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	assert.Check(t, cc.Debug)
 	assert.Check(t, cc.Debug)
@@ -108,10 +101,7 @@ func TestDaemonConfigurationMerge(t *testing.T) {
 }
 }
 
 
 func TestDaemonConfigurationMergeShmSize(t *testing.T) {
 func TestDaemonConfigurationMergeShmSize(t *testing.T) {
-	data := `{"default-shm-size": "1g"}`
-
-	file := fs.NewFile(t, "docker-config", fs.WithContent(data))
-	defer file.Remove()
+	configFile := makeConfigFile(t, `{"default-shm-size": "1g"}`)
 
 
 	c, err := New()
 	c, err := New()
 	assert.NilError(t, err)
 	assert.NilError(t, err)
@@ -120,7 +110,7 @@ func TestDaemonConfigurationMergeShmSize(t *testing.T) {
 	shmSize := opts.MemBytes(DefaultShmSize)
 	shmSize := opts.MemBytes(DefaultShmSize)
 	flags.Var(&shmSize, "default-shm-size", "")
 	flags.Var(&shmSize, "default-shm-size", "")
 
 
-	cc, err := MergeDaemonConfigurations(c, flags, file.Path())
+	cc, err := MergeDaemonConfigurations(c, flags, configFile)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 
 
 	expectedValue := 1 * 1024 * 1024 * 1024
 	expectedValue := 1 * 1024 * 1024 * 1024

+ 36 - 71
daemon/config/config_test.go

@@ -15,38 +15,34 @@ import (
 	"github.com/spf13/pflag"
 	"github.com/spf13/pflag"
 	"gotest.tools/v3/assert"
 	"gotest.tools/v3/assert"
 	is "gotest.tools/v3/assert/cmp"
 	is "gotest.tools/v3/assert/cmp"
-	"gotest.tools/v3/fs"
 	"gotest.tools/v3/skip"
 	"gotest.tools/v3/skip"
 )
 )
 
 
+func makeConfigFile(t *testing.T, content string) string {
+	t.Helper()
+	name := filepath.Join(t.TempDir(), "daemon.json")
+	err := os.WriteFile(name, []byte(content), 0666)
+	assert.NilError(t, err)
+	return name
+}
+
 func TestDaemonConfigurationNotFound(t *testing.T) {
 func TestDaemonConfigurationNotFound(t *testing.T) {
 	_, err := MergeDaemonConfigurations(&Config{}, nil, "/tmp/foo-bar-baz-docker")
 	_, err := MergeDaemonConfigurations(&Config{}, nil, "/tmp/foo-bar-baz-docker")
 	assert.Check(t, os.IsNotExist(err), "got: %[1]T: %[1]v", err)
 	assert.Check(t, os.IsNotExist(err), "got: %[1]T: %[1]v", err)
 }
 }
 
 
 func TestDaemonBrokenConfiguration(t *testing.T) {
 func TestDaemonBrokenConfiguration(t *testing.T) {
-	f, err := os.CreateTemp("", "docker-config-")
-	assert.NilError(t, err)
-
-	configFile := f.Name()
-	f.Write([]byte(`{"Debug": tru`))
-	f.Close()
+	configFile := makeConfigFile(t, `{"Debug": tru`)
 
 
-	_, err = MergeDaemonConfigurations(&Config{}, nil, configFile)
+	_, err := MergeDaemonConfigurations(&Config{}, nil, configFile)
 	assert.ErrorContains(t, err, `invalid character ' ' in literal true`)
 	assert.ErrorContains(t, err, `invalid character ' ' in literal true`)
 }
 }
 
 
 // TestDaemonConfigurationWithBOM ensures that the UTF-8 byte order mark is ignored when reading the configuration file.
 // TestDaemonConfigurationWithBOM ensures that the UTF-8 byte order mark is ignored when reading the configuration file.
 func TestDaemonConfigurationWithBOM(t *testing.T) {
 func TestDaemonConfigurationWithBOM(t *testing.T) {
-	configFile := filepath.Join(t.TempDir(), "daemon.json")
+	configFile := makeConfigFile(t, "\xef\xbb\xbf{\"debug\": true}")
 
 
-	f, err := os.Create(configFile)
-	assert.NilError(t, err)
-
-	f.Write([]byte("\xef\xbb\xbf{\"debug\": true}"))
-	f.Close()
-
-	_, err = MergeDaemonConfigurations(&Config{}, nil, configFile)
+	_, err := MergeDaemonConfigurations(&Config{}, nil, configFile)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 }
 }
 
 
@@ -71,18 +67,13 @@ func TestFindConfigurationConflictsWithNamedOptions(t *testing.T) {
 }
 }
 
 
 func TestDaemonConfigurationMergeConflicts(t *testing.T) {
 func TestDaemonConfigurationMergeConflicts(t *testing.T) {
-	f, err := os.CreateTemp("", "docker-config-")
-	assert.NilError(t, err)
-
-	configFile := f.Name()
-	f.Write([]byte(`{"debug": true}`))
-	f.Close()
+	configFile := makeConfigFile(t, `{"debug": true}`)
 
 
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	flags.Bool("debug", false, "")
 	flags.Bool("debug", false, "")
 	assert.Check(t, flags.Set("debug", "false"))
 	assert.Check(t, flags.Set("debug", "false"))
 
 
-	_, err = MergeDaemonConfigurations(&Config{}, flags, configFile)
+	_, err := MergeDaemonConfigurations(&Config{}, flags, configFile)
 	if err == nil {
 	if err == nil {
 		t.Fatal("expected error, got nil")
 		t.Fatal("expected error, got nil")
 	}
 	}
@@ -92,51 +83,34 @@ func TestDaemonConfigurationMergeConflicts(t *testing.T) {
 }
 }
 
 
 func TestDaemonConfigurationMergeConcurrent(t *testing.T) {
 func TestDaemonConfigurationMergeConcurrent(t *testing.T) {
-	f, err := os.CreateTemp("", "docker-config-")
-	assert.NilError(t, err)
-
-	configFile := f.Name()
-	f.Write([]byte(`{"max-concurrent-downloads": 1}`))
-	f.Close()
+	configFile := makeConfigFile(t, `{"max-concurrent-downloads": 1}`)
 
 
-	_, err = MergeDaemonConfigurations(&Config{}, nil, configFile)
+	_, err := MergeDaemonConfigurations(&Config{}, nil, configFile)
 	assert.NilError(t, err)
 	assert.NilError(t, err)
 }
 }
 
 
 func TestDaemonConfigurationMergeConcurrentError(t *testing.T) {
 func TestDaemonConfigurationMergeConcurrentError(t *testing.T) {
-	f, err := os.CreateTemp("", "docker-config-")
-	assert.NilError(t, err)
+	configFile := makeConfigFile(t, `{"max-concurrent-downloads": -1}`)
 
 
-	configFile := f.Name()
-	f.Write([]byte(`{"max-concurrent-downloads": -1}`))
-	f.Close()
-
-	_, err = MergeDaemonConfigurations(&Config{}, nil, configFile)
+	_, err := MergeDaemonConfigurations(&Config{}, nil, configFile)
 	assert.ErrorContains(t, err, `invalid max concurrent downloads: -1`)
 	assert.ErrorContains(t, err, `invalid max concurrent downloads: -1`)
 }
 }
 
 
 func TestDaemonConfigurationMergeConflictsWithInnerStructs(t *testing.T) {
 func TestDaemonConfigurationMergeConflictsWithInnerStructs(t *testing.T) {
-	f, err := os.CreateTemp("", "docker-config-")
-	assert.NilError(t, err)
-
-	configFile := f.Name()
-	f.Write([]byte(`{"tlscacert": "/etc/certificates/ca.pem"}`))
-	f.Close()
+	configFile := makeConfigFile(t, `{"tlscacert": "/etc/certificates/ca.pem"}`)
 
 
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	flags.String("tlscacert", "", "")
 	flags.String("tlscacert", "", "")
 	assert.Check(t, flags.Set("tlscacert", "~/.docker/ca.pem"))
 	assert.Check(t, flags.Set("tlscacert", "~/.docker/ca.pem"))
 
 
-	_, err = MergeDaemonConfigurations(&Config{}, flags, configFile)
+	_, err := MergeDaemonConfigurations(&Config{}, flags, configFile)
 	assert.ErrorContains(t, err, `the following directives are specified both as a flag and in the configuration file: tlscacert`)
 	assert.ErrorContains(t, err, `the following directives are specified both as a flag and in the configuration file: tlscacert`)
 }
 }
 
 
-// Test for #40711
+// TestDaemonConfigurationMergeDefaultAddressPools is a regression test for #40711.
 func TestDaemonConfigurationMergeDefaultAddressPools(t *testing.T) {
 func TestDaemonConfigurationMergeDefaultAddressPools(t *testing.T) {
-	emptyConfigFile := fs.NewFile(t, "config", fs.WithContent(`{}`))
-	defer emptyConfigFile.Remove()
-	configFile := fs.NewFile(t, "config", fs.WithContent(`{"default-address-pools":[{"base": "10.123.0.0/16", "size": 24 }]}`))
-	defer configFile.Remove()
+	emptyConfigFile := makeConfigFile(t, `{}`)
+	configFile := makeConfigFile(t, `{"default-address-pools":[{"base": "10.123.0.0/16", "size": 24 }]}`)
 
 
 	expected := []*ipamutils.NetworkToSplit{{Base: "10.123.0.0/16", Size: 24}}
 	expected := []*ipamutils.NetworkToSplit{{Base: "10.123.0.0/16", Size: 24}}
 
 
@@ -146,7 +120,7 @@ func TestDaemonConfigurationMergeDefaultAddressPools(t *testing.T) {
 		flags.Var(&conf.NetworkConfig.DefaultAddressPools, "default-address-pool", "")
 		flags.Var(&conf.NetworkConfig.DefaultAddressPools, "default-address-pool", "")
 		assert.Check(t, flags.Set("default-address-pool", "base=10.123.0.0/16,size=24"))
 		assert.Check(t, flags.Set("default-address-pool", "base=10.123.0.0/16,size=24"))
 
 
-		config, err := MergeDaemonConfigurations(&conf, flags, emptyConfigFile.Path())
+		config, err := MergeDaemonConfigurations(&conf, flags, emptyConfigFile)
 		assert.NilError(t, err)
 		assert.NilError(t, err)
 		assert.DeepEqual(t, config.DefaultAddressPools.Value(), expected)
 		assert.DeepEqual(t, config.DefaultAddressPools.Value(), expected)
 	})
 	})
@@ -156,7 +130,7 @@ func TestDaemonConfigurationMergeDefaultAddressPools(t *testing.T) {
 		flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 		flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 		flags.Var(&conf.NetworkConfig.DefaultAddressPools, "default-address-pool", "")
 		flags.Var(&conf.NetworkConfig.DefaultAddressPools, "default-address-pool", "")
 
 
-		config, err := MergeDaemonConfigurations(&conf, flags, configFile.Path())
+		config, err := MergeDaemonConfigurations(&conf, flags, configFile)
 		assert.NilError(t, err)
 		assert.NilError(t, err)
 		assert.DeepEqual(t, config.DefaultAddressPools.Value(), expected)
 		assert.DeepEqual(t, config.DefaultAddressPools.Value(), expected)
 	})
 	})
@@ -167,7 +141,7 @@ func TestDaemonConfigurationMergeDefaultAddressPools(t *testing.T) {
 		flags.Var(&conf.NetworkConfig.DefaultAddressPools, "default-address-pool", "")
 		flags.Var(&conf.NetworkConfig.DefaultAddressPools, "default-address-pool", "")
 		assert.Check(t, flags.Set("default-address-pool", "base=10.123.0.0/16,size=24"))
 		assert.Check(t, flags.Set("default-address-pool", "base=10.123.0.0/16,size=24"))
 
 
-		_, err := MergeDaemonConfigurations(&conf, flags, configFile.Path())
+		_, err := MergeDaemonConfigurations(&conf, flags, configFile)
 		assert.ErrorContains(t, err, "the following directives are specified both as a flag and in the configuration file")
 		assert.ErrorContains(t, err, "the following directives are specified both as a flag and in the configuration file")
 		assert.ErrorContains(t, err, "default-address-pools")
 		assert.ErrorContains(t, err, "default-address-pools")
 	})
 	})
@@ -520,8 +494,8 @@ func field(field string) cmp.Option {
 	return cmpopts.IgnoreFields(Config{}, ignoreFields...)
 	return cmpopts.IgnoreFields(Config{}, ignoreFields...)
 }
 }
 
 
-// TestReloadSetConfigFileNotExist tests that when `--config-file` is set
-// and it doesn't exist the `Reload` function returns an error.
+// TestReloadSetConfigFileNotExist tests that when `--config-file` is set, and it doesn't exist the `Reload` function
+// returns an error.
 func TestReloadSetConfigFileNotExist(t *testing.T) {
 func TestReloadSetConfigFileNotExist(t *testing.T) {
 	configFile := "/tmp/blabla/not/exists/config.json"
 	configFile := "/tmp/blabla/not/exists/config.json"
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
@@ -532,8 +506,8 @@ func TestReloadSetConfigFileNotExist(t *testing.T) {
 	assert.Check(t, is.ErrorContains(err, "unable to configure the Docker daemon with file"))
 	assert.Check(t, is.ErrorContains(err, "unable to configure the Docker daemon with file"))
 }
 }
 
 
-// TestReloadDefaultConfigNotExist tests that if the default configuration file
-// doesn't exist the daemon still will be reloaded.
+// TestReloadDefaultConfigNotExist tests that if the default configuration file doesn't exist the daemon still will
+// still be reloaded.
 func TestReloadDefaultConfigNotExist(t *testing.T) {
 func TestReloadDefaultConfigNotExist(t *testing.T) {
 	skip.If(t, os.Getuid() != 0, "skipping test that requires root")
 	skip.If(t, os.Getuid() != 0, "skipping test that requires root")
 	defaultConfigFile := "/tmp/blabla/not/exists/daemon.json"
 	defaultConfigFile := "/tmp/blabla/not/exists/daemon.json"
@@ -547,20 +521,15 @@ func TestReloadDefaultConfigNotExist(t *testing.T) {
 	assert.Check(t, reloaded)
 	assert.Check(t, reloaded)
 }
 }
 
 
-// TestReloadBadDefaultConfig tests that when `--config-file` is not set
-// and the default configuration file exists and is bad return an error
+// TestReloadBadDefaultConfig tests that when `--config-file` is not set and the default configuration file exists and
+// is bad, an error is returned.
 func TestReloadBadDefaultConfig(t *testing.T) {
 func TestReloadBadDefaultConfig(t *testing.T) {
-	f, err := os.CreateTemp("", "docker-config-")
-	assert.NilError(t, err)
-
-	configFile := f.Name()
-	f.Write([]byte(`{wrong: "configuration"}`))
-	f.Close()
+	configFile := makeConfigFile(t, `{wrong: "configuration"}`)
 
 
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	flags.String("config-file", configFile, "")
 	flags.String("config-file", configFile, "")
 	reloaded := false
 	reloaded := false
-	err = Reload(configFile, flags, func(c *Config) {
+	err := Reload(configFile, flags, func(c *Config) {
 		reloaded = true
 		reloaded = true
 	})
 	})
 	assert.Check(t, is.ErrorContains(err, "unable to configure the Docker daemon with file"))
 	assert.Check(t, is.ErrorContains(err, "unable to configure the Docker daemon with file"))
@@ -568,9 +537,7 @@ func TestReloadBadDefaultConfig(t *testing.T) {
 }
 }
 
 
 func TestReloadWithConflictingLabels(t *testing.T) {
 func TestReloadWithConflictingLabels(t *testing.T) {
-	tempFile := fs.NewFile(t, "config", fs.WithContent(`{"labels":["foo=bar","foo=baz"]}`))
-	defer tempFile.Remove()
-	configFile := tempFile.Path()
+	configFile := makeConfigFile(t, `{"labels": ["foo=bar", "foo=baz"]}`)
 
 
 	var lbls []string
 	var lbls []string
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
@@ -585,9 +552,7 @@ func TestReloadWithConflictingLabels(t *testing.T) {
 }
 }
 
 
 func TestReloadWithDuplicateLabels(t *testing.T) {
 func TestReloadWithDuplicateLabels(t *testing.T) {
-	tempFile := fs.NewFile(t, "config", fs.WithContent(`{"labels":["foo=the-same","foo=the-same"]}`))
-	defer tempFile.Remove()
-	configFile := tempFile.Path()
+	configFile := makeConfigFile(t, `{"labels": ["foo=the-same", "foo=the-same"]}`)
 
 
 	var lbls []string
 	var lbls []string
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
 	flags := pflag.NewFlagSet("test", pflag.ContinueOnError)

+ 2 - 10
daemon/config/config_windows_test.go

@@ -1,7 +1,6 @@
 package config // import "github.com/docker/docker/daemon/config"
 package config // import "github.com/docker/docker/daemon/config"
 
 
 import (
 import (
-	"os"
 	"testing"
 	"testing"
 
 
 	"github.com/docker/docker/opts"
 	"github.com/docker/docker/opts"
@@ -11,17 +10,10 @@ import (
 )
 )
 
 
 func TestDaemonConfigurationMerge(t *testing.T) {
 func TestDaemonConfigurationMerge(t *testing.T) {
-	f, err := os.CreateTemp("", "docker-config-")
-	assert.NilError(t, err)
-
-	configFile := f.Name()
-
-	f.Write([]byte(`
+	configFile := makeConfigFile(t, `
 		{
 		{
 			"debug": true
 			"debug": true
-		}`))
-
-	f.Close()
+		}`)
 
 
 	conf, err := New()
 	conf, err := New()
 	assert.NilError(t, err)
 	assert.NilError(t, err)