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  }