github.com/jiasir/docker@v1.3.3-0.20170609024000-252e610103e7/cmd/dockerd/daemon_test.go (about) 1 package main 2 3 import ( 4 "testing" 5 6 "github.com/Sirupsen/logrus" 7 "github.com/docker/docker/daemon/config" 8 "github.com/docker/docker/pkg/testutil" 9 "github.com/docker/docker/pkg/testutil/tempfile" 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 := tempfile.NewTempFile(t, "config", `{"labels": ["l3=foo"]}`) 50 defer tempFile.Remove() 51 configFile := tempFile.Name() 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 TestLoadDaemonCliConfigWithTLSVerify(t *testing.T) { 65 tempFile := tempfile.NewTempFile(t, "config", `{"tlsverify": true}`) 66 defer tempFile.Remove() 67 68 opts := defaultOptions(tempFile.Name()) 69 opts.TLSOptions.CAFile = "/tmp/ca.pem" 70 71 loadedConfig, err := loadDaemonCliConfig(opts) 72 require.NoError(t, err) 73 require.NotNil(t, loadedConfig) 74 assert.Equal(t, loadedConfig.TLS, true) 75 } 76 77 func TestLoadDaemonCliConfigWithExplicitTLSVerifyFalse(t *testing.T) { 78 tempFile := tempfile.NewTempFile(t, "config", `{"tlsverify": false}`) 79 defer tempFile.Remove() 80 81 opts := defaultOptions(tempFile.Name()) 82 opts.TLSOptions.CAFile = "/tmp/ca.pem" 83 84 loadedConfig, err := loadDaemonCliConfig(opts) 85 require.NoError(t, err) 86 require.NotNil(t, loadedConfig) 87 assert.True(t, loadedConfig.TLS) 88 } 89 90 func TestLoadDaemonCliConfigWithoutTLSVerify(t *testing.T) { 91 tempFile := tempfile.NewTempFile(t, "config", `{}`) 92 defer tempFile.Remove() 93 94 opts := defaultOptions(tempFile.Name()) 95 opts.TLSOptions.CAFile = "/tmp/ca.pem" 96 97 loadedConfig, err := loadDaemonCliConfig(opts) 98 require.NoError(t, err) 99 require.NotNil(t, loadedConfig) 100 assert.False(t, loadedConfig.TLS) 101 } 102 103 func TestLoadDaemonCliConfigWithLogLevel(t *testing.T) { 104 tempFile := tempfile.NewTempFile(t, "config", `{"log-level": "warn"}`) 105 defer tempFile.Remove() 106 107 opts := defaultOptions(tempFile.Name()) 108 loadedConfig, err := loadDaemonCliConfig(opts) 109 require.NoError(t, err) 110 require.NotNil(t, loadedConfig) 111 assert.Equal(t, "warn", loadedConfig.LogLevel) 112 assert.Equal(t, logrus.WarnLevel, logrus.GetLevel()) 113 } 114 115 func TestLoadDaemonConfigWithEmbeddedOptions(t *testing.T) { 116 content := `{"tlscacert": "/etc/certs/ca.pem", "log-driver": "syslog"}` 117 tempFile := tempfile.NewTempFile(t, "config", content) 118 defer tempFile.Remove() 119 120 opts := defaultOptions(tempFile.Name()) 121 loadedConfig, err := loadDaemonCliConfig(opts) 122 require.NoError(t, err) 123 require.NotNil(t, loadedConfig) 124 assert.Equal(t, "/etc/certs/ca.pem", loadedConfig.CommonTLSOptions.CAFile) 125 assert.Equal(t, "syslog", loadedConfig.LogConfig.Type) 126 } 127 128 func TestLoadDaemonConfigWithRegistryOptions(t *testing.T) { 129 content := `{ 130 "allow-nondistributable-artifacts": ["allow-nondistributable-artifacts.com"], 131 "registry-mirrors": ["https://mirrors.docker.com"], 132 "insecure-registries": ["https://insecure.docker.com"] 133 }` 134 tempFile := tempfile.NewTempFile(t, "config", content) 135 defer tempFile.Remove() 136 137 opts := defaultOptions(tempFile.Name()) 138 loadedConfig, err := loadDaemonCliConfig(opts) 139 require.NoError(t, err) 140 require.NotNil(t, loadedConfig) 141 142 assert.Len(t, loadedConfig.AllowNondistributableArtifacts, 1) 143 assert.Len(t, loadedConfig.Mirrors, 1) 144 assert.Len(t, loadedConfig.InsecureRegistries, 1) 145 }