Skip to content

Commit 1178990

Browse files
committed
apiexstension-apiserver: test cr finalization and deletion
1 parent c6d77ee commit 1178990

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

staging/src/k8s.io/apiextensions-apiserver/test/integration/finalization_test.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,16 @@ package integration
1818

1919
import (
2020
"testing"
21+
"time"
2122

2223
"github.com/stretchr/testify/require"
2324

2425
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
26+
2527
"k8s.io/apiextensions-apiserver/test/integration/testserver"
2628
"k8s.io/apimachinery/pkg/api/errors"
2729
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
30+
"k8s.io/apimachinery/pkg/util/wait"
2831
)
2932

3033
func TestFinalization(t *testing.T) {
@@ -89,3 +92,74 @@ func TestFinalization(t *testing.T) {
8992
require.Error(t, err)
9093
require.True(t, errors.IsNotFound(err), "%#v", err)
9194
}
95+
96+
func TestFinalizationAndDeletion(t *testing.T) {
97+
stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients()
98+
require.NoError(t, err)
99+
defer close(stopCh)
100+
101+
// Create a CRD.
102+
noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped)
103+
noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool)
104+
require.NoError(t, err)
105+
106+
// Create a CR with a finalizer.
107+
ns := "not-the-default"
108+
name := "foo123"
109+
noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition)
110+
111+
instance := testserver.NewNoxuInstance(ns, name)
112+
instance.SetFinalizers([]string{"noxu.example.com/finalizer"})
113+
createdNoxuInstance, err := instantiateCustomResource(t, instance, noxuResourceClient, noxuDefinition)
114+
require.NoError(t, err)
115+
116+
// Delete a CR. Because there's a finalizer, it will not get deleted now.
117+
uid := createdNoxuInstance.GetUID()
118+
err = noxuResourceClient.Delete(name, &metav1.DeleteOptions{
119+
Preconditions: &metav1.Preconditions{
120+
UID: &uid,
121+
},
122+
})
123+
require.NoError(t, err)
124+
125+
// Check is the CR scheduled for deletion.
126+
gottenNoxuInstance, err := noxuResourceClient.Get(name, metav1.GetOptions{})
127+
require.NoError(t, err)
128+
require.NotNil(t, gottenNoxuInstance.GetDeletionTimestamp())
129+
130+
// Delete the CRD.
131+
testserver.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient)
132+
133+
// Check is CR still there after the CRD deletion.
134+
gottenNoxuInstance, err = noxuResourceClient.Get(name, metav1.GetOptions{})
135+
require.NoError(t, err)
136+
137+
// Update the CR to remove the finalizer.
138+
for {
139+
gottenNoxuInstance.SetFinalizers(nil)
140+
_, err = noxuResourceClient.Update(gottenNoxuInstance)
141+
if err == nil {
142+
break
143+
}
144+
if !errors.IsConflict(err) {
145+
require.NoError(t, err) // Fail on unexpected error
146+
}
147+
gottenNoxuInstance, err = noxuResourceClient.Get(name, metav1.GetOptions{})
148+
require.NoError(t, err)
149+
}
150+
151+
// Verify the CR is gone.
152+
// It should return the NonFound error.
153+
_, err = noxuResourceClient.Get(name, metav1.GetOptions{})
154+
if !errors.IsNotFound(err) {
155+
t.Fatalf("unable to delete cr: %v", err)
156+
}
157+
158+
err = wait.Poll(500*time.Millisecond, wait.ForeverTestTimeout, func() (bool, error) {
159+
_, err = testserver.GetCustomResourceDefinition(noxuDefinition, apiExtensionClient)
160+
return errors.IsNotFound(err), err
161+
})
162+
if !errors.IsNotFound(err) {
163+
t.Fatalf("unable to delete crd: %v", err)
164+
}
165+
}

0 commit comments

Comments
 (0)