Browse code

Added cli SNI integration test

Signed-off-by: Federico Gimenez <fgimenez@coit.es>

Federico Gimenez authored on 2015/12/12 01:55:41
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,43 @@
0
+package main
1
+
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
+
12
+	"github.com/go-check/check"
13
+)
14
+
15
+func (s *DockerSuite) TestClientSetsTLSServerName(c *check.C) {
16
+	// there may be more than one hit to the server for each registry request
17
+	serverNameReceived := []string{}
18
+	var serverName string
19
+
20
+	virtualHostServer := httptest.NewTLSServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
21
+		serverNameReceived = append(serverNameReceived, r.TLS.ServerName)
22
+	}))
23
+	defer virtualHostServer.Close()
24
+	// discard TLS handshake errors written by default to os.Stderr
25
+	virtualHostServer.Config.ErrorLog = log.New(ioutil.Discard, "", 0)
26
+
27
+	u, err := url.Parse(virtualHostServer.URL)
28
+	c.Assert(err, check.IsNil)
29
+	hostPort := u.Host
30
+	serverName = strings.Split(hostPort, ":")[0]
31
+
32
+	repoName := fmt.Sprintf("%v/dockercli/image:latest", hostPort)
33
+	cmd := exec.Command(dockerBinary, "pull", repoName)
34
+	cmd.Run()
35
+
36
+	// check that the fake server was hit at least once
37
+	c.Assert(len(serverNameReceived) > 0, check.Equals, true)
38
+	// check that for each hit the right server name was received
39
+	for _, item := range serverNameReceived {
40
+		c.Check(item, check.Equals, serverName)
41
+	}
42
+}