@@ -31,6 +31,84 @@ func TestValidateDefault(t *testing.T) {
31
31
assert .NilError (t , err )
32
32
}
33
33
34
+ func TestValidateProbes (t * testing.T ) {
35
+ images := `images: [{"location": "/"}]`
36
+ validProbe := `probes: ["script": "#!foo"]`
37
+ y , err := Load ([]byte (validProbe + "\n " + images ), "lima.yaml" )
38
+ assert .NilError (t , err )
39
+
40
+ err = Validate (y , false )
41
+ assert .NilError (t , err )
42
+
43
+ invalidProbe := `probes: ["script": "foo"]`
44
+ y , err = Load ([]byte (invalidProbe + "\n " + images ), "lima.yaml" )
45
+ assert .NilError (t , err )
46
+
47
+ err = Validate (y , false )
48
+ assert .Error (t , err , "field `probe[0].script` must start with a '#!' line" )
49
+ }
50
+
51
+ func TestValidateParamName (t * testing.T ) {
52
+ images := `images: [{"location": "/"}]`
53
+ validProvision := `provision: [{"script": "echo $PARAM_name $PARAM_NAME $PARAM_Name_123"}]`
54
+ validParam := []string {
55
+ `param: {"name": "value"}` ,
56
+ `param: {"NAME": "value"}` ,
57
+ `param: {"Name_123": "value"}` ,
58
+ }
59
+ for _ , param := range validParam {
60
+ y , err := Load ([]byte (param + "\n " + validProvision + "\n " + images ), "lima.yaml" )
61
+ assert .NilError (t , err )
62
+
63
+ err = Validate (y , false )
64
+ assert .NilError (t , err )
65
+ }
66
+
67
+ invalidProvision := `provision: [{"script": "echo $PARAM__Name $PARAM_3Name $PARAM_Last.Name"}]`
68
+ invalidParam := []string {
69
+ `param: {"_Name": "value"}` ,
70
+ `param: {"3Name": "value"}` ,
71
+ `param: {"Last.Name": "value"}` ,
72
+ }
73
+ for _ , param := range invalidParam {
74
+ y , err := Load ([]byte (param + "\n " + invalidProvision + "\n " + images ), "lima.yaml" )
75
+ assert .NilError (t , err )
76
+
77
+ err = Validate (y , false )
78
+ assert .ErrorContains (t , err , "name does not match regex" )
79
+ }
80
+ }
81
+
82
+ func TestValidateParamValue (t * testing.T ) {
83
+ images := `images: [{"location": "/"}]`
84
+ provision := `provision: [{"script": "echo $PARAM_name"}]`
85
+ validParam := []string {
86
+ `param: {"name": ""}` ,
87
+ `param: {"name": "foo bar"}` ,
88
+ `param: {"name": "foo\tbar"}` ,
89
+ `param: {"name": "Symbols ½ and emoji → 👀"}` ,
90
+ }
91
+ for _ , param := range validParam {
92
+ y , err := Load ([]byte (param + "\n " + provision + "\n " + images ), "lima.yaml" )
93
+ assert .NilError (t , err )
94
+
95
+ err = Validate (y , false )
96
+ assert .NilError (t , err )
97
+ }
98
+
99
+ invalidParam := []string {
100
+ `param: {"name": "The end.\n"}` ,
101
+ `param: {"name": "\r"}` ,
102
+ }
103
+ for _ , param := range invalidParam {
104
+ y , err := Load ([]byte (param + "\n " + provision + "\n " + images ), "lima.yaml" )
105
+ assert .NilError (t , err )
106
+
107
+ err = Validate (y , false )
108
+ assert .ErrorContains (t , err , "value contains unprintable character" )
109
+ }
110
+ }
111
+
34
112
func TestValidateParamIsUsed (t * testing.T ) {
35
113
paramYaml := `param:
36
114
name: value`
@@ -41,7 +119,9 @@ func TestValidateParamIsUsed(t *testing.T) {
41
119
`mounts: [{"location": "/tmp/{{ .Param.name }}"}]` ,
42
120
`mounts: [{"location": "/tmp", mountPoint: "/tmp/{{ .Param.name }}"}]` ,
43
121
`provision: [{"script": "echo {{ .Param.name }}"}]` ,
122
+ `provision: [{"script": "echo $PARAM_name"}]` ,
44
123
`probes: [{"script": "echo {{ .Param.name }}"}]` ,
124
+ `probes: [{"script": "echo $PARAM_name"}]` ,
45
125
`copyToHost: [{"guest": "/tmp/{{ .Param.name }}", "host": "/tmp"}]` ,
46
126
`copyToHost: [{"guest": "/tmp", "host": "/tmp/{{ .Param.name }}"}]` ,
47
127
`portForwards: [{"guestSocket": "/tmp/{{ .Param.name }}", "hostSocket": "/tmp"}]` ,
@@ -53,7 +133,7 @@ func TestValidateParamIsUsed(t *testing.T) {
53
133
assert .NilError (t , err )
54
134
}
55
135
56
- // use "{{if .Param.rootful \"true\"}}{{else}}{{end}}" " in provision, probe, copyToHost, and portForward
136
+ // use "{{if eq .Param.rootful \"true\"}}… {{else}}… {{end}}" in provision, probe, copyToHost, and portForward
57
137
rootfulYaml := `param:
58
138
rootful: true`
59
139
fieldsUsingIfParamRootfulTrue := []string {
@@ -64,7 +144,7 @@ func TestValidateParamIsUsed(t *testing.T) {
64
144
`copyToHost: [{"guest": "/tmp/{{if eq .Param.rootful \"true\"}}rootful{{else}}rootless{{end}}", "host": "/tmp"}]` ,
65
145
`copyToHost: [{"guest": "/tmp", "host": "/tmp/{{if eq .Param.rootful \"true\"}}rootful{{else}}rootless{{end}}"}]` ,
66
146
`portForwards: [{"guestSocket": "{{if eq .Param.rootful \"true\"}}/var/run{{else}}/run/user/{{.UID}}{{end}}/docker.sock", "hostSocket": "{{.Dir}}/sock/docker.sock"}]` ,
67
- `portForwards: [{"guestSocket": "/var/run/docker.sock", "hostSocket": "{{.Dir}}/sock/docker-{{if eq .Param.rootful \"true\"}}rootfule {{else}}rootless{{end}}.sock"}]` ,
147
+ `portForwards: [{"guestSocket": "/var/run/docker.sock", "hostSocket": "{{.Dir}}/sock/docker-{{if eq .Param.rootful \"true\"}}rootful {{else}}rootless{{end}}.sock"}]` ,
68
148
}
69
149
for _ , fieldUsingIfParamRootfulTrue := range fieldsUsingIfParamRootfulTrue {
70
150
_ , err = Load ([]byte (fieldUsingIfParamRootfulTrue + "\n " + rootfulYaml ), "paramIsUsed.yaml" )
0 commit comments