@@ -267,6 +267,50 @@ func TestUnsafeDeleteWithUnexpectedError(t *testing.T) {
267
267
}
268
268
}
269
269
270
+ func TestUnsafeDeleteWithAdmissionShouldBeSkipped (t * testing.T ) {
271
+ ctx := genericapirequest .WithNamespace (genericapirequest .NewContext (), "test" )
272
+ destroyFunc , registry := NewTestGenericStoreRegistry (t )
273
+ defer destroyFunc ()
274
+
275
+ // a) create the target object
276
+ object := & example.Pod {
277
+ ObjectMeta : metav1.ObjectMeta {Name : "foo" },
278
+ Spec : example.PodSpec {NodeName : "machine" },
279
+ }
280
+ _ , err := registry .Create (ctx , object , rest .ValidateAllObjectFunc , & metav1.CreateOptions {})
281
+ if err != nil {
282
+ t .Fatalf ("Unexpected error: %v" , err )
283
+ }
284
+
285
+ // b) wrap the storage layer to return corrupt object error
286
+ registry .Storage .Storage = & corruptStorage {
287
+ Interface : registry .Storage .Storage ,
288
+ err : storage .NewCorruptObjError ("key" , fmt .Errorf ("untransformable" )),
289
+ }
290
+
291
+ // c) set up a corrupt object deleter for the registry
292
+ deleter := NewCorruptObjectDeleter (registry )
293
+
294
+ // d) try unsafe delete, but pass a validation that always fails
295
+ var admissionInvoked int
296
+ _ , deleted , err := deleter .Delete (ctx , object .Name , func (_ context.Context , _ runtime.Object ) error {
297
+ admissionInvoked ++
298
+ return fmt .Errorf ("admission was not skipped" )
299
+ }, & metav1.DeleteOptions {
300
+ IgnoreStoreReadErrorWithClusterBreakingPotential : ptr.To [bool ](true ),
301
+ })
302
+
303
+ if err != nil {
304
+ t .Errorf ("Unexpected error from Delete: %v" , err )
305
+ }
306
+ if want , got := true , deleted ; want != got {
307
+ t .Errorf ("Expected deleted: %t, but got: %t" , want , got )
308
+ }
309
+ if want , got := 0 , admissionInvoked ; want != got {
310
+ t .Errorf ("Expected admission to be invoked %d time(s), but got: %d" , want , got )
311
+ }
312
+ }
313
+
270
314
type corruptStorage struct {
271
315
storage.Interface
272
316
err error
0 commit comments