apiexstension-apiserver: test cr finalization and deletion

This commit is contained in:
Marko Mudrinić 2018-03-27 20:24:30 +02:00
parent c6d77ee656
commit 1178990767
No known key found for this signature in database
GPG Key ID: F15730C52ACE0E9D

View File

@ -18,13 +18,16 @@ package integration
import (
"testing"
"time"
"github.com/stretchr/testify/require"
apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1"
"k8s.io/apiextensions-apiserver/test/integration/testserver"
"k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/wait"
)
func TestFinalization(t *testing.T) {
@ -89,3 +92,74 @@ func TestFinalization(t *testing.T) {
require.Error(t, err)
require.True(t, errors.IsNotFound(err), "%#v", err)
}
func TestFinalizationAndDeletion(t *testing.T) {
stopCh, apiExtensionClient, clientPool, err := testserver.StartDefaultServerWithClients()
require.NoError(t, err)
defer close(stopCh)
// Create a CRD.
noxuDefinition := testserver.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.ClusterScoped)
noxuVersionClient, err := testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, clientPool)
require.NoError(t, err)
// Create a CR with a finalizer.
ns := "not-the-default"
name := "foo123"
noxuResourceClient := NewNamespacedCustomResourceClient(ns, noxuVersionClient, noxuDefinition)
instance := testserver.NewNoxuInstance(ns, name)
instance.SetFinalizers([]string{"noxu.example.com/finalizer"})
createdNoxuInstance, err := instantiateCustomResource(t, instance, noxuResourceClient, noxuDefinition)
require.NoError(t, err)
// Delete a CR. Because there's a finalizer, it will not get deleted now.
uid := createdNoxuInstance.GetUID()
err = noxuResourceClient.Delete(name, &metav1.DeleteOptions{
Preconditions: &metav1.Preconditions{
UID: &uid,
},
})
require.NoError(t, err)
// Check is the CR scheduled for deletion.
gottenNoxuInstance, err := noxuResourceClient.Get(name, metav1.GetOptions{})
require.NoError(t, err)
require.NotNil(t, gottenNoxuInstance.GetDeletionTimestamp())
// Delete the CRD.
testserver.DeleteCustomResourceDefinition(noxuDefinition, apiExtensionClient)
// Check is CR still there after the CRD deletion.
gottenNoxuInstance, err = noxuResourceClient.Get(name, metav1.GetOptions{})
require.NoError(t, err)
// Update the CR to remove the finalizer.
for {
gottenNoxuInstance.SetFinalizers(nil)
_, err = noxuResourceClient.Update(gottenNoxuInstance)
if err == nil {
break
}
if !errors.IsConflict(err) {
require.NoError(t, err) // Fail on unexpected error
}
gottenNoxuInstance, err = noxuResourceClient.Get(name, metav1.GetOptions{})
require.NoError(t, err)
}
// Verify the CR is gone.
// It should return the NonFound error.
_, err = noxuResourceClient.Get(name, metav1.GetOptions{})
if !errors.IsNotFound(err) {
t.Fatalf("unable to delete cr: %v", err)
}
err = wait.Poll(500*time.Millisecond, wait.ForeverTestTimeout, func() (bool, error) {
_, err = testserver.GetCustomResourceDefinition(noxuDefinition, apiExtensionClient)
return errors.IsNotFound(err), err
})
if !errors.IsNotFound(err) {
t.Fatalf("unable to delete crd: %v", err)
}
}