Skip to content

Commit 4487658

Browse files
authored
Merge pull request #39 from jaypipes/panic-int-conversion
address int/uint conversion panic
2 parents fdbb281 + 11492cb commit 4487658

File tree

7 files changed

+129
-7
lines changed

7 files changed

+129
-7
lines changed

compare.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -325,11 +325,21 @@ func collectFieldDifferences(
325325
return
326326
case string:
327327
switch subject.(type) {
328-
case int, int8, int16, int32, int64,
329-
uint, uint8, uint16, uint32, uint64:
328+
case int, int8, int16, int32, int64:
329+
mv := match.(string)
330+
si := toInt64(subject)
331+
sv := strconv.FormatInt(si, 10)
332+
if mv != sv {
333+
diff := fmt.Sprintf(
334+
"%s had different values. expected %v but found %v",
335+
fp, match, subject,
336+
)
337+
delta.Add(diff)
338+
}
339+
case uint, uint8, uint16, uint32, uint64:
330340
mv := match.(string)
331-
si := subject.(int)
332-
sv := strconv.Itoa(si)
341+
si := toUint64(subject)
342+
sv := strconv.FormatUint(si, 10)
333343
if mv != sv {
334344
diff := fmt.Sprintf(
335345
"%s had different values. expected %v but found %v",

eval_test.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,28 @@ func TestKindPodCreateGetDelete(t *testing.T) {
164164
require.Nil(err)
165165
}
166166

167+
func TestKindStatefulSetCreateGetDelete(t *testing.T) {
168+
testutil.SkipIfNoKind(t)
169+
require := require.New(t)
170+
171+
fp := filepath.Join("testdata", "kind", "create-get-delete-statefulset.yaml")
172+
f, err := os.Open(fp)
173+
require.Nil(err)
174+
defer f.Close() // nolint:errcheck
175+
176+
s, err := scenario.FromReader(f, scenario.WithPath(fp))
177+
require.Nil(err)
178+
require.NotNil(s)
179+
180+
var b bytes.Buffer
181+
w := bufio.NewWriter(&b)
182+
ctx := gdtcontext.New(gdtcontext.WithDebug(w))
183+
ctx = gdtcontext.RegisterFixture(ctx, "kind", stdKindFix)
184+
185+
err = s.Run(ctx, t)
186+
require.Nil(err)
187+
}
188+
167189
func TestKindMatches(t *testing.T) {
168190
testutil.SkipIfNoKind(t)
169191
require := require.New(t)
@@ -308,6 +330,28 @@ func TestKindVarSaveRestore(t *testing.T) {
308330
require.Nil(err)
309331
}
310332

333+
func TestKindVarPanicIntConversion(t *testing.T) {
334+
testutil.SkipIfNoKind(t)
335+
require := require.New(t)
336+
337+
fp := filepath.Join("testdata", "kind", "var-panic-int-conversion.yaml")
338+
f, err := os.Open(fp)
339+
require.Nil(err)
340+
defer f.Close() // nolint:errcheck
341+
342+
s, err := scenario.FromReader(f, scenario.WithPath(fp))
343+
require.Nil(err)
344+
require.NotNil(s)
345+
346+
var b bytes.Buffer
347+
w := bufio.NewWriter(&b)
348+
ctx := gdtcontext.New(gdtcontext.WithDebug(w))
349+
ctx = gdtcontext.RegisterFixture(ctx, "kind", stdKindFix)
350+
351+
err = s.Run(ctx, t)
352+
require.Nil(err)
353+
}
354+
311355
func TestKindCurlPodIP(t *testing.T) {
312356
testutil.SkipIfNoKind(t)
313357
require := require.New(t)

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ go 1.24.3
44

55
require (
66
github.com/cenkalti/backoff v2.2.1+incompatible
7-
github.com/gdt-dev/core v1.12.1
7+
github.com/gdt-dev/core v1.12.2
88
github.com/samber/lo v1.52.0
99
github.com/stretchr/testify v1.11.1
1010
github.com/theory/jsonpath v0.10.1

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjT
2121
github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM=
2222
github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
2323
github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
24-
github.com/gdt-dev/core v1.12.1 h1:nW6/+aY42ZpQZaWbKwDQyYt10XXwZj0scV5ca3NMAnY=
25-
github.com/gdt-dev/core v1.12.1/go.mod h1:hGXsI+PXavvLkm0BQIYKZ1O3yRw86m/VD2xFiNwFR/Y=
24+
github.com/gdt-dev/core v1.12.2 h1:qzbLiEbcon83Z+WU/meK2H7QNtTrQpT5Xv0ZIcfrFhQ=
25+
github.com/gdt-dev/core v1.12.2/go.mod h1:hGXsI+PXavvLkm0BQIYKZ1O3yRw86m/VD2xFiNwFR/Y=
2626
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
2727
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
2828
github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: create-get-delete-statefulset
2+
description: test create, get, delete for statefulset
3+
4+
tests:
5+
- name: create-statefulset
6+
kube:
7+
create: ../manifests/nginx-statefulset.yaml
8+
- name: statefulset-exists
9+
kube:
10+
get: statefulsets/nginx-ss
11+
- name: delete-statefulset
12+
kube:
13+
delete: statefulsets/nginx-ss
14+
- name: statefulset-no-longer-exists
15+
kube:
16+
get: statefulsets/nginx-ss
17+
assert:
18+
notfound: true
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
name: variable-panic-int-conversion
2+
description: "test for issue gdt-dev/core#72 - panic in ReplaceVariables on int conversion"
3+
4+
tests:
5+
- name: create nginx statefulset
6+
kube:
7+
create: ../manifests/nginx-statefulset.yaml
8+
9+
# Prior to the fix for gdt-dev/core#72, this test case caused a panic in
10+
# gdt-dev/core/context.ReplaceVariables()
11+
- name: get nginx statefulset
12+
kube.get:
13+
type: statefulsets
14+
labels:
15+
app: nginx
16+
require:
17+
len: 1
18+
var:
19+
SS_NAME:
20+
from: $[0].metadata.name
21+
DESIRED_REPLICAS:
22+
from: $[0].spec.replicas
23+
24+
- name: verify nginx statefulset ready
25+
kube.get: statefulsets/$$SS_NAME
26+
require:
27+
matches:
28+
status:
29+
readyReplicas: $$DESIRED_REPLICAS
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
apiVersion: apps/v1
2+
kind: StatefulSet
3+
metadata:
4+
name: nginx-ss
5+
labels:
6+
app: nginx
7+
spec:
8+
selector:
9+
matchLabels:
10+
app: nginx
11+
replicas: 1
12+
template:
13+
metadata:
14+
labels:
15+
app: nginx
16+
spec:
17+
containers:
18+
- name: nginx
19+
image: nginx
20+
ports:
21+
- containerPort: 80

0 commit comments

Comments
 (0)