Skip to content

Commit fa6c8a7

Browse files
authored
Make template tests resilient to version upgrades (#1329)
1 parent 462aa25 commit fa6c8a7

File tree

1 file changed

+40
-8
lines changed

1 file changed

+40
-8
lines changed

pkg/container/templates/templates_test.go

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package templates
22

33
import (
4+
"regexp"
45
"strings"
56
"testing"
67
)
@@ -12,6 +13,7 @@ func TestGetDockerfileTemplate(t *testing.T) {
1213
transportType TransportType
1314
data TemplateData
1415
wantContains []string
16+
wantMatches []string // New field for regex patterns
1517
wantNotContains []string
1618
wantErr bool
1719
}{
@@ -23,11 +25,13 @@ func TestGetDockerfileTemplate(t *testing.T) {
2325
MCPArgs: []string{"--arg1", "--arg2", "value"},
2426
},
2527
wantContains: []string{
26-
"FROM python:3.12-slim",
2728
"apt-get install -y --no-install-recommends ca-certificates",
2829
"pip install --no-cache-dir uv",
2930
"ENTRYPOINT [\"uvx\", \"example-package\", \"--arg1\", \"--arg2\", \"value\"]",
3031
},
32+
wantMatches: []string{
33+
`FROM python:\d+\.\d+-slim`, // Match any Python version
34+
},
3135
wantNotContains: []string{
3236
"Add custom CA certificate",
3337
"update-ca-certificates",
@@ -43,7 +47,6 @@ func TestGetDockerfileTemplate(t *testing.T) {
4347
CACertContent: "-----BEGIN CERTIFICATE-----\nMIICertificateContent\n-----END CERTIFICATE-----",
4448
},
4549
wantContains: []string{
46-
"FROM python:3.12-slim",
4750
"apt-get install -y --no-install-recommends ca-certificates",
4851
"pip install --no-cache-dir uv",
4952
"ENTRYPOINT [\"uvx\", \"example-package\", \"--arg1\", \"--arg2\", \"value\"]",
@@ -52,6 +55,9 @@ func TestGetDockerfileTemplate(t *testing.T) {
5255
"cat /tmp/custom-ca.crt >> /etc/ssl/certs/ca-certificates.crt",
5356
"update-ca-certificates",
5457
},
58+
wantMatches: []string{
59+
`FROM python:\d+\.\d+-slim`, // Match any Python version
60+
},
5561
wantNotContains: []string{},
5662
wantErr: false,
5763
},
@@ -63,9 +69,11 @@ func TestGetDockerfileTemplate(t *testing.T) {
6369
MCPArgs: []string{"--arg1", "--arg2", "value"},
6470
},
6571
wantContains: []string{
66-
"FROM node:22-alpine",
6772
"ENTRYPOINT [\"npx\", \"--yes\", \"--\", \"example-package\", \"--arg1\", \"--arg2\", \"value\"]",
6873
},
74+
wantMatches: []string{
75+
`FROM node:\d+-alpine`, // Match any Node version
76+
},
6977
wantNotContains: []string{
7078
"Add custom CA certificate",
7179
"update-ca-certificates",
@@ -81,13 +89,15 @@ func TestGetDockerfileTemplate(t *testing.T) {
8189
CACertContent: "-----BEGIN CERTIFICATE-----\nMIICertificateContent\n-----END CERTIFICATE-----",
8290
},
8391
wantContains: []string{
84-
"FROM node:22-alpine",
8592
"ENTRYPOINT [\"npx\", \"--yes\", \"--\", \"example-package\", \"--arg1\", \"--arg2\", \"value\"]",
8693
"Add custom CA certificate BEFORE any network operations",
8794
"COPY ca-cert.crt /tmp/custom-ca.crt",
8895
"cat /tmp/custom-ca.crt >> /etc/ssl/certs/ca-certificates.crt",
8996
"update-ca-certificates",
9097
},
98+
wantMatches: []string{
99+
`FROM node:\d+-alpine`, // Match any Node version
100+
},
91101
wantNotContains: []string{},
92102
wantErr: false,
93103
},
@@ -99,9 +109,11 @@ func TestGetDockerfileTemplate(t *testing.T) {
99109
MCPArgs: []string{"--arg1", "--arg2", "value"},
100110
},
101111
wantContains: []string{
102-
"FROM golang:1.24-alpine",
103112
"ENTRYPOINT [\"go\", \"run\", \"example-package\", \"--arg1\", \"--arg2\", \"value\"]",
104113
},
114+
wantMatches: []string{
115+
`FROM golang:\d+\.\d+-alpine`, // Match any Go version
116+
},
105117
wantNotContains: []string{
106118
"Add custom CA certificate",
107119
"update-ca-certificates",
@@ -117,13 +129,15 @@ func TestGetDockerfileTemplate(t *testing.T) {
117129
CACertContent: "-----BEGIN CERTIFICATE-----\nMIICertificateContent\n-----END CERTIFICATE-----",
118130
},
119131
wantContains: []string{
120-
"FROM golang:1.24-alpine",
121132
"ENTRYPOINT [\"go\", \"run\", \"example-package\", \"--arg1\", \"--arg2\", \"value\"]",
122133
"Add custom CA certificate BEFORE any network operations",
123134
"COPY ca-cert.crt /tmp/custom-ca.crt",
124135
"cat /tmp/custom-ca.crt >> /etc/ssl/certs/ca-certificates.crt",
125136
"update-ca-certificates",
126137
},
138+
wantMatches: []string{
139+
`FROM golang:\d+\.\d+-alpine`, // Match any Go version
140+
},
127141
wantNotContains: []string{},
128142
wantErr: false,
129143
},
@@ -136,10 +150,12 @@ func TestGetDockerfileTemplate(t *testing.T) {
136150
IsLocalPath: true,
137151
},
138152
wantContains: []string{
139-
"FROM golang:1.24-alpine",
140153
"COPY . /app/",
141154
"ENTRYPOINT [\"go\", \"run\", \"./cmd/server\", \"--arg1\", \"value\"]",
142155
},
156+
wantMatches: []string{
157+
`FROM golang:\d+\.\d+-alpine`, // Match any Go version
158+
},
143159
wantNotContains: []string{
144160
"Add custom CA certificate",
145161
},
@@ -154,10 +170,12 @@ func TestGetDockerfileTemplate(t *testing.T) {
154170
IsLocalPath: true,
155171
},
156172
wantContains: []string{
157-
"FROM golang:1.24-alpine",
158173
"COPY . /app/",
159174
"ENTRYPOINT [\"go\", \"run\", \".\"]",
160175
},
176+
wantMatches: []string{
177+
`FROM golang:\d+\.\d+-alpine`, // Match any Go version
178+
},
161179
wantNotContains: []string{
162180
"Add custom CA certificate",
163181
},
@@ -189,12 +207,26 @@ func TestGetDockerfileTemplate(t *testing.T) {
189207
return
190208
}
191209

210+
// Check for exact string matches
192211
for _, want := range tt.wantContains {
193212
if !strings.Contains(got, want) {
194213
t.Errorf("GetDockerfileTemplate() = %v, want to contain %v", got, want)
195214
}
196215
}
197216

217+
// Check for regex pattern matches
218+
for _, pattern := range tt.wantMatches {
219+
matched, err := regexp.MatchString(pattern, got)
220+
if err != nil {
221+
t.Errorf("Invalid regex pattern %v: %v", pattern, err)
222+
continue
223+
}
224+
if !matched {
225+
t.Errorf("GetDockerfileTemplate() = %v, want to match pattern %v", got, pattern)
226+
}
227+
}
228+
229+
// Check for strings that should not be present
198230
for _, notWant := range tt.wantNotContains {
199231
if strings.Contains(got, notWant) {
200232
t.Errorf("GetDockerfileTemplate() = %v, want NOT to contain %v", got, notWant)

0 commit comments

Comments
 (0)