daemon_test.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package main
  2. import (
  3. "testing"
  4. "github.com/docker/docker/daemon/config"
  5. "github.com/docker/docker/internal/testutil"
  6. "github.com/gotestyourself/gotestyourself/fs"
  7. "github.com/sirupsen/logrus"
  8. "github.com/spf13/pflag"
  9. "github.com/stretchr/testify/assert"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func defaultOptions(configFile string) *daemonOptions {
  13. opts := newDaemonOptions(&config.Config{})
  14. opts.flags = &pflag.FlagSet{}
  15. opts.InstallFlags(opts.flags)
  16. installConfigFlags(opts.daemonConfig, opts.flags)
  17. opts.flags.StringVar(&opts.configFile, "config-file", defaultDaemonConfigFile, "")
  18. opts.configFile = configFile
  19. return opts
  20. }
  21. func TestLoadDaemonCliConfigWithoutOverriding(t *testing.T) {
  22. opts := defaultOptions("")
  23. opts.Debug = true
  24. loadedConfig, err := loadDaemonCliConfig(opts)
  25. require.NoError(t, err)
  26. require.NotNil(t, loadedConfig)
  27. if !loadedConfig.Debug {
  28. t.Fatalf("expected debug to be copied from the common flags, got false")
  29. }
  30. }
  31. func TestLoadDaemonCliConfigWithTLS(t *testing.T) {
  32. opts := defaultOptions("")
  33. opts.TLSOptions.CAFile = "/tmp/ca.pem"
  34. opts.TLS = true
  35. loadedConfig, err := loadDaemonCliConfig(opts)
  36. require.NoError(t, err)
  37. require.NotNil(t, loadedConfig)
  38. assert.Equal(t, "/tmp/ca.pem", loadedConfig.CommonTLSOptions.CAFile)
  39. }
  40. func TestLoadDaemonCliConfigWithConflicts(t *testing.T) {
  41. tempFile := fs.NewFile(t, "config", fs.WithContent(`{"labels": ["l3=foo"]}`))
  42. defer tempFile.Remove()
  43. configFile := tempFile.Path()
  44. opts := defaultOptions(configFile)
  45. flags := opts.flags
  46. assert.NoError(t, flags.Set("config-file", configFile))
  47. assert.NoError(t, flags.Set("label", "l1=bar"))
  48. assert.NoError(t, flags.Set("label", "l2=baz"))
  49. _, err := loadDaemonCliConfig(opts)
  50. testutil.ErrorContains(t, err, "as a flag and in the configuration file: labels")
  51. }
  52. func TestLoadDaemonCliWithConflictingLabels(t *testing.T) {
  53. opts := defaultOptions("")
  54. flags := opts.flags
  55. assert.NoError(t, flags.Set("label", "foo=bar"))
  56. assert.NoError(t, flags.Set("label", "foo=baz"))
  57. _, err := loadDaemonCliConfig(opts)
  58. assert.EqualError(t, err, "conflict labels for foo=baz and foo=bar")
  59. }
  60. func TestLoadDaemonCliWithDuplicateLabels(t *testing.T) {
  61. opts := defaultOptions("")
  62. flags := opts.flags
  63. assert.NoError(t, flags.Set("label", "foo=the-same"))
  64. assert.NoError(t, flags.Set("label", "foo=the-same"))
  65. _, err := loadDaemonCliConfig(opts)
  66. assert.NoError(t, err)
  67. }
  68. func TestLoadDaemonCliConfigWithTLSVerify(t *testing.T) {
  69. tempFile := fs.NewFile(t, "config", fs.WithContent(`{"tlsverify": true}`))
  70. defer tempFile.Remove()
  71. opts := defaultOptions(tempFile.Path())
  72. opts.TLSOptions.CAFile = "/tmp/ca.pem"
  73. loadedConfig, err := loadDaemonCliConfig(opts)
  74. require.NoError(t, err)
  75. require.NotNil(t, loadedConfig)
  76. assert.Equal(t, loadedConfig.TLS, true)
  77. }
  78. func TestLoadDaemonCliConfigWithExplicitTLSVerifyFalse(t *testing.T) {
  79. tempFile := fs.NewFile(t, "config", fs.WithContent(`{"tlsverify": false}`))
  80. defer tempFile.Remove()
  81. opts := defaultOptions(tempFile.Path())
  82. opts.TLSOptions.CAFile = "/tmp/ca.pem"
  83. loadedConfig, err := loadDaemonCliConfig(opts)
  84. require.NoError(t, err)
  85. require.NotNil(t, loadedConfig)
  86. assert.True(t, loadedConfig.TLS)
  87. }
  88. func TestLoadDaemonCliConfigWithoutTLSVerify(t *testing.T) {
  89. tempFile := fs.NewFile(t, "config", fs.WithContent(`{}`))
  90. defer tempFile.Remove()
  91. opts := defaultOptions(tempFile.Path())
  92. opts.TLSOptions.CAFile = "/tmp/ca.pem"
  93. loadedConfig, err := loadDaemonCliConfig(opts)
  94. require.NoError(t, err)
  95. require.NotNil(t, loadedConfig)
  96. assert.False(t, loadedConfig.TLS)
  97. }
  98. func TestLoadDaemonCliConfigWithLogLevel(t *testing.T) {
  99. tempFile := fs.NewFile(t, "config", fs.WithContent(`{"log-level": "warn"}`))
  100. defer tempFile.Remove()
  101. opts := defaultOptions(tempFile.Path())
  102. loadedConfig, err := loadDaemonCliConfig(opts)
  103. require.NoError(t, err)
  104. require.NotNil(t, loadedConfig)
  105. assert.Equal(t, "warn", loadedConfig.LogLevel)
  106. assert.Equal(t, logrus.WarnLevel, logrus.GetLevel())
  107. }
  108. func TestLoadDaemonConfigWithEmbeddedOptions(t *testing.T) {
  109. content := `{"tlscacert": "/etc/certs/ca.pem", "log-driver": "syslog"}`
  110. tempFile := fs.NewFile(t, "config", fs.WithContent(content))
  111. defer tempFile.Remove()
  112. opts := defaultOptions(tempFile.Path())
  113. loadedConfig, err := loadDaemonCliConfig(opts)
  114. require.NoError(t, err)
  115. require.NotNil(t, loadedConfig)
  116. assert.Equal(t, "/etc/certs/ca.pem", loadedConfig.CommonTLSOptions.CAFile)
  117. assert.Equal(t, "syslog", loadedConfig.LogConfig.Type)
  118. }
  119. func TestLoadDaemonConfigWithRegistryOptions(t *testing.T) {
  120. content := `{
  121. "allow-nondistributable-artifacts": ["allow-nondistributable-artifacts.com"],
  122. "registry-mirrors": ["https://mirrors.docker.com"],
  123. "insecure-registries": ["https://insecure.docker.com"]
  124. }`
  125. tempFile := fs.NewFile(t, "config", fs.WithContent(content))
  126. defer tempFile.Remove()
  127. opts := defaultOptions(tempFile.Path())
  128. loadedConfig, err := loadDaemonCliConfig(opts)
  129. require.NoError(t, err)
  130. require.NotNil(t, loadedConfig)
  131. assert.Len(t, loadedConfig.AllowNondistributableArtifacts, 1)
  132. assert.Len(t, loadedConfig.Mirrors, 1)
  133. assert.Len(t, loadedConfig.InsecureRegistries, 1)
  134. }