@@ -11,6 +11,7 @@ import (
11
11
"testing"
12
12
13
13
"github.com/stretchr/testify/require"
14
+ "gomodules.xyz/jsonpatch/v2"
14
15
admissionv1 "k8s.io/api/admission/v1"
15
16
corev1 "k8s.io/api/core/v1"
16
17
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -45,11 +46,11 @@ func TestProxyTopologyInjector_Handle(t *testing.T) {
45
46
}
46
47
47
48
cases := []struct {
48
- caseName string
49
- obj client.Object
50
- node * corev1.Node
51
- pod * corev1.Pod
52
- wantErr bool
49
+ caseName string
50
+ obj client.Object
51
+ node * corev1.Node
52
+ pod * corev1.Pod
53
+ expectedPatchResp []jsonpatch. JsonPatchOperation
53
54
}{
54
55
{
55
56
caseName : "valid binding" ,
@@ -60,9 +61,15 @@ func TestProxyTopologyInjector_Handle(t *testing.T) {
60
61
},
61
62
Target : corev1.ObjectReference {Name : defaultNode .Name },
62
63
},
63
- node : defaultNode ,
64
- pod : defaultPod ,
65
- wantErr : false ,
64
+ node : defaultNode ,
65
+ pod : defaultPod ,
66
+ expectedPatchResp : []jsonpatch.JsonPatchOperation {{
67
+ Operation : "add" ,
68
+ Path : "/metadata/annotations" ,
69
+ Value : map [string ]interface {}{
70
+ "topology.kubernetes.io/zone" : "zone1" ,
71
+ },
72
+ }},
66
73
},
67
74
{
68
75
caseName : "empty target" ,
@@ -72,9 +79,9 @@ func TestProxyTopologyInjector_Handle(t *testing.T) {
72
79
Namespace : defaultPod .Namespace ,
73
80
},
74
81
},
75
- node : defaultNode ,
76
- pod : defaultPod ,
77
- wantErr : true ,
82
+ node : defaultNode ,
83
+ pod : defaultPod ,
84
+ expectedPatchResp : nil ,
78
85
},
79
86
{
80
87
caseName : "skip binding - no label" ,
@@ -84,9 +91,9 @@ func TestProxyTopologyInjector_Handle(t *testing.T) {
84
91
Namespace : "bar" ,
85
92
},
86
93
},
87
- node : defaultNode ,
88
- pod : & corev1.Pod {ObjectMeta : metav1.ObjectMeta {Namespace : "bar" , Name : "baz" }},
89
- wantErr : true ,
94
+ node : defaultNode ,
95
+ pod : & corev1.Pod {ObjectMeta : metav1.ObjectMeta {Namespace : "bar" , Name : "baz" }},
96
+ expectedPatchResp : nil ,
90
97
},
91
98
{
92
99
caseName : "no matching pod" ,
@@ -96,9 +103,9 @@ func TestProxyTopologyInjector_Handle(t *testing.T) {
96
103
Namespace : "bar" ,
97
104
},
98
105
},
99
- node : defaultNode ,
100
- pod : defaultPod ,
101
- wantErr : true ,
106
+ node : defaultNode ,
107
+ pod : defaultPod ,
108
+ expectedPatchResp : nil ,
102
109
},
103
110
}
104
111
for _ , tc := range cases {
@@ -120,9 +127,7 @@ func TestProxyTopologyInjector_Handle(t *testing.T) {
120
127
}
121
128
122
129
objBytes , err := json .Marshal (tc .obj )
123
- if err != nil {
124
- t .Fatalf ("failed to marshal object: %v" , err )
125
- }
130
+ require .NoError (t , err )
126
131
127
132
req := admission.Request {
128
133
AdmissionRequest : admissionv1.AdmissionRequest {
@@ -135,23 +140,9 @@ func TestProxyTopologyInjector_Handle(t *testing.T) {
135
140
}
136
141
137
142
resp := mutator .Handle (context .Background (), req )
143
+ require .True (t , resp .Allowed )
138
144
139
- if ! resp .Allowed && tc .wantErr {
140
- t .Fatalf ("expected Allowed response, got: %v" , resp .Result )
141
- }
142
-
143
- updatedPod := & corev1.Pod {}
144
- if err = fakeClient .Get (context .Background (), types.NamespacedName {Name : tc .pod .Name , Namespace : tc .pod .Namespace }, updatedPod ); err != nil {
145
- t .Fatalf ("get pod: %v" , err )
146
- }
147
-
148
- zone , ok := updatedPod .Labels [corev1 .LabelTopologyZone ]
149
- if tc .wantErr {
150
- require .False (t , ok , "pod has unexpected topology label: %v" , updatedPod )
151
- } else {
152
- require .True (t , ok , "pod does not have expected topology label: %v" , updatedPod )
153
- require .Equal (t , zone , tc .node .Labels [corev1 .LabelTopologyZone ])
154
- }
145
+ require .Equal (t , tc .expectedPatchResp , resp .Patches )
155
146
})
156
147
}
157
148
}
0 commit comments