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