github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/controller/install/status_viewer_test.go (about) 1 package install 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 appsv1 "k8s.io/api/apps/v1" 9 corev1 "k8s.io/api/core/v1" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 ) 12 13 func TestDeploymentStatusViewerStatus(t *testing.T) { 14 tests := []struct { 15 generation int64 16 status appsv1.DeploymentStatus 17 err error 18 msg string 19 done bool 20 }{ 21 { 22 status: appsv1.DeploymentStatus{ 23 Conditions: []appsv1.DeploymentCondition{ 24 { 25 Type: appsv1.DeploymentProgressing, 26 Reason: TimedOutReason, 27 }, 28 }, 29 }, 30 err: fmt.Errorf("deployment \"foo\" exceeded its progress deadline"), 31 done: false, 32 }, 33 { 34 status: appsv1.DeploymentStatus{ 35 Conditions: []appsv1.DeploymentCondition{ 36 { 37 Type: appsv1.DeploymentProgressing, 38 Reason: "NotTimedOut", 39 }, 40 { 41 Type: appsv1.DeploymentAvailable, 42 Status: corev1.ConditionTrue, 43 }, 44 }, 45 }, 46 msg: "deployment \"foo\" is up-to-date and available", 47 done: true, 48 }, 49 { 50 generation: 1, 51 status: appsv1.DeploymentStatus{ 52 ObservedGeneration: 0, 53 }, 54 msg: "waiting for spec update of deployment \"foo\" to be observed...", 55 done: false, 56 }, 57 { 58 status: appsv1.DeploymentStatus{ 59 Replicas: 5, 60 UpdatedReplicas: 3, 61 }, 62 msg: "deployment \"foo\" waiting for 2 outdated replica(s) to be terminated", 63 done: false, 64 }, 65 { 66 status: appsv1.DeploymentStatus{}, 67 msg: fmt.Sprintf("deployment \"foo\" not available: missing condition %q", appsv1.DeploymentAvailable), 68 done: false, 69 }, 70 { 71 status: appsv1.DeploymentStatus{ 72 Conditions: []appsv1.DeploymentCondition{ 73 { 74 Type: appsv1.DeploymentAvailable, 75 Status: corev1.ConditionFalse, 76 Message: "test message", 77 }, 78 }, 79 }, 80 msg: "deployment \"foo\" not available: test message", 81 done: false, 82 }, 83 { 84 status: appsv1.DeploymentStatus{ 85 Conditions: []appsv1.DeploymentCondition{ 86 { 87 Type: appsv1.DeploymentAvailable, 88 Status: corev1.ConditionUnknown, 89 Message: "test message", 90 }, 91 }, 92 }, 93 msg: "deployment \"foo\" not available: test message", 94 done: false, 95 }, 96 { 97 status: appsv1.DeploymentStatus{ 98 Conditions: []appsv1.DeploymentCondition{ 99 { 100 Type: appsv1.DeploymentAvailable, 101 Status: corev1.ConditionTrue, 102 }, 103 }, 104 }, 105 msg: "deployment \"foo\" is up-to-date and available", 106 done: true, 107 }, 108 } 109 110 for i, test := range tests { 111 t.Run(fmt.Sprintf("%d", i+1), func(t *testing.T) { 112 d := &appsv1.Deployment{ 113 ObjectMeta: metav1.ObjectMeta{ 114 Namespace: "bar", 115 Name: "foo", 116 Generation: test.generation, 117 }, 118 Status: test.status, 119 } 120 msg, done, err := DeploymentStatus(d) 121 assert := assert.New(t) 122 if test.err == nil { 123 assert.NoError(err) 124 } else { 125 assert.EqualError(err, test.err.Error()) 126 } 127 assert.Equal(test.done, done) 128 assert.Equal(test.msg, msg) 129 }) 130 } 131 }