-
Notifications
You must be signed in to change notification settings - Fork 647
/
Copy pathvalidate_test.go
79 lines (69 loc) · 3.07 KB
/
validate_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
package limayaml
import (
"os"
"runtime"
"testing"
"gotest.tools/v3/assert"
)
func TestValidateEmpty(t *testing.T) {
y, err := Load([]byte{}, "empty.yaml")
assert.NilError(t, err)
err = Validate(y, false)
assert.Error(t, err, "field `images` must be set")
}
// Note: can't embed symbolic links, use "os"
func TestValidateDefault(t *testing.T) {
if runtime.GOOS == "windows" {
// FIXME: `assertion failed: error is not nil: field `mounts[1].location` must be an absolute path, got "/tmp/lima"`
t.Skip("Skipping on windows")
}
bytes, err := os.ReadFile("default.yaml")
assert.NilError(t, err)
y, err := Load(bytes, "default.yaml")
assert.NilError(t, err)
err = Validate(y, true)
assert.NilError(t, err)
}
func TestValidateParamIsUsed(t *testing.T) {
paramYaml := `param:
name: value`
_, err := Load([]byte(paramYaml), "paramIsNotUsed.yaml")
assert.Error(t, err, "field `param` key \"name\" is not used in any provision, probe, copyToHost, or portForward")
fieldsUsingParam := []string{
`provision: [{"script": "echo {{ .Param.name }}"}]`,
`probes: [{"script": "echo {{ .Param.name }}"}]`,
`copyToHost: [{"guest": "/tmp/{{ .Param.name }}", "host": "/tmp"}]`,
`copyToHost: [{"guest": "/tmp", "host": "/tmp/{{ .Param.name }}"}]`,
`portForwards: [{"guestSocket": "/tmp/{{ .Param.name }}", "hostSocket": "/tmp"}]`,
`portForwards: [{"guestSocket": "/tmp", "hostSocket": "/tmp/{{ .Param.name }}"}]`,
}
for _, fieldUsingParam := range fieldsUsingParam {
_, err = Load([]byte(fieldUsingParam+"\n"+paramYaml), "paramIsUsed.yaml")
//
assert.NilError(t, err)
}
// use "{{if .Param.rootful \"true\"}}{{else}}{{end}}"" in provision, probe, copyToHost, and portForward
rootfulYaml := `param:
rootful: true`
fieldsUsingIfParamRootfulTrue := []string{
`provision: [{"script": "echo {{if eq .Param.rootful \"true\"}}rootful{{else}}rootless{{end}}"}]`,
`probes: [{"script": "echo {{if eq .Param.rootful \"true\"}}rootful{{else}}rootless{{end}}"}]`,
`copyToHost: [{"guest": "/tmp/{{if eq .Param.rootful \"true\"}}rootful{{else}}rootless{{end}}", "host": "/tmp"}]`,
`copyToHost: [{"guest": "/tmp", "host": "/tmp/{{if eq .Param.rootful \"true\"}}rootful{{else}}rootless{{end}}"}]`,
`portForwards: [{"guestSocket": "{{if eq .Param.rootful \"true\"}}/var/run{{else}}/run/user/{{.UID}}{{end}}/docker.sock", "hostSocket": "{{.Dir}}/sock/docker.sock"}]`,
`portForwards: [{"guestSocket": "/var/run/docker.sock", "hostSocket": "{{.Dir}}/sock/docker-{{if eq .Param.rootful \"true\"}}rootfule{{else}}rootless{{end}}.sock"}]`,
}
for _, fieldUsingIfParamRootfulTrue := range fieldsUsingIfParamRootfulTrue {
_, err = Load([]byte(fieldUsingIfParamRootfulTrue+"\n"+rootfulYaml), "paramIsUsed.yaml")
//
assert.NilError(t, err)
}
// use rootFul instead of rootful
rootFulYaml := `param:
rootFul: true`
for _, fieldUsingIfParamRootfulTrue := range fieldsUsingIfParamRootfulTrue {
_, err = Load([]byte(fieldUsingIfParamRootfulTrue+"\n"+rootFulYaml), "paramIsUsed.yaml")
//
assert.Error(t, err, "field `param` key \"rootFul\" is not used in any provision, probe, copyToHost, or portForward")
}
}