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  }