-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgorun_docker_test.go
More file actions
112 lines (86 loc) · 2.19 KB
/
gorun_docker_test.go
File metadata and controls
112 lines (86 loc) · 2.19 KB
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
106
107
108
109
110
111
112
package gorun_test
import (
"os"
"os/exec"
"path/filepath"
"strings"
"testing"
"github.com/bir3/gorun"
)
func getDockerfile(t *testing.T, dist string) (string, string) {
var s string
url := "https://github.com/bir3/gorun/releases/download/v$VERSION/gorun.linux-arm64"
url = strings.ReplaceAll(url, "$VERSION", gorun.GorunVersion())
m := make(map[string]string)
m["alpine"] = `
FROM alpine
RUN wget $URL && mv gorun.linux-arm64 gorun && chmod 755 gorun
`
m["ubuntu"] = `
FROM ubuntu:23.04
RUN apt-get update && apt-get install -y wget
RUN wget $URL && mv gorun.linux-arm64 gorun && chmod 755 gorun
`
s = strings.ReplaceAll(m[dist], "$URL", url)
s += `
ENV PATH=/:$PATH
RUN cat <<END >simple.gorun
#! /usr/bin/env gorun
package main
import "fmt"
func main() {
fmt.Println("standalone go code - no toolchain to install")
}
END
RUN chmod 755 simple.gorun
`
return url, s
}
func tempDir(t *testing.T) string {
dir := os.Getenv("GORUN_TESTDIR")
if dir != "" {
dir = filepath.Join(dir, t.Name())
err := os.MkdirAll(dir, 0777)
if err != nil {
t.Fatalf("%s", err)
}
return dir
}
return t.TempDir()
}
func testDist(t *testing.T, dist string) {
if testing.Short() {
t.Skip() // go test -short
}
dir := tempDir(t)
url, s := getDockerfile(t, dist)
t.Logf("url %s\n", url)
help := "# run with go test -short to skip this test"
help += "\n" + "# run with GORUN_TESTDIR=<folder> to inspect Dockerfile"
help += "\n" + "# url: " + url
f := filepath.Join(dir, "Dockerfile")
err := os.WriteFile(f, []byte(s), 0666)
if err != nil {
t.Fatalf("create file %s failed - %s", f, err)
}
tag := "test/gorun"
// build
cmd := exec.Command("docker", "build", "-f", f, "--tag", tag, ".")
cmd.Dir = dir
buf, err := cmd.CombinedOutput()
if err != nil {
t.Fatalf("%s\n"+"%s\n"+"cmd failed - %s\n"+"%s", help, cmd.String(), err, string(buf))
}
// run
cmd = exec.Command("docker", "run", "--rm", "--tty", tag, "simple.gorun")
buf, err = cmd.CombinedOutput()
if err != nil {
t.Fatalf("%s\n"+"cmd %s\n"+"%s\n"+"%s", help, cmd.String(), err, string(buf))
}
}
func TestAlpineDocker(t *testing.T) {
testDist(t, "alpine")
}
func TestUbuntuDocker(t *testing.T) {
testDist(t, "ubuntu")
}