daemon_test.go 5.7 KB

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