Browse code

Enable test-integration-cli for Windows platform

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>

Arnaud Porterie authored on 2014/11/20 14:19:16
Showing 10 changed files
... ...
@@ -1,3 +1,5 @@
1
+// +build daemon
2
+
1 3
 package main
2 4
 
3 5
 import (
... ...
@@ -1,18 +1,12 @@
1 1
 package main
2 2
 
3 3
 import (
4
-	"bufio"
5 4
 	"fmt"
6
-	"io/ioutil"
7
-	"os"
8 5
 	"os/exec"
9 6
 	"strconv"
10 7
 	"strings"
11 8
 	"testing"
12 9
 	"time"
13
-	"unicode"
14
-
15
-	"github.com/kr/pty"
16 10
 )
17 11
 
18 12
 func TestEventsUntag(t *testing.T) {
... ...
@@ -185,49 +179,6 @@ func TestEventsImageUntagDelete(t *testing.T) {
185 185
 	logDone("events - image untag, delete is logged")
186 186
 }
187 187
 
188
-// #5979
189
-func TestEventsRedirectStdout(t *testing.T) {
190
-
191
-	since := time.Now().Unix()
192
-
193
-	dockerCmd(t, "run", "busybox", "true")
194
-
195
-	defer deleteAllContainers()
196
-
197
-	file, err := ioutil.TempFile("", "")
198
-	if err != nil {
199
-		t.Fatalf("could not create temp file: %v", err)
200
-	}
201
-	defer os.Remove(file.Name())
202
-
203
-	command := fmt.Sprintf("%s events --since=%d --until=%d > %s", dockerBinary, since, time.Now().Unix(), file.Name())
204
-	_, tty, err := pty.Open()
205
-	if err != nil {
206
-		t.Fatalf("Could not open pty: %v", err)
207
-	}
208
-	cmd := exec.Command("sh", "-c", command)
209
-	cmd.Stdin = tty
210
-	cmd.Stdout = tty
211
-	cmd.Stderr = tty
212
-	if err := cmd.Run(); err != nil {
213
-		t.Fatalf("run err for command %q: %v", command, err)
214
-	}
215
-
216
-	scanner := bufio.NewScanner(file)
217
-	for scanner.Scan() {
218
-		for _, c := range scanner.Text() {
219
-			if unicode.IsControl(c) {
220
-				t.Fatalf("found control character %v", []byte(string(c)))
221
-			}
222
-		}
223
-	}
224
-	if err := scanner.Err(); err != nil {
225
-		t.Fatalf("Scan err for command %q: %v", command, err)
226
-	}
227
-
228
-	logDone("events - redirect stdout")
229
-}
230
-
231 188
 func TestEventsImagePull(t *testing.T) {
232 189
 	since := time.Now().Unix()
233 190
 	pullCmd := exec.Command(dockerBinary, "pull", "hello-world")
234 191
new file mode 100644
... ...
@@ -0,0 +1,59 @@
0
+// +build !windows
1
+
2
+package main
3
+
4
+import (
5
+	"bufio"
6
+	"fmt"
7
+	"io/ioutil"
8
+	"os"
9
+	"os/exec"
10
+	"testing"
11
+	"time"
12
+	"unicode"
13
+
14
+	"github.com/kr/pty"
15
+)
16
+
17
+// #5979
18
+func TestEventsRedirectStdout(t *testing.T) {
19
+
20
+	since := time.Now().Unix()
21
+
22
+	dockerCmd(t, "run", "busybox", "true")
23
+
24
+	defer deleteAllContainers()
25
+
26
+	file, err := ioutil.TempFile("", "")
27
+	if err != nil {
28
+		t.Fatalf("could not create temp file: %v", err)
29
+	}
30
+	defer os.Remove(file.Name())
31
+
32
+	command := fmt.Sprintf("%s events --since=%d --until=%d > %s", dockerBinary, since, time.Now().Unix(), file.Name())
33
+	_, tty, err := pty.Open()
34
+	if err != nil {
35
+		t.Fatalf("Could not open pty: %v", err)
36
+	}
37
+	cmd := exec.Command("sh", "-c", command)
38
+	cmd.Stdin = tty
39
+	cmd.Stdout = tty
40
+	cmd.Stderr = tty
41
+	if err := cmd.Run(); err != nil {
42
+		t.Fatalf("run err for command %q: %v", command, err)
43
+	}
44
+
45
+	scanner := bufio.NewScanner(file)
46
+	for scanner.Scan() {
47
+		for _, c := range scanner.Text() {
48
+			if unicode.IsControl(c) {
49
+				t.Fatalf("found control character %v", []byte(string(c)))
50
+			}
51
+		}
52
+	}
53
+	if err := scanner.Err(); err != nil {
54
+		t.Fatalf("Scan err for command %q: %v", command, err)
55
+	}
56
+
57
+	logDone("events - redirect stdout")
58
+}
... ...
@@ -20,9 +20,7 @@ import (
20 20
 	"time"
21 21
 
22 22
 	"github.com/docker/docker/nat"
23
-	"github.com/docker/docker/pkg/mount"
24 23
 	"github.com/docker/docker/pkg/networkfs/resolvconf"
25
-	"github.com/kr/pty"
26 24
 )
27 25
 
28 26
 // "test123" should be printed by docker run
... ...
@@ -1240,45 +1238,6 @@ func TestRunDisallowBindMountingRootToRoot(t *testing.T) {
1240 1240
 	logDone("run - bind mount /:/ as volume should fail")
1241 1241
 }
1242 1242
 
1243
-// Test recursive bind mount works by default
1244
-func TestRunWithVolumesIsRecursive(t *testing.T) {
1245
-	tmpDir, err := ioutil.TempDir("", "docker_recursive_mount_test")
1246
-	if err != nil {
1247
-		t.Fatal(err)
1248
-	}
1249
-
1250
-	defer os.RemoveAll(tmpDir)
1251
-
1252
-	// Create a temporary tmpfs mount.
1253
-	tmpfsDir := filepath.Join(tmpDir, "tmpfs")
1254
-	if err := os.MkdirAll(tmpfsDir, 0777); err != nil {
1255
-		t.Fatalf("failed to mkdir at %s - %s", tmpfsDir, err)
1256
-	}
1257
-	if err := mount.Mount("tmpfs", tmpfsDir, "tmpfs", ""); err != nil {
1258
-		t.Fatalf("failed to create a tmpfs mount at %s - %s", tmpfsDir, err)
1259
-	}
1260
-	defer mount.Unmount(tmpfsDir)
1261
-
1262
-	f, err := ioutil.TempFile(tmpfsDir, "touch-me")
1263
-	if err != nil {
1264
-		t.Fatal(err)
1265
-	}
1266
-	defer f.Close()
1267
-
1268
-	runCmd := exec.Command(dockerBinary, "run", "--name", "test-data", "--volume", fmt.Sprintf("%s:/tmp:ro", tmpDir), "busybox:latest", "ls", "/tmp/tmpfs")
1269
-	out, stderr, exitCode, err := runCommandWithStdoutStderr(runCmd)
1270
-	if err != nil && exitCode != 0 {
1271
-		t.Fatal(out, stderr, err)
1272
-	}
1273
-	if !strings.Contains(out, filepath.Base(f.Name())) {
1274
-		t.Fatal("Recursive bind mount test failed. Expected file not found")
1275
-	}
1276
-
1277
-	deleteAllContainers()
1278
-
1279
-	logDone("run - volumes are bind mounted recursively")
1280
-}
1281
-
1282 1243
 func TestRunDnsDefaultOptions(t *testing.T) {
1283 1244
 	// ci server has default resolv.conf
1284 1245
 	// so rewrite it for the test
... ...
@@ -2283,44 +2242,6 @@ func TestRunExecDir(t *testing.T) {
2283 2283
 	logDone("run - check execdriver dir behavior")
2284 2284
 }
2285 2285
 
2286
-// #6509
2287
-func TestRunRedirectStdout(t *testing.T) {
2288
-
2289
-	defer deleteAllContainers()
2290
-
2291
-	checkRedirect := func(command string) {
2292
-		_, tty, err := pty.Open()
2293
-		if err != nil {
2294
-			t.Fatalf("Could not open pty: %v", err)
2295
-		}
2296
-		cmd := exec.Command("sh", "-c", command)
2297
-		cmd.Stdin = tty
2298
-		cmd.Stdout = tty
2299
-		cmd.Stderr = tty
2300
-		ch := make(chan struct{})
2301
-		if err := cmd.Start(); err != nil {
2302
-			t.Fatalf("start err: %v", err)
2303
-		}
2304
-		go func() {
2305
-			if err := cmd.Wait(); err != nil {
2306
-				t.Fatalf("wait err=%v", err)
2307
-			}
2308
-			close(ch)
2309
-		}()
2310
-
2311
-		select {
2312
-		case <-time.After(10 * time.Second):
2313
-			t.Fatal("command timeout")
2314
-		case <-ch:
2315
-		}
2316
-	}
2317
-
2318
-	checkRedirect(dockerBinary + " run -i busybox cat /etc/passwd | grep -q root")
2319
-	checkRedirect(dockerBinary + " run busybox cat /etc/passwd | grep -q root")
2320
-
2321
-	logDone("run - redirect stdout")
2322
-}
2323
-
2324 2286
 // Regression test for https://github.com/docker/docker/issues/8259
2325 2287
 func TestRunReuseBindVolumeThatIsSymlink(t *testing.T) {
2326 2288
 	tmpDir, err := ioutil.TempDir(os.TempDir(), "testlink")
2327 2289
new file mode 100644
... ...
@@ -0,0 +1,93 @@
0
+// +build !windows
1
+
2
+package main
3
+
4
+import (
5
+	"fmt"
6
+	"io/ioutil"
7
+	"os"
8
+	"os/exec"
9
+	"path/filepath"
10
+	"strings"
11
+	"testing"
12
+	"time"
13
+
14
+	"github.com/docker/docker/pkg/mount"
15
+	"github.com/kr/pty"
16
+)
17
+
18
+// #6509
19
+func TestRunRedirectStdout(t *testing.T) {
20
+
21
+	defer deleteAllContainers()
22
+
23
+	checkRedirect := func(command string) {
24
+		_, tty, err := pty.Open()
25
+		if err != nil {
26
+			t.Fatalf("Could not open pty: %v", err)
27
+		}
28
+		cmd := exec.Command("sh", "-c", command)
29
+		cmd.Stdin = tty
30
+		cmd.Stdout = tty
31
+		cmd.Stderr = tty
32
+		ch := make(chan struct{})
33
+		if err := cmd.Start(); err != nil {
34
+			t.Fatalf("start err: %v", err)
35
+		}
36
+		go func() {
37
+			if err := cmd.Wait(); err != nil {
38
+				t.Fatalf("wait err=%v", err)
39
+			}
40
+			close(ch)
41
+		}()
42
+
43
+		select {
44
+		case <-time.After(10 * time.Second):
45
+			t.Fatal("command timeout")
46
+		case <-ch:
47
+		}
48
+	}
49
+
50
+	checkRedirect(dockerBinary + " run -i busybox cat /etc/passwd | grep -q root")
51
+	checkRedirect(dockerBinary + " run busybox cat /etc/passwd | grep -q root")
52
+
53
+	logDone("run - redirect stdout")
54
+}
55
+
56
+// Test recursive bind mount works by default
57
+func TestRunWithVolumesIsRecursive(t *testing.T) {
58
+	tmpDir, err := ioutil.TempDir("", "docker_recursive_mount_test")
59
+	if err != nil {
60
+		t.Fatal(err)
61
+	}
62
+
63
+	defer os.RemoveAll(tmpDir)
64
+
65
+	// Create a temporary tmpfs mount.
66
+	tmpfsDir := filepath.Join(tmpDir, "tmpfs")
67
+	if err := os.MkdirAll(tmpfsDir, 0777); err != nil {
68
+		t.Fatalf("failed to mkdir at %s - %s", tmpfsDir, err)
69
+	}
70
+	if err := mount.Mount("tmpfs", tmpfsDir, "tmpfs", ""); err != nil {
71
+		t.Fatalf("failed to create a tmpfs mount at %s - %s", tmpfsDir, err)
72
+	}
73
+
74
+	f, err := ioutil.TempFile(tmpfsDir, "touch-me")
75
+	if err != nil {
76
+		t.Fatal(err)
77
+	}
78
+	defer f.Close()
79
+
80
+	runCmd := exec.Command(dockerBinary, "run", "--name", "test-data", "--volume", fmt.Sprintf("%s:/tmp:ro", tmpDir), "busybox:latest", "ls", "/tmp/tmpfs")
81
+	out, stderr, exitCode, err := runCommandWithStdoutStderr(runCmd)
82
+	if err != nil && exitCode != 0 {
83
+		t.Fatal(out, stderr, err)
84
+	}
85
+	if !strings.Contains(out, filepath.Base(f.Name())) {
86
+		t.Fatal("Recursive bind mount test failed. Expected file not found")
87
+	}
88
+
89
+	deleteAllContainers()
90
+
91
+	logDone("run - volumes are bind mounted recursively")
92
+}
... ...
@@ -1,7 +1,6 @@
1 1
 package main
2 2
 
3 3
 import (
4
-	"bytes"
5 4
 	"fmt"
6 5
 	"io/ioutil"
7 6
 	"os"
... ...
@@ -11,99 +10,8 @@ import (
11 11
 	"sort"
12 12
 	"strings"
13 13
 	"testing"
14
-
15
-	"github.com/docker/docker/vendor/src/github.com/kr/pty"
16 14
 )
17 15
 
18
-// save a repo and try to load it using stdout
19
-func TestSaveAndLoadRepoStdout(t *testing.T) {
20
-	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "true")
21
-	out, _, err := runCommandWithOutput(runCmd)
22
-	if err != nil {
23
-		t.Fatalf("failed to create a container: %s, %v", out, err)
24
-	}
25
-
26
-	cleanedContainerID := stripTrailingCharacters(out)
27
-
28
-	repoName := "foobar-save-load-test"
29
-
30
-	inspectCmd := exec.Command(dockerBinary, "inspect", cleanedContainerID)
31
-	if out, _, err = runCommandWithOutput(inspectCmd); err != nil {
32
-		t.Fatalf("output should've been a container id: %s, %v", out, err)
33
-	}
34
-
35
-	commitCmd := exec.Command(dockerBinary, "commit", cleanedContainerID, repoName)
36
-	if out, _, err = runCommandWithOutput(commitCmd); err != nil {
37
-		t.Fatalf("failed to commit container: %s, %v", out, err)
38
-	}
39
-
40
-	inspectCmd = exec.Command(dockerBinary, "inspect", repoName)
41
-	before, _, err := runCommandWithOutput(inspectCmd)
42
-	if err != nil {
43
-		t.Fatalf("the repo should exist before saving it: %s, %v", before, err)
44
-	}
45
-
46
-	saveCmdTemplate := `%v save %v > /tmp/foobar-save-load-test.tar`
47
-	saveCmdFinal := fmt.Sprintf(saveCmdTemplate, dockerBinary, repoName)
48
-	saveCmd := exec.Command("bash", "-c", saveCmdFinal)
49
-	if out, _, err = runCommandWithOutput(saveCmd); err != nil {
50
-		t.Fatalf("failed to save repo: %s, %v", out, err)
51
-	}
52
-
53
-	deleteImages(repoName)
54
-
55
-	loadCmdFinal := `cat /tmp/foobar-save-load-test.tar | docker load`
56
-	loadCmd := exec.Command("bash", "-c", loadCmdFinal)
57
-	if out, _, err = runCommandWithOutput(loadCmd); err != nil {
58
-		t.Fatalf("failed to load repo: %s, %v", out, err)
59
-	}
60
-
61
-	inspectCmd = exec.Command(dockerBinary, "inspect", repoName)
62
-	after, _, err := runCommandWithOutput(inspectCmd)
63
-	if err != nil {
64
-		t.Fatalf("the repo should exist after loading it: %s %v", after, err)
65
-	}
66
-
67
-	if before != after {
68
-		t.Fatalf("inspect is not the same after a save / load")
69
-	}
70
-
71
-	deleteContainer(cleanedContainerID)
72
-	deleteImages(repoName)
73
-
74
-	os.Remove("/tmp/foobar-save-load-test.tar")
75
-
76
-	logDone("save - save/load a repo using stdout")
77
-
78
-	pty, tty, err := pty.Open()
79
-	if err != nil {
80
-		t.Fatalf("Could not open pty: %v", err)
81
-	}
82
-	cmd := exec.Command(dockerBinary, "save", repoName)
83
-	cmd.Stdin = tty
84
-	cmd.Stdout = tty
85
-	cmd.Stderr = tty
86
-	if err := cmd.Start(); err != nil {
87
-		t.Fatalf("start err: %v", err)
88
-	}
89
-	if err := cmd.Wait(); err == nil {
90
-		t.Fatal("did not break writing to a TTY")
91
-	}
92
-
93
-	buf := make([]byte, 1024)
94
-
95
-	n, err := pty.Read(buf)
96
-	if err != nil {
97
-		t.Fatal("could not read tty output")
98
-	}
99
-
100
-	if !bytes.Contains(buf[:n], []byte("Cowardly refusing")) {
101
-		t.Fatal("help output is not being yielded", out)
102
-	}
103
-
104
-	logDone("save - do not save to a tty")
105
-}
106
-
107 16
 // save a repo using gz compression and try to load it using stdout
108 17
 func TestSaveXzAndLoadRepoStdout(t *testing.T) {
109 18
 	tempDir, err := ioutil.TempDir("", "test-save-xz-gz-load-repo-stdout")
110 19
new file mode 100644
... ...
@@ -0,0 +1,102 @@
0
+// +build !windows
1
+
2
+package main
3
+
4
+import (
5
+	"bytes"
6
+	"fmt"
7
+	"os"
8
+	"os/exec"
9
+	"testing"
10
+
11
+	"github.com/docker/docker/vendor/src/github.com/kr/pty"
12
+)
13
+
14
+// save a repo and try to load it using stdout
15
+func TestSaveAndLoadRepoStdout(t *testing.T) {
16
+	runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "true")
17
+	out, _, err := runCommandWithOutput(runCmd)
18
+	if err != nil {
19
+		t.Fatalf("failed to create a container: %s, %v", out, err)
20
+	}
21
+
22
+	cleanedContainerID := stripTrailingCharacters(out)
23
+
24
+	repoName := "foobar-save-load-test"
25
+
26
+	inspectCmd := exec.Command(dockerBinary, "inspect", cleanedContainerID)
27
+	if out, _, err = runCommandWithOutput(inspectCmd); err != nil {
28
+		t.Fatalf("output should've been a container id: %s, %v", out, err)
29
+	}
30
+
31
+	commitCmd := exec.Command(dockerBinary, "commit", cleanedContainerID, repoName)
32
+	if out, _, err = runCommandWithOutput(commitCmd); err != nil {
33
+		t.Fatalf("failed to commit container: %s, %v", out, err)
34
+	}
35
+
36
+	inspectCmd = exec.Command(dockerBinary, "inspect", repoName)
37
+	before, _, err := runCommandWithOutput(inspectCmd)
38
+	if err != nil {
39
+		t.Fatalf("the repo should exist before saving it: %s, %v", before, err)
40
+	}
41
+
42
+	saveCmdTemplate := `%v save %v > /tmp/foobar-save-load-test.tar`
43
+	saveCmdFinal := fmt.Sprintf(saveCmdTemplate, dockerBinary, repoName)
44
+	saveCmd := exec.Command("bash", "-c", saveCmdFinal)
45
+	if out, _, err = runCommandWithOutput(saveCmd); err != nil {
46
+		t.Fatalf("failed to save repo: %s, %v", out, err)
47
+	}
48
+
49
+	deleteImages(repoName)
50
+
51
+	loadCmdFinal := `cat /tmp/foobar-save-load-test.tar | docker load`
52
+	loadCmd := exec.Command("bash", "-c", loadCmdFinal)
53
+	if out, _, err = runCommandWithOutput(loadCmd); err != nil {
54
+		t.Fatalf("failed to load repo: %s, %v", out, err)
55
+	}
56
+
57
+	inspectCmd = exec.Command(dockerBinary, "inspect", repoName)
58
+	after, _, err := runCommandWithOutput(inspectCmd)
59
+	if err != nil {
60
+		t.Fatalf("the repo should exist after loading it: %s %v", after, err)
61
+	}
62
+
63
+	if before != after {
64
+		t.Fatalf("inspect is not the same after a save / load")
65
+	}
66
+
67
+	deleteContainer(cleanedContainerID)
68
+	deleteImages(repoName)
69
+
70
+	os.Remove("/tmp/foobar-save-load-test.tar")
71
+
72
+	logDone("save - save/load a repo using stdout")
73
+
74
+	pty, tty, err := pty.Open()
75
+	if err != nil {
76
+		t.Fatalf("Could not open pty: %v", err)
77
+	}
78
+	cmd := exec.Command(dockerBinary, "save", repoName)
79
+	cmd.Stdin = tty
80
+	cmd.Stdout = tty
81
+	cmd.Stderr = tty
82
+	if err := cmd.Start(); err != nil {
83
+		t.Fatalf("start err: %v", err)
84
+	}
85
+	if err := cmd.Wait(); err == nil {
86
+		t.Fatal("did not break writing to a TTY")
87
+	}
88
+
89
+	buf := make([]byte, 1024)
90
+
91
+	n, err := pty.Read(buf)
92
+	if err != nil {
93
+		t.Fatal("could not read tty output")
94
+	}
95
+
96
+	if !bytes.Contains(buf[:n], []byte("Cowardly refusing")) {
97
+		t.Fatal("help output is not being yielded", out)
98
+	}
99
+
100
+	logDone("save - do not save to a tty")
101
+}
... ...
@@ -4,6 +4,7 @@ import (
4 4
 	"fmt"
5 5
 	"os"
6 6
 	"os/exec"
7
+	"runtime"
7 8
 )
8 9
 
9 10
 var (
... ...
@@ -25,16 +26,26 @@ var (
25 25
 	workingDirectory string
26 26
 )
27 27
 
28
+func binarySearchCommand() *exec.Cmd {
29
+	if runtime.GOOS == "windows" {
30
+		// Windows where.exe is included since Windows Server 2003. It accepts
31
+		// wildcards, which we use here to match the development builds binary
32
+		// names (such as docker-$VERSION.exe).
33
+		return exec.Command("where.exe", "docker*.exe")
34
+	}
35
+	return exec.Command("which", "docker")
36
+}
37
+
28 38
 func init() {
29 39
 	if dockerBin := os.Getenv("DOCKER_BINARY"); dockerBin != "" {
30 40
 		dockerBinary = dockerBin
31 41
 	} else {
32
-		whichCmd := exec.Command("which", "docker")
42
+		whichCmd := binarySearchCommand()
33 43
 		out, _, err := runCommandWithOutput(whichCmd)
34 44
 		if err == nil {
35 45
 			dockerBinary = stripTrailingCharacters(out)
36 46
 		} else {
37
-			fmt.Printf("ERROR: couldn't resolve full path to the Docker binary")
47
+			fmt.Printf("ERROR: couldn't resolve full path to the Docker binary (%v)", err)
38 48
 			os.Exit(1)
39 49
 		}
40 50
 	}
... ...
@@ -100,9 +100,7 @@ func logDone(message string) {
100 100
 }
101 101
 
102 102
 func stripTrailingCharacters(target string) string {
103
-	target = strings.Trim(target, "\n")
104
-	target = strings.Trim(target, " ")
105
-	return target
103
+	return strings.TrimSpace(target)
106 104
 }
107 105
 
108 106
 func unmarshalJSON(data []byte, result interface{}) error {
... ...
@@ -15,10 +15,14 @@ exec 41>&1 42>&2
15 15
 DOCKER_GRAPHDRIVER=${DOCKER_GRAPHDRIVER:-vfs}
16 16
 DOCKER_EXECDRIVER=${DOCKER_EXECDRIVER:-native}
17 17
 
18
-( set -x; exec \
19
-	docker --daemon --debug \
20
-	--storage-driver "$DOCKER_GRAPHDRIVER" \
21
-	--exec-driver "$DOCKER_EXECDRIVER" \
22
-	--pidfile "$DEST/docker.pid" \
23
-		&> "$DEST/docker.log"
24
-) &
18
+if [ -z "$DOCKER_TEST_HOST" ]; then
19
+    ( set -x; exec \
20
+        docker --daemon --debug \
21
+        --storage-driver "$DOCKER_GRAPHDRIVER" \
22
+        --exec-driver "$DOCKER_EXECDRIVER" \
23
+        --pidfile "$DEST/docker.pid" \
24
+            &> "$DEST/docker.log"
25
+    ) &
26
+else
27
+    export DOCKER_HOST="$DOCKER_TEST_HOST"
28
+fi