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  }