docker_cli_logout_test.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package main
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io/ioutil"
  6. "os"
  7. "os/exec"
  8. "path/filepath"
  9. "github.com/docker/docker/integration-cli/checker"
  10. "github.com/go-check/check"
  11. )
  12. func (s *DockerRegistryAuthHtpasswdSuite) TestLogoutWithExternalAuth(c *check.C) {
  13. // @TODO TestLogoutWithExternalAuth expects docker to fall back to a v1 registry, so has to be updated for v17.12, when v1 registries are no longer supported
  14. s.d.StartWithBusybox(c, "--disable-legacy-registry=false")
  15. osPath := os.Getenv("PATH")
  16. defer os.Setenv("PATH", osPath)
  17. workingDir, err := os.Getwd()
  18. c.Assert(err, checker.IsNil)
  19. absolute, err := filepath.Abs(filepath.Join(workingDir, "fixtures", "auth"))
  20. c.Assert(err, checker.IsNil)
  21. testPath := fmt.Sprintf("%s%c%s", osPath, filepath.ListSeparator, absolute)
  22. os.Setenv("PATH", testPath)
  23. repoName := fmt.Sprintf("%v/dockercli/busybox:authtest", privateRegistryURL)
  24. tmp, err := ioutil.TempDir("", "integration-cli-")
  25. c.Assert(err, checker.IsNil)
  26. defer os.RemoveAll(tmp)
  27. externalAuthConfig := `{ "credsStore": "shell-test" }`
  28. configPath := filepath.Join(tmp, "config.json")
  29. err = ioutil.WriteFile(configPath, []byte(externalAuthConfig), 0644)
  30. c.Assert(err, checker.IsNil)
  31. _, err = s.d.Cmd("--config", tmp, "login", "-u", s.reg.Username(), "-p", s.reg.Password(), privateRegistryURL)
  32. c.Assert(err, checker.IsNil)
  33. b, err := ioutil.ReadFile(configPath)
  34. c.Assert(err, checker.IsNil)
  35. c.Assert(string(b), checker.Not(checker.Contains), "\"auth\":")
  36. c.Assert(string(b), checker.Contains, privateRegistryURL)
  37. _, err = s.d.Cmd("--config", tmp, "tag", "busybox", repoName)
  38. c.Assert(err, checker.IsNil)
  39. _, err = s.d.Cmd("--config", tmp, "push", repoName)
  40. c.Assert(err, checker.IsNil)
  41. _, err = s.d.Cmd("--config", tmp, "logout", privateRegistryURL)
  42. c.Assert(err, checker.IsNil)
  43. b, err = ioutil.ReadFile(configPath)
  44. c.Assert(err, checker.IsNil)
  45. c.Assert(string(b), checker.Not(checker.Contains), privateRegistryURL)
  46. // check I cannot pull anymore
  47. out, err := s.d.Cmd("--config", tmp, "pull", repoName)
  48. c.Assert(err, check.NotNil, check.Commentf(out))
  49. c.Assert(out, checker.Contains, "Error: image dockercli/busybox:authtest not found")
  50. }
  51. // #23100
  52. func (s *DockerRegistryAuthHtpasswdSuite) TestLogoutWithWrongHostnamesStored(c *check.C) {
  53. osPath := os.Getenv("PATH")
  54. defer os.Setenv("PATH", osPath)
  55. workingDir, err := os.Getwd()
  56. c.Assert(err, checker.IsNil)
  57. absolute, err := filepath.Abs(filepath.Join(workingDir, "fixtures", "auth"))
  58. c.Assert(err, checker.IsNil)
  59. testPath := fmt.Sprintf("%s%c%s", osPath, filepath.ListSeparator, absolute)
  60. os.Setenv("PATH", testPath)
  61. cmd := exec.Command("docker-credential-shell-test", "store")
  62. stdin := bytes.NewReader([]byte(fmt.Sprintf(`{"ServerURL": "https://%s", "Username": "%s", "Secret": "%s"}`, privateRegistryURL, s.reg.Username(), s.reg.Password())))
  63. cmd.Stdin = stdin
  64. c.Assert(cmd.Run(), checker.IsNil)
  65. tmp, err := ioutil.TempDir("", "integration-cli-")
  66. c.Assert(err, checker.IsNil)
  67. externalAuthConfig := fmt.Sprintf(`{ "auths": {"https://%s": {}}, "credsStore": "shell-test" }`, privateRegistryURL)
  68. configPath := filepath.Join(tmp, "config.json")
  69. err = ioutil.WriteFile(configPath, []byte(externalAuthConfig), 0644)
  70. c.Assert(err, checker.IsNil)
  71. dockerCmd(c, "--config", tmp, "login", "-u", s.reg.Username(), "-p", s.reg.Password(), privateRegistryURL)
  72. b, err := ioutil.ReadFile(configPath)
  73. c.Assert(err, checker.IsNil)
  74. c.Assert(string(b), checker.Contains, fmt.Sprintf("\"https://%s\": {}", privateRegistryURL))
  75. c.Assert(string(b), checker.Contains, fmt.Sprintf("\"%s\": {}", privateRegistryURL))
  76. dockerCmd(c, "--config", tmp, "logout", privateRegistryURL)
  77. b, err = ioutil.ReadFile(configPath)
  78. c.Assert(err, checker.IsNil)
  79. c.Assert(string(b), checker.Not(checker.Contains), fmt.Sprintf("\"https://%s\": {}", privateRegistryURL))
  80. c.Assert(string(b), checker.Not(checker.Contains), fmt.Sprintf("\"%s\": {}", privateRegistryURL))
  81. }