github.com/skanehira/moby@v17.12.1-ce-rc2+incompatible/daemon/config/config_unix_test.go (about) 1 // +build !windows 2 3 package config 4 5 import ( 6 "testing" 7 8 "github.com/docker/docker/opts" 9 units "github.com/docker/go-units" 10 "github.com/gotestyourself/gotestyourself/fs" 11 "github.com/spf13/pflag" 12 "github.com/stretchr/testify/assert" 13 "github.com/stretchr/testify/require" 14 ) 15 16 func TestGetConflictFreeConfiguration(t *testing.T) { 17 configFileData := ` 18 { 19 "debug": true, 20 "default-ulimits": { 21 "nofile": { 22 "Name": "nofile", 23 "Hard": 2048, 24 "Soft": 1024 25 } 26 }, 27 "log-opts": { 28 "tag": "test_tag" 29 } 30 }` 31 32 file := fs.NewFile(t, "docker-config", fs.WithContent(configFileData)) 33 defer file.Remove() 34 35 flags := pflag.NewFlagSet("test", pflag.ContinueOnError) 36 var debug bool 37 flags.BoolVarP(&debug, "debug", "D", false, "") 38 flags.Var(opts.NewNamedUlimitOpt("default-ulimits", nil), "default-ulimit", "") 39 flags.Var(opts.NewNamedMapOpts("log-opts", nil, nil), "log-opt", "") 40 41 cc, err := getConflictFreeConfiguration(file.Path(), flags) 42 require.NoError(t, err) 43 44 assert.True(t, cc.Debug) 45 46 expectedUlimits := map[string]*units.Ulimit{ 47 "nofile": { 48 Name: "nofile", 49 Hard: 2048, 50 Soft: 1024, 51 }, 52 } 53 54 assert.Equal(t, expectedUlimits, cc.Ulimits) 55 } 56 57 func TestDaemonConfigurationMerge(t *testing.T) { 58 configFileData := ` 59 { 60 "debug": true, 61 "default-ulimits": { 62 "nofile": { 63 "Name": "nofile", 64 "Hard": 2048, 65 "Soft": 1024 66 } 67 }, 68 "log-opts": { 69 "tag": "test_tag" 70 } 71 }` 72 73 file := fs.NewFile(t, "docker-config", fs.WithContent(configFileData)) 74 defer file.Remove() 75 76 c := &Config{ 77 CommonConfig: CommonConfig{ 78 AutoRestart: true, 79 LogConfig: LogConfig{ 80 Type: "syslog", 81 Config: map[string]string{"tag": "test"}, 82 }, 83 }, 84 } 85 86 flags := pflag.NewFlagSet("test", pflag.ContinueOnError) 87 88 var debug bool 89 flags.BoolVarP(&debug, "debug", "D", false, "") 90 flags.Var(opts.NewNamedUlimitOpt("default-ulimits", nil), "default-ulimit", "") 91 flags.Var(opts.NewNamedMapOpts("log-opts", nil, nil), "log-opt", "") 92 93 cc, err := MergeDaemonConfigurations(c, flags, file.Path()) 94 require.NoError(t, err) 95 96 assert.True(t, cc.Debug) 97 assert.True(t, cc.AutoRestart) 98 99 expectedLogConfig := LogConfig{ 100 Type: "syslog", 101 Config: map[string]string{"tag": "test_tag"}, 102 } 103 104 assert.Equal(t, expectedLogConfig, cc.LogConfig) 105 106 expectedUlimits := map[string]*units.Ulimit{ 107 "nofile": { 108 Name: "nofile", 109 Hard: 2048, 110 Soft: 1024, 111 }, 112 } 113 114 assert.Equal(t, expectedUlimits, cc.Ulimits) 115 } 116 117 func TestDaemonConfigurationMergeShmSize(t *testing.T) { 118 data := `{"default-shm-size": "1g"}` 119 120 file := fs.NewFile(t, "docker-config", fs.WithContent(data)) 121 defer file.Remove() 122 123 c := &Config{} 124 125 flags := pflag.NewFlagSet("test", pflag.ContinueOnError) 126 shmSize := opts.MemBytes(DefaultShmSize) 127 flags.Var(&shmSize, "default-shm-size", "") 128 129 cc, err := MergeDaemonConfigurations(c, flags, file.Path()) 130 require.NoError(t, err) 131 132 expectedValue := 1 * 1024 * 1024 * 1024 133 assert.Equal(t, int64(expectedValue), cc.ShmSize.Value()) 134 }