From 43df63a0d35beda06e91415424f4366feb60d41f Mon Sep 17 00:00:00 2001 From: jignyasamishra Date: Fri, 12 Jan 2024 22:28:29 +0530 Subject: [PATCH 1/3] modified ReplicaFailure logic Signed-off-by: jignyasamishra --- pkg/kapp/resourcesmisc/apps_v1_deployment.go | 6 +- .../resourcesmisc/apps_v1_deployment_test.go | 61 +++++++++++++++++++ 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/pkg/kapp/resourcesmisc/apps_v1_deployment.go b/pkg/kapp/resourcesmisc/apps_v1_deployment.go index 294fd66d7..b024f916a 100644 --- a/pkg/kapp/resourcesmisc/apps_v1_deployment.go +++ b/pkg/kapp/resourcesmisc/apps_v1_deployment.go @@ -54,10 +54,10 @@ func (s AppsV1Deployment) IsDoneApplying() DoneApplyState { "Deployment is not progressing: %s (message: %s)", cond.Reason, cond.Message)} } - case "FailedDelete": + case appsv1.DeploymentReplicaFailure: if cond.Status == corev1.ConditionTrue { - return DoneApplyState{Done: true, Successful: false, Message: fmt.Sprintf( - "Deployment failed to delete pods: %s (message: %s)", cond.Reason, cond.Message)} + return DoneApplyState{Done: false, Successful: false, Message: fmt.Sprintf( + "Deployment has encountered replica failure: %s (message: %s)", cond.Reason, cond.Message)} } } } diff --git a/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go b/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go index 86cdc78c3..48fe11492 100644 --- a/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go +++ b/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go @@ -65,3 +65,64 @@ func buildDep(resourcesBs string, t *testing.T) *ctlresm.AppsV1Deployment { return ctlresm.NewAppsV1Deployment(newResources[0], newResources[1:]) } +func TestIsDoneApplying(t *testing.T) { + // Define a Deployment with a Progressing condition set to False + depYAML := ` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: test-deployment +status: + observedGeneration: 1 + conditions: + - type: Progressing + status: "False" + reason: "ProgressDeadlineExceeded" + message: "Progress deadline exceeded" +` + + // Parse the Deployment YAML into kapp resources + resources, err := ctlres.NewFileResource(ctlres.NewBytesSource([]byte(depYAML))).Resources() + require.NoError(t, err, "Expected resources to parse") + + // Create an AppsV1Deployment instance with the parsed resources + deployment := ctlresm.NewAppsV1Deployment(resources[0], nil) + + // Invoke the IsDoneApplying method to check for Progressing condition + state := deployment.IsDoneApplying() + + // Define the expected state based on the test case + expectedState := ctlresm.DoneApplyState{ + Done: true, + Successful: false, + Message: "Deployment is not progressing: ProgressDeadlineExceeded (message: Progress deadline exceeded)", + } + + require.Equal(t, expectedState, state, "Found incorrect state") + + // Case: ReplicaFailure condition is True + depYAML = ` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: test-deployment +status: + observedGeneration: 1 + conditions: + - type: ReplicaFailure + status: "True" + reason: "FailedCreate" + message: "Failed to create pods" +` + resources, err = ctlres.NewFileResource(ctlres.NewBytesSource([]byte(depYAML))).Resources() + require.NoError(t, err, "Expected resources to parse") + deployment = ctlresm.NewAppsV1Deployment(resources[0], nil) + state = deployment.IsDoneApplying() + expectedState = ctlresm.DoneApplyState{ + Done: false, + Successful: false, + Message: "Deployment has encountered replica failure: FailedCreate (message: Failed to create pods)", + } + require.Equal(t, expectedState, state, "Found incorrect state") + +} From e9729160bd405c158dac023b3ad03edbd591758a Mon Sep 17 00:00:00 2001 From: jignyasamishra Date: Sat, 13 Jan 2024 14:45:30 +0530 Subject: [PATCH 2/3] made changes in the unit tests Signed-off-by: jignyasamishra --- .../resourcesmisc/apps_v1_deployment_test.go | 31 +++++++------------ 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go b/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go index 48fe11492..766bc65bc 100644 --- a/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go +++ b/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go @@ -59,14 +59,8 @@ status: require.Equal(t, expectedState, state, "Found incorrect state") } -func buildDep(resourcesBs string, t *testing.T) *ctlresm.AppsV1Deployment { - newResources, err := ctlres.NewFileResource(ctlres.NewBytesSource([]byte(resourcesBs))).Resources() - require.NoErrorf(t, err, "Expected resources to parse") +func TestAppsV1DeploymentReplicaFailure(t *testing.T) { - return ctlresm.NewAppsV1Deployment(newResources[0], newResources[1:]) -} -func TestIsDoneApplying(t *testing.T) { - // Define a Deployment with a Progressing condition set to False depYAML := ` apiVersion: apps/v1 kind: Deployment @@ -81,17 +75,9 @@ status: message: "Progress deadline exceeded" ` - // Parse the Deployment YAML into kapp resources - resources, err := ctlres.NewFileResource(ctlres.NewBytesSource([]byte(depYAML))).Resources() - require.NoError(t, err, "Expected resources to parse") - - // Create an AppsV1Deployment instance with the parsed resources - deployment := ctlresm.NewAppsV1Deployment(resources[0], nil) - - // Invoke the IsDoneApplying method to check for Progressing condition + deployment := buildDep(depYAML, t) state := deployment.IsDoneApplying() - // Define the expected state based on the test case expectedState := ctlresm.DoneApplyState{ Done: true, Successful: false, @@ -100,7 +86,6 @@ status: require.Equal(t, expectedState, state, "Found incorrect state") - // Case: ReplicaFailure condition is True depYAML = ` apiVersion: apps/v1 kind: Deployment @@ -114,15 +99,21 @@ status: reason: "FailedCreate" message: "Failed to create pods" ` - resources, err = ctlres.NewFileResource(ctlres.NewBytesSource([]byte(depYAML))).Resources() - require.NoError(t, err, "Expected resources to parse") - deployment = ctlresm.NewAppsV1Deployment(resources[0], nil) + deployment = buildDep(depYAML, t) state = deployment.IsDoneApplying() + expectedState = ctlresm.DoneApplyState{ Done: false, Successful: false, Message: "Deployment has encountered replica failure: FailedCreate (message: Failed to create pods)", } + require.Equal(t, expectedState, state, "Found incorrect state") +} +func buildDep(resourcesBs string, t *testing.T) *ctlresm.AppsV1Deployment { + newResources, err := ctlres.NewFileResource(ctlres.NewBytesSource([]byte(resourcesBs))).Resources() + require.NoErrorf(t, err, "Expected resources to parse") + + return ctlresm.NewAppsV1Deployment(newResources[0], newResources[1:]) } From d13d56fc65be35b66f6417e959f0bc57ec7c8fb7 Mon Sep 17 00:00:00 2001 From: jignyasamishra Date: Sat, 13 Jan 2024 18:16:38 +0530 Subject: [PATCH 3/3] made changes in the unit tests Signed-off-by: jignyasamishra --- pkg/kapp/resourcesmisc/apps_v1_deployment_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go b/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go index 766bc65bc..67d83c0d4 100644 --- a/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go +++ b/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go @@ -66,6 +66,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: test-deployment + generation: 1 status: observedGeneration: 1 conditions: @@ -91,6 +92,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: test-deployment + generation: 1 status: observedGeneration: 1 conditions: