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