mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-07-18 13:57:38 +00:00
Merge pull request #135567 from aviralgarg05/fix-flaky-test-apply-crd-during-finalization
Fix flaky TestApplyCRDuringCRDFinalization test
This commit is contained in:
@@ -23,6 +23,7 @@ import (
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
apiextensionshelpers "k8s.io/apiextensions-apiserver/pkg/apihelpers"
|
||||
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||
"k8s.io/apiextensions-apiserver/test/integration/fixtures"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
@@ -30,6 +31,11 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
)
|
||||
|
||||
const (
|
||||
testNamespace = "not-the-default"
|
||||
testFinalizer = "noxu.example.com/finalizer"
|
||||
)
|
||||
|
||||
func TestFinalization(t *testing.T) {
|
||||
tearDown, apiExtensionClient, dynamicClient, err := fixtures.StartDefaultServerWithClients(t)
|
||||
require.NoError(t, err)
|
||||
@@ -39,12 +45,12 @@ func TestFinalization(t *testing.T) {
|
||||
noxuDefinition, err = fixtures.CreateNewV1CustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient)
|
||||
require.NoError(t, err)
|
||||
|
||||
ns := "not-the-default"
|
||||
ns := testNamespace
|
||||
name := "foo123"
|
||||
noxuResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition)
|
||||
|
||||
instance := fixtures.NewNoxuInstance(ns, name)
|
||||
instance.SetFinalizers([]string{"noxu.example.com/finalizer"})
|
||||
instance.SetFinalizers([]string{testFinalizer})
|
||||
createdNoxuInstance, err := instantiateCustomResource(t, instance, noxuResourceClient, noxuDefinition)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -104,12 +110,12 @@ func TestFinalizationAndDeletion(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
|
||||
// Create a CR with a finalizer.
|
||||
ns := "not-the-default"
|
||||
ns := testNamespace
|
||||
name := "foo123"
|
||||
noxuResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition)
|
||||
|
||||
instance := fixtures.NewNoxuInstance(ns, name)
|
||||
instance.SetFinalizers([]string{"noxu.example.com/finalizer"})
|
||||
instance.SetFinalizers([]string{testFinalizer})
|
||||
createdNoxuInstance, err := instantiateCustomResource(t, instance, noxuResourceClient, noxuDefinition)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -171,7 +177,7 @@ func TestApplyCRDuringCRDFinalization(t *testing.T) {
|
||||
|
||||
// Create a CRD with a finalizer which will stall deletion
|
||||
noxuDefinition := fixtures.NewNoxuV1CustomResourceDefinition(apiextensionsv1.ClusterScoped)
|
||||
noxuDefinition.SetFinalizers([]string{"noxu.example.com/finalizer"})
|
||||
noxuDefinition.SetFinalizers([]string{testFinalizer})
|
||||
noxuDefinition, err = fixtures.CreateNewV1CustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -179,20 +185,27 @@ func TestApplyCRDuringCRDFinalization(t *testing.T) {
|
||||
err = apiExtensionClient.ApiextensionsV1().CustomResourceDefinitions().Delete(t.Context(), noxuDefinition.Name, metav1.DeleteOptions{})
|
||||
require.NoError(t, err)
|
||||
|
||||
// Wait for the CRD to have the Terminating condition set to True.
|
||||
// The handler checks IsCRDConditionTrue(crd, apiextensionsv1.Terminating) to block
|
||||
// CR creation, and this condition is set asynchronously by the CRD finalizer controller
|
||||
// after it observes the DeletionTimestamp. Without this wait, the Apply could succeed
|
||||
// if it races ahead of the controller setting the condition.
|
||||
err = wait.PollUntilContextTimeout(t.Context(), 100*time.Millisecond, wait.ForeverTestTimeout, true, func(ctx context.Context) (bool, error) {
|
||||
crd, err := apiExtensionClient.ApiextensionsV1().CustomResourceDefinitions().Get(ctx, noxuDefinition.Name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return apiextensionshelpers.IsCRDConditionTrue(crd, apiextensionsv1.Terminating), nil
|
||||
})
|
||||
require.NoError(t, err, "timed out waiting for CRD Terminating condition to be set")
|
||||
|
||||
// Try to create a CR using SSA. This should fail due to the CRD validation
|
||||
ns := "not-the-default"
|
||||
ns := testNamespace
|
||||
name := "foo123"
|
||||
noxuResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition)
|
||||
|
||||
err = wait.PollUntilContextTimeout(t.Context(), 100*time.Millisecond, wait.ForeverTestTimeout, true, func(ctx context.Context) (bool, error) {
|
||||
instance := fixtures.NewNoxuInstance(ns, name)
|
||||
_, err := noxuResourceClient.Apply(ctx, name, instance, metav1.ApplyOptions{DryRun: []string{"All"}, FieldManager: "manager"})
|
||||
if err == nil {
|
||||
t.Log("apply was not blocked, retrying...")
|
||||
return false, nil
|
||||
}
|
||||
return true, err
|
||||
})
|
||||
instance := fixtures.NewNoxuInstance(ns, name)
|
||||
_, err = noxuResourceClient.Apply(t.Context(), name, instance, metav1.ApplyOptions{DryRun: []string{"All"}, FieldManager: "manager"})
|
||||
wantErr := `create not allowed while custom resource definition is terminating`
|
||||
require.ErrorContains(t, err, wantErr)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user