daemon_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package main
  2. import (
  3. "testing"
  4. "github.com/Sirupsen/logrus"
  5. "github.com/docker/docker/daemon/config"
  6. "github.com/docker/docker/pkg/testutil"
  7. "github.com/docker/docker/pkg/testutil/tempfile"
  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 := tempfile.NewTempFile(t, "config", `{"labels": ["l3=foo"]}`)
  42. defer tempFile.Remove()
  43. configFile := tempFile.Name()
  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 TestLoadDaemonCliConfigWithTLSVerify(t *testing.T) {
  53. tempFile := tempfile.NewTempFile(t, "config", `{"tlsverify": true}`)
  54. defer tempFile.Remove()
  55. opts := defaultOptions(tempFile.Name())
  56. opts.TLSOptions.CAFile = "/tmp/ca.pem"
  57. loadedConfig, err := loadDaemonCliConfig(opts)
  58. require.NoError(t, err)
  59. require.NotNil(t, loadedConfig)
  60. assert.Equal(t, loadedConfig.TLS, true)
  61. }
  62. func TestLoadDaemonCliConfigWithExplicitTLSVerifyFalse(t *testing.T) {
  63. tempFile := tempfile.NewTempFile(t, "config", `{"tlsverify": false}`)
  64. defer tempFile.Remove()
  65. opts := defaultOptions(tempFile.Name())
  66. opts.TLSOptions.CAFile = "/tmp/ca.pem"
  67. loadedConfig, err := loadDaemonCliConfig(opts)
  68. require.NoError(t, err)
  69. require.NotNil(t, loadedConfig)
  70. assert.True(t, loadedConfig.TLS)
  71. }
  72. func TestLoadDaemonCliConfigWithoutTLSVerify(t *testing.T) {
  73. tempFile := tempfile.NewTempFile(t, "config", `{}`)
  74. defer tempFile.Remove()
  75. opts := defaultOptions(tempFile.Name())
  76. opts.TLSOptions.CAFile = "/tmp/ca.pem"
  77. loadedConfig, err := loadDaemonCliConfig(opts)
  78. require.NoError(t, err)
  79. require.NotNil(t, loadedConfig)
  80. assert.False(t, loadedConfig.TLS)
  81. }
  82. func TestLoadDaemonCliConfigWithLogLevel(t *testing.T) {
  83. tempFile := tempfile.NewTempFile(t, "config", `{"log-level": "warn"}`)
  84. defer tempFile.Remove()
  85. opts := defaultOptions(tempFile.Name())
  86. loadedConfig, err := loadDaemonCliConfig(opts)
  87. require.NoError(t, err)
  88. require.NotNil(t, loadedConfig)
  89. assert.Equal(t, "warn", loadedConfig.LogLevel)
  90. assert.Equal(t, logrus.WarnLevel, logrus.GetLevel())
  91. }
  92. func TestLoadDaemonConfigWithEmbeddedOptions(t *testing.T) {
  93. content := `{"tlscacert": "/etc/certs/ca.pem", "log-driver": "syslog"}`
  94. tempFile := tempfile.NewTempFile(t, "config", content)
  95. defer tempFile.Remove()
  96. opts := defaultOptions(tempFile.Name())
  97. loadedConfig, err := loadDaemonCliConfig(opts)
  98. require.NoError(t, err)
  99. require.NotNil(t, loadedConfig)
  100. assert.Equal(t, "/etc/certs/ca.pem", loadedConfig.CommonTLSOptions.CAFile)
  101. assert.Equal(t, "syslog", loadedConfig.LogConfig.Type)
  102. }
  103. func TestLoadDaemonConfigWithRegistryOptions(t *testing.T) {
  104. content := `{
  105. "allow-nondistributable-artifacts": ["allow-nondistributable-artifacts.com"],
  106. "registry-mirrors": ["https://mirrors.docker.com"],
  107. "insecure-registries": ["https://insecure.docker.com"]
  108. }`
  109. tempFile := tempfile.NewTempFile(t, "config", content)
  110. defer tempFile.Remove()
  111. opts := defaultOptions(tempFile.Name())
  112. loadedConfig, err := loadDaemonCliConfig(opts)
  113. require.NoError(t, err)
  114. require.NotNil(t, loadedConfig)
  115. assert.Len(t, loadedConfig.AllowNondistributableArtifacts, 1)
  116. assert.Len(t, loadedConfig.Mirrors, 1)
  117. assert.Len(t, loadedConfig.InsecureRegistries, 1)
  118. }