...
1 package jsonpatch
2
3 import (
4 "errors"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8 "github.com/stretchr/testify/require"
9 corev1 "k8s.io/api/core/v1"
10
11 v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1"
12
13 "edge-infra.dev/pkg/sds/ien/node"
14 )
15
16 func TestOperationsToString(t *testing.T) {
17 testCases := []struct {
18 ops []Operation
19 expectedStr string
20 err error
21 }{
22 {
23 ops: []Operation{
24 {
25 Op: Add,
26 Path: "/spec/template/spec/affinity",
27 Value: corev1.Affinity{
28 NodeAffinity: &corev1.NodeAffinity{
29 RequiredDuringSchedulingIgnoredDuringExecution: &corev1.NodeSelector{
30 NodeSelectorTerms: []corev1.NodeSelectorTerm{
31 {
32 MatchExpressions: []corev1.NodeSelectorRequirement{
33 {
34 Key: node.ClassLabel,
35 Operator: corev1.NodeSelectorOpNotIn,
36 Values: []string{string(v1ien.Server)},
37 },
38 },
39 },
40 },
41 },
42 },
43 },
44 },
45 },
46 expectedStr: `- op: add
47 path: /spec/template/spec/affinity
48 value:
49 nodeAffinity:
50 requiredDuringSchedulingIgnoredDuringExecution:
51 nodeSelectorTerms:
52 - matchExpressions:
53 - key: node.ncr.com/class
54 operator: NotIn
55 values:
56 - server
57 `,
58 err: nil,
59 },
60 {
61 ops: []Operation{
62 {
63 Op: Replace,
64 Path: "/spec/nodeSelectorTerms",
65 Value: []corev1.NodeSelectorTerm{
66 {
67 MatchExpressions: []corev1.NodeSelectorRequirement{
68 {
69 Key: node.ClassLabel,
70 Operator: corev1.NodeSelectorOpNotIn,
71 Values: []string{string(v1ien.Server)},
72 },
73 },
74 },
75 },
76 },
77 {
78 Op: Add,
79 Path: "/spec/template/metadata/annotations",
80 Value: map[string]string{
81 "edge.ncr.com/helm-edge-id": "ce77374f-0b5b-4092-bd8b-3b6ee9e96061",
82 },
83 },
84 },
85 expectedStr: `- op: replace
86 path: /spec/nodeSelectorTerms
87 value:
88 - matchExpressions:
89 - key: node.ncr.com/class
90 operator: NotIn
91 values:
92 - server
93 - op: add
94 path: /spec/template/metadata/annotations
95 value:
96 edge.ncr.com/helm-edge-id: ce77374f-0b5b-4092-bd8b-3b6ee9e96061
97 `,
98 err: nil,
99 },
100 }
101 for _, tc := range testCases {
102 patch := NewPatch(tc.ops...)
103 actualStr, err := patch.String()
104 require.True(t, errors.Is(err, tc.err))
105 assert.Equal(t, tc.expectedStr, actualStr)
106 }
107 }
108
View as plain text