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