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