docker_cli_sni_test.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "log"
  6. "net/http"
  7. "net/http/httptest"
  8. "net/url"
  9. "os/exec"
  10. "strings"
  11. "testing"
  12. "gotest.tools/v3/assert"
  13. )
  14. func (s *DockerSuite) TestClientSetsTLSServerName(c *testing.T) {
  15. c.Skip("Flakey test")
  16. // there may be more than one hit to the server for each registry request
  17. var serverNameReceived []string
  18. var serverName string
  19. virtualHostServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  20. serverNameReceived = append(serverNameReceived, r.TLS.ServerName)
  21. }))
  22. defer virtualHostServer.Close()
  23. // discard TLS handshake errors written by default to os.Stderr
  24. virtualHostServer.Config.ErrorLog = log.New(io.Discard, "", 0)
  25. u, err := url.Parse(virtualHostServer.URL)
  26. assert.NilError(c, err)
  27. hostPort := u.Host
  28. serverName = strings.Split(hostPort, ":")[0]
  29. repoName := fmt.Sprintf("%v/dockercli/image:latest", hostPort)
  30. cmd := exec.Command(dockerBinary, "pull", repoName)
  31. cmd.Run()
  32. // check that the fake server was hit at least once
  33. assert.Assert(c, len(serverNameReceived) > 0)
  34. // check that for each hit the right server name was received
  35. for _, item := range serverNameReceived {
  36. assert.Check(c, item == serverName)
  37. }
  38. }