github.com/moby/docker@v26.1.3+incompatible/integration-cli/docker_cli_sni_test.go (about)

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