github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/cmd/dockerd/daemon_test.go (about) 1 package main 2 3 import ( 4 "testing" 5 6 "github.com/docker/docker/daemon/config" 7 "github.com/sirupsen/logrus" 8 "github.com/spf13/pflag" 9 "gotest.tools/v3/assert" 10 is "gotest.tools/v3/assert/cmp" 11 "gotest.tools/v3/fs" 12 ) 13 14 func defaultOptions(t *testing.T, configFile string) *daemonOptions { 15 cfg, err := config.New() 16 assert.NilError(t, err) 17 opts := newDaemonOptions(cfg) 18 opts.flags = &pflag.FlagSet{} 19 opts.installFlags(opts.flags) 20 err = installConfigFlags(opts.daemonConfig, opts.flags) 21 assert.NilError(t, err) 22 defaultDaemonConfigFile, err := getDefaultDaemonConfigFile() 23 assert.NilError(t, err) 24 opts.flags.StringVar(&opts.configFile, "config-file", defaultDaemonConfigFile, "") 25 opts.configFile = configFile 26 err = opts.flags.Parse([]string{}) 27 assert.NilError(t, err) 28 return opts 29 } 30 31 func TestLoadDaemonCliConfigWithoutOverriding(t *testing.T) { 32 opts := defaultOptions(t, "") 33 opts.Debug = true 34 35 loadedConfig, err := loadDaemonCliConfig(opts) 36 assert.NilError(t, err) 37 assert.Assert(t, loadedConfig != nil) 38 if !loadedConfig.Debug { 39 t.Fatalf("expected debug to be copied from the common flags, got false") 40 } 41 } 42 43 func TestLoadDaemonCliConfigWithTLS(t *testing.T) { 44 opts := defaultOptions(t, "") 45 opts.TLSOptions.CAFile = "/tmp/ca.pem" 46 opts.TLS = true 47 48 loadedConfig, err := loadDaemonCliConfig(opts) 49 assert.NilError(t, err) 50 assert.Assert(t, loadedConfig != nil) 51 assert.Check(t, is.Equal("/tmp/ca.pem", loadedConfig.CommonTLSOptions.CAFile)) 52 } 53 54 func TestLoadDaemonCliConfigWithConflicts(t *testing.T) { 55 tempFile := fs.NewFile(t, "config", fs.WithContent(`{"labels": ["l3=foo"]}`)) 56 defer tempFile.Remove() 57 configFile := tempFile.Path() 58 59 opts := defaultOptions(t, configFile) 60 flags := opts.flags 61 62 assert.Check(t, flags.Set("config-file", configFile)) 63 assert.Check(t, flags.Set("label", "l1=bar")) 64 assert.Check(t, flags.Set("label", "l2=baz")) 65 66 _, err := loadDaemonCliConfig(opts) 67 assert.Check(t, is.ErrorContains(err, "as a flag and in the configuration file: labels")) 68 } 69 70 func TestLoadDaemonCliWithConflictingNodeGenericResources(t *testing.T) { 71 tempFile := fs.NewFile(t, "config", fs.WithContent(`{"node-generic-resources": ["foo=bar", "bar=baz"]}`)) 72 defer tempFile.Remove() 73 configFile := tempFile.Path() 74 75 opts := defaultOptions(t, configFile) 76 flags := opts.flags 77 78 assert.Check(t, flags.Set("config-file", configFile)) 79 assert.Check(t, flags.Set("node-generic-resource", "r1=bar")) 80 assert.Check(t, flags.Set("node-generic-resource", "r2=baz")) 81 82 _, err := loadDaemonCliConfig(opts) 83 assert.Check(t, is.ErrorContains(err, "as a flag and in the configuration file: node-generic-resources")) 84 } 85 86 func TestLoadDaemonCliWithConflictingLabels(t *testing.T) { 87 opts := defaultOptions(t, "") 88 flags := opts.flags 89 90 assert.Check(t, flags.Set("label", "foo=bar")) 91 assert.Check(t, flags.Set("label", "foo=baz")) 92 93 _, err := loadDaemonCliConfig(opts) 94 assert.Check(t, is.Error(err, "conflict labels for foo=baz and foo=bar")) 95 } 96 97 func TestLoadDaemonCliWithDuplicateLabels(t *testing.T) { 98 opts := defaultOptions(t, "") 99 flags := opts.flags 100 101 assert.Check(t, flags.Set("label", "foo=the-same")) 102 assert.Check(t, flags.Set("label", "foo=the-same")) 103 104 _, err := loadDaemonCliConfig(opts) 105 assert.Check(t, err) 106 } 107 108 func TestLoadDaemonCliConfigWithTLSVerify(t *testing.T) { 109 tempFile := fs.NewFile(t, "config", fs.WithContent(`{"tlsverify": true}`)) 110 defer tempFile.Remove() 111 112 opts := defaultOptions(t, tempFile.Path()) 113 opts.TLSOptions.CAFile = "/tmp/ca.pem" 114 115 loadedConfig, err := loadDaemonCliConfig(opts) 116 assert.NilError(t, err) 117 assert.Assert(t, loadedConfig != nil) 118 assert.Check(t, is.Equal(*loadedConfig.TLS, true)) 119 } 120 121 func TestLoadDaemonCliConfigWithExplicitTLSVerifyFalse(t *testing.T) { 122 tempFile := fs.NewFile(t, "config", fs.WithContent(`{"tlsverify": false}`)) 123 defer tempFile.Remove() 124 125 opts := defaultOptions(t, tempFile.Path()) 126 opts.TLSOptions.CAFile = "/tmp/ca.pem" 127 128 loadedConfig, err := loadDaemonCliConfig(opts) 129 assert.NilError(t, err) 130 assert.Assert(t, loadedConfig != nil) 131 assert.Check(t, *loadedConfig.TLS) 132 } 133 134 func TestLoadDaemonCliConfigWithoutTLSVerify(t *testing.T) { 135 tempFile := fs.NewFile(t, "config", fs.WithContent(`{}`)) 136 defer tempFile.Remove() 137 138 opts := defaultOptions(t, tempFile.Path()) 139 opts.TLSOptions.CAFile = "/tmp/ca.pem" 140 141 loadedConfig, err := loadDaemonCliConfig(opts) 142 assert.NilError(t, err) 143 assert.Assert(t, loadedConfig != nil) 144 assert.Check(t, loadedConfig.TLS == nil) 145 } 146 147 func TestLoadDaemonCliConfigWithLogLevel(t *testing.T) { 148 tempFile := fs.NewFile(t, "config", fs.WithContent(`{"log-level": "warn"}`)) 149 defer tempFile.Remove() 150 151 opts := defaultOptions(t, tempFile.Path()) 152 loadedConfig, err := loadDaemonCliConfig(opts) 153 assert.NilError(t, err) 154 assert.Assert(t, loadedConfig != nil) 155 assert.Check(t, is.Equal("warn", loadedConfig.LogLevel)) 156 } 157 158 func TestLoadDaemonConfigWithEmbeddedOptions(t *testing.T) { 159 content := `{"tlscacert": "/etc/certs/ca.pem", "log-driver": "syslog"}` 160 tempFile := fs.NewFile(t, "config", fs.WithContent(content)) 161 defer tempFile.Remove() 162 163 opts := defaultOptions(t, tempFile.Path()) 164 loadedConfig, err := loadDaemonCliConfig(opts) 165 assert.NilError(t, err) 166 assert.Assert(t, loadedConfig != nil) 167 assert.Check(t, is.Equal("/etc/certs/ca.pem", loadedConfig.CommonTLSOptions.CAFile)) 168 assert.Check(t, is.Equal("syslog", loadedConfig.LogConfig.Type)) 169 } 170 171 func TestLoadDaemonConfigWithRegistryOptions(t *testing.T) { 172 content := `{ 173 "allow-nondistributable-artifacts": ["allow-nondistributable-artifacts.example.com"], 174 "registry-mirrors": ["https://mirrors.example.com"], 175 "insecure-registries": ["https://insecure-registry.example.com"] 176 }` 177 tempFile := fs.NewFile(t, "config", fs.WithContent(content)) 178 defer tempFile.Remove() 179 180 opts := defaultOptions(t, tempFile.Path()) 181 loadedConfig, err := loadDaemonCliConfig(opts) 182 assert.NilError(t, err) 183 assert.Assert(t, loadedConfig != nil) 184 185 assert.Check(t, is.Len(loadedConfig.AllowNondistributableArtifacts, 1)) 186 assert.Check(t, is.Len(loadedConfig.Mirrors, 1)) 187 assert.Check(t, is.Len(loadedConfig.InsecureRegistries, 1)) 188 } 189 190 func TestConfigureDaemonLogs(t *testing.T) { 191 conf := &config.Config{} 192 configureDaemonLogs(conf) 193 assert.Check(t, is.Equal(logrus.InfoLevel, logrus.GetLevel())) 194 195 conf.LogLevel = "warn" 196 configureDaemonLogs(conf) 197 assert.Check(t, is.Equal(logrus.WarnLevel, logrus.GetLevel())) 198 199 // log level should not be changed when passing an invalid value 200 conf.LogLevel = "foobar" 201 configureDaemonLogs(conf) 202 assert.Check(t, is.Equal(logrus.WarnLevel, logrus.GetLevel())) 203 }