docker_cli_sni_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. type DockerCLISNISuite struct {
  15. ds *DockerSuite
  16. }
  17. func (s *DockerCLISNISuite) TearDownTest(c *testing.T) {
  18. s.ds.TearDownTest(c)
  19. }
  20. func (s *DockerCLISNISuite) OnTimeout(c *testing.T) {
  21. s.ds.OnTimeout(c)
  22. }
  23. func (s *DockerCLISNISuite) TestClientSetsTLSServerName(c *testing.T) {
  24. c.Skip("Flakey test")
  25. // there may be more than one hit to the server for each registry request
  26. var serverNameReceived []string
  27. var serverName string
  28. virtualHostServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  29. serverNameReceived = append(serverNameReceived, r.TLS.ServerName)
  30. }))
  31. defer virtualHostServer.Close()
  32. // discard TLS handshake errors written by default to os.Stderr
  33. virtualHostServer.Config.ErrorLog = log.New(io.Discard, "", 0)
  34. u, err := url.Parse(virtualHostServer.URL)
  35. assert.NilError(c, err)
  36. hostPort := u.Host
  37. serverName = strings.Split(hostPort, ":")[0]
  38. repoName := fmt.Sprintf("%v/dockercli/image:latest", hostPort)
  39. cmd := exec.Command(dockerBinary, "pull", repoName)
  40. cmd.Run()
  41. // check that the fake server was hit at least once
  42. assert.Assert(c, len(serverNameReceived) > 0)
  43. // check that for each hit the right server name was received
  44. for _, item := range serverNameReceived {
  45. assert.Check(c, item == serverName)
  46. }
  47. }