|
@@ -3,21 +3,59 @@
|
|
package config
|
|
package config
|
|
|
|
|
|
import (
|
|
import (
|
|
- "io/ioutil"
|
|
|
|
- "runtime"
|
|
|
|
-
|
|
|
|
"testing"
|
|
"testing"
|
|
|
|
+
|
|
|
|
+ "github.com/docker/docker/opts"
|
|
|
|
+ "github.com/docker/docker/pkg/testutil/tempfile"
|
|
|
|
+ "github.com/docker/go-units"
|
|
|
|
+ "github.com/spf13/pflag"
|
|
|
|
+ "github.com/stretchr/testify/assert"
|
|
|
|
+ "github.com/stretchr/testify/require"
|
|
)
|
|
)
|
|
|
|
|
|
-func TestDaemonConfigurationMerge(t *testing.T) {
|
|
|
|
- f, err := ioutil.TempFile("", "docker-config-")
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
|
|
+func TestGetConflictFreeConfiguration(t *testing.T) {
|
|
|
|
+ configFileData := string([]byte(`
|
|
|
|
+ {
|
|
|
|
+ "debug": true,
|
|
|
|
+ "default-ulimits": {
|
|
|
|
+ "nofile": {
|
|
|
|
+ "Name": "nofile",
|
|
|
|
+ "Hard": 2048,
|
|
|
|
+ "Soft": 1024
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ "log-opts": {
|
|
|
|
+ "tag": "test_tag"
|
|
|
|
+ }
|
|
|
|
+ }`))
|
|
|
|
+
|
|
|
|
+ file := tempfile.NewTempFile(t, "docker-config", configFileData)
|
|
|
|
+ defer file.Remove()
|
|
|
|
+
|
|
|
|
+ flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
|
|
|
+ var debug bool
|
|
|
|
+ flags.BoolVarP(&debug, "debug", "D", false, "")
|
|
|
|
+ flags.Var(opts.NewNamedUlimitOpt("default-ulimits", nil), "default-ulimit", "")
|
|
|
|
+ flags.Var(opts.NewNamedMapOpts("log-opts", nil, nil), "log-opt", "")
|
|
|
|
+
|
|
|
|
+ cc, err := getConflictFreeConfiguration(file.Name(), flags)
|
|
|
|
+ require.NoError(t, err)
|
|
|
|
+
|
|
|
|
+ assert.True(t, cc.Debug)
|
|
|
|
+
|
|
|
|
+ expectedUlimits := map[string]*units.Ulimit{
|
|
|
|
+ "nofile": {
|
|
|
|
+ Name: "nofile",
|
|
|
|
+ Hard: 2048,
|
|
|
|
+ Soft: 1024,
|
|
|
|
+ },
|
|
}
|
|
}
|
|
|
|
|
|
- configFile := f.Name()
|
|
|
|
|
|
+ assert.Equal(t, expectedUlimits, cc.Ulimits)
|
|
|
|
+}
|
|
|
|
|
|
- f.Write([]byte(`
|
|
|
|
|
|
+func TestDaemonConfigurationMerge(t *testing.T) {
|
|
|
|
+ configFileData := string([]byte(`
|
|
{
|
|
{
|
|
"debug": true,
|
|
"debug": true,
|
|
"default-ulimits": {
|
|
"default-ulimits": {
|
|
@@ -32,7 +70,8 @@ func TestDaemonConfigurationMerge(t *testing.T) {
|
|
}
|
|
}
|
|
}`))
|
|
}`))
|
|
|
|
|
|
- f.Close()
|
|
|
|
|
|
+ file := tempfile.NewTempFile(t, "docker-config", configFileData)
|
|
|
|
+ defer file.Remove()
|
|
|
|
|
|
c := &Config{
|
|
c := &Config{
|
|
CommonConfig: CommonConfig{
|
|
CommonConfig: CommonConfig{
|
|
@@ -44,66 +83,55 @@ func TestDaemonConfigurationMerge(t *testing.T) {
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
|
|
- cc, err := MergeDaemonConfigurations(c, nil, configFile)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
- if !cc.Debug {
|
|
|
|
- t.Fatalf("expected %v, got %v\n", true, cc.Debug)
|
|
|
|
- }
|
|
|
|
- if !cc.AutoRestart {
|
|
|
|
- t.Fatalf("expected %v, got %v\n", true, cc.AutoRestart)
|
|
|
|
- }
|
|
|
|
- if cc.LogConfig.Type != "syslog" {
|
|
|
|
- t.Fatalf("expected syslog config, got %q\n", cc.LogConfig)
|
|
|
|
- }
|
|
|
|
|
|
+ flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
|
|
|
|
|
- if configValue, OK := cc.LogConfig.Config["tag"]; !OK {
|
|
|
|
- t.Fatal("expected syslog config attributes, got nil\n")
|
|
|
|
- } else {
|
|
|
|
- if configValue != "test_tag" {
|
|
|
|
- t.Fatalf("expected syslog config attributes 'tag=test_tag', got 'tag=%s'\n", configValue)
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ var debug bool
|
|
|
|
+ flags.BoolVarP(&debug, "debug", "D", false, "")
|
|
|
|
+ flags.Var(opts.NewNamedUlimitOpt("default-ulimits", nil), "default-ulimit", "")
|
|
|
|
+ flags.Var(opts.NewNamedMapOpts("log-opts", nil, nil), "log-opt", "")
|
|
|
|
|
|
- if cc.Ulimits == nil {
|
|
|
|
- t.Fatal("expected default ulimit config, got nil\n")
|
|
|
|
- } else {
|
|
|
|
- if _, OK := cc.Ulimits["nofile"]; OK {
|
|
|
|
- if cc.Ulimits["nofile"].Name != "nofile" ||
|
|
|
|
- cc.Ulimits["nofile"].Hard != 2048 ||
|
|
|
|
- cc.Ulimits["nofile"].Soft != 1024 {
|
|
|
|
- t.Fatalf("expected default ulimit name, hard and soft are nofile, 2048, 1024, got %s, %d, %d\n", cc.Ulimits["nofile"].Name, cc.Ulimits["nofile"].Hard, cc.Ulimits["nofile"].Soft)
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- t.Fatal("expected default ulimit name nofile, got nil\n")
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
|
|
+ cc, err := MergeDaemonConfigurations(c, flags, file.Name())
|
|
|
|
+ require.NoError(t, err)
|
|
|
|
|
|
-func TestDaemonConfigurationMergeShmSize(t *testing.T) {
|
|
|
|
- if runtime.GOOS == "solaris" {
|
|
|
|
- t.Skip("ShmSize not supported on Solaris\n")
|
|
|
|
|
|
+ assert.True(t, cc.Debug)
|
|
|
|
+ assert.True(t, cc.AutoRestart)
|
|
|
|
+
|
|
|
|
+ expectedLogConfig := LogConfig{
|
|
|
|
+ Type: "syslog",
|
|
|
|
+ Config: map[string]string{"tag": "test_tag"},
|
|
}
|
|
}
|
|
- f, err := ioutil.TempFile("", "docker-config-")
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
|
|
+
|
|
|
|
+ assert.Equal(t, expectedLogConfig, cc.LogConfig)
|
|
|
|
+
|
|
|
|
+ expectedUlimits := map[string]*units.Ulimit{
|
|
|
|
+ "nofile": {
|
|
|
|
+ Name: "nofile",
|
|
|
|
+ Hard: 2048,
|
|
|
|
+ Soft: 1024,
|
|
|
|
+ },
|
|
}
|
|
}
|
|
|
|
|
|
- configFile := f.Name()
|
|
|
|
|
|
+ assert.Equal(t, expectedUlimits, cc.Ulimits)
|
|
|
|
+}
|
|
|
|
|
|
- f.Write([]byte(`
|
|
|
|
|
|
+func TestDaemonConfigurationMergeShmSize(t *testing.T) {
|
|
|
|
+ data := string([]byte(`
|
|
{
|
|
{
|
|
"default-shm-size": "1g"
|
|
"default-shm-size": "1g"
|
|
}`))
|
|
}`))
|
|
|
|
|
|
- f.Close()
|
|
|
|
|
|
+ file := tempfile.NewTempFile(t, "docker-config", data)
|
|
|
|
+ defer file.Remove()
|
|
|
|
|
|
c := &Config{}
|
|
c := &Config{}
|
|
- cc, err := MergeDaemonConfigurations(c, nil, configFile)
|
|
|
|
- if err != nil {
|
|
|
|
- t.Fatal(err)
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
+ flags := pflag.NewFlagSet("test", pflag.ContinueOnError)
|
|
|
|
+ shmSize := opts.MemBytes(DefaultShmSize)
|
|
|
|
+ flags.Var(&shmSize, "default-shm-size", "")
|
|
|
|
+
|
|
|
|
+ cc, err := MergeDaemonConfigurations(c, flags, file.Name())
|
|
|
|
+ require.NoError(t, err)
|
|
|
|
+
|
|
expectedValue := 1 * 1024 * 1024 * 1024
|
|
expectedValue := 1 * 1024 * 1024 * 1024
|
|
if cc.ShmSize.Value() != int64(expectedValue) {
|
|
if cc.ShmSize.Value() != int64(expectedValue) {
|
|
t.Fatalf("expected default shm size %d, got %d", expectedValue, cc.ShmSize.Value())
|
|
t.Fatalf("expected default shm size %d, got %d", expectedValue, cc.ShmSize.Value())
|