github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/integration-cli/docker_cli_sni_test.go (about)

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