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