forked from containers/image
/
client_test.go
105 lines (78 loc) · 3.06 KB
/
client_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package daemon
import (
"net/http"
"os"
"path/filepath"
"testing"
"github.com/containers/image/v5/types"
dockerclient "github.com/docker/docker/client"
"github.com/stretchr/testify/assert"
)
func TestDockerClientFromNilSystemContext(t *testing.T) {
client, err := newDockerClient(nil)
assert.Nil(t, err, "There should be no error creating the Docker client")
assert.NotNil(t, client, "A Docker client reference should have been returned")
assert.Equal(t, dockerclient.DefaultDockerHost, client.DaemonHost(), "The default docker host should have been used")
assert.Equal(t, defaultAPIVersion, client.ClientVersion(), "The default api version should have been used")
}
func TestDockerClientFromCertContext(t *testing.T) {
testDir := testDir(t)
host := "tcp://127.0.0.1:2376"
systemCtx := &types.SystemContext{
DockerDaemonCertPath: filepath.Join(testDir, "testdata", "certs"),
DockerDaemonHost: host,
DockerDaemonInsecureSkipTLSVerify: true,
}
client, err := newDockerClient(systemCtx)
assert.Nil(t, err, "There should be no error creating the Docker client")
assert.NotNil(t, client, "A Docker client reference should have been returned")
assert.Equal(t, host, client.DaemonHost())
assert.Equal(t, "1.22", client.ClientVersion())
}
func TestTlsConfigFromInvalidCertPath(t *testing.T) {
ctx := &types.SystemContext{
DockerDaemonCertPath: "/foo/bar",
}
_, err := tlsConfig(ctx)
assert.ErrorContains(t, err, "could not read CA certificate")
}
func TestTlsConfigFromCertPath(t *testing.T) {
testDir := testDir(t)
ctx := &types.SystemContext{
DockerDaemonCertPath: filepath.Join(testDir, "testdata", "certs"),
DockerDaemonInsecureSkipTLSVerify: true,
}
httpClient, err := tlsConfig(ctx)
assert.NoError(t, err, "There should be no error creating the HTTP client")
tlsConfig := httpClient.Transport.(*http.Transport).TLSClientConfig
assert.True(t, tlsConfig.InsecureSkipVerify, "TLS verification should be skipped")
assert.Len(t, tlsConfig.Certificates, 1, "There should be one certificate")
}
func TestSkipTLSVerifyOnly(t *testing.T) {
//testDir := testDir(t)
ctx := &types.SystemContext{
DockerDaemonInsecureSkipTLSVerify: true,
}
httpClient, err := tlsConfig(ctx)
assert.NoError(t, err, "There should be no error creating the HTTP client")
tlsConfig := httpClient.Transport.(*http.Transport).TLSClientConfig
assert.True(t, tlsConfig.InsecureSkipVerify, "TLS verification should be skipped")
assert.Len(t, tlsConfig.Certificates, 0, "There should be no certificate")
}
func TestSpecifyPlainHTTPViaHostScheme(t *testing.T) {
host := "http://127.0.0.1:2376"
ctx := &types.SystemContext{
DockerDaemonHost: host,
}
client, err := newDockerClient(ctx)
assert.Nil(t, err, "There should be no error creating the Docker client")
assert.NotNil(t, client, "A Docker client reference should have been returned")
assert.Equal(t, host, client.DaemonHost())
}
func testDir(t *testing.T) string {
testDir, err := os.Getwd()
if err != nil {
t.Fatal("Unable to determine the current test directory")
}
return testDir
}