moby/integration-cli/docker_cli_sni_test.go
Brian Goff e8dc902781 Wire up tests to support otel tracing
Integration tests will now configure clients to propagate traces as well
as create spans for all tests.

Some extra changes were needed (or desired for trace propagation) in the
test helpers to pass through tracing spans via context.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2023-09-07 18:38:22 +00:00

58 lines
1.4 KiB
Go

package main
import (
"context"
"fmt"
"io"
"log"
"net/http"
"net/http/httptest"
"net/url"
"os/exec"
"strings"
"testing"
"gotest.tools/v3/assert"
)
type DockerCLISNISuite struct {
ds *DockerSuite
}
func (s *DockerCLISNISuite) TearDownTest(ctx context.Context, c *testing.T) {
s.ds.TearDownTest(ctx, c)
}
func (s *DockerCLISNISuite) OnTimeout(c *testing.T) {
s.ds.OnTimeout(c)
}
func (s *DockerCLISNISuite) TestClientSetsTLSServerName(c *testing.T) {
c.Skip("Flakey test")
// there may be more than one hit to the server for each registry request
var serverNameReceived []string
var serverName string
virtualHostServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
serverNameReceived = append(serverNameReceived, r.TLS.ServerName)
}))
defer virtualHostServer.Close()
// discard TLS handshake errors written by default to os.Stderr
virtualHostServer.Config.ErrorLog = log.New(io.Discard, "", 0)
u, err := url.Parse(virtualHostServer.URL)
assert.NilError(c, err)
hostPort := u.Host
serverName = strings.Split(hostPort, ":")[0]
repoName := fmt.Sprintf("%v/dockercli/image:latest", hostPort)
cmd := exec.Command(dockerBinary, "pull", repoName)
cmd.Run()
// check that the fake server was hit at least once
assert.Assert(c, len(serverNameReceived) > 0)
// check that for each hit the right server name was received
for _, item := range serverNameReceived {
assert.Check(c, item == serverName)
}
}