docker_cli_sni_test.go 1.2 KB

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