...

Source file src/sigs.k8s.io/cli-utils/pkg/kstatus/polling/statusreaders/deployment_test.go

Documentation: sigs.k8s.io/cli-utils/pkg/kstatus/polling/statusreaders

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package statusreaders
     5  
     6  import (
     7  	"context"
     8  	"strings"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  	"k8s.io/apimachinery/pkg/api/errors"
    14  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
    15  	fakecr "sigs.k8s.io/cli-utils/pkg/kstatus/polling/clusterreader/fake"
    16  	"sigs.k8s.io/cli-utils/pkg/kstatus/polling/event"
    17  	"sigs.k8s.io/cli-utils/pkg/kstatus/polling/statusreaders/fake"
    18  	"sigs.k8s.io/cli-utils/pkg/kstatus/polling/testutil"
    19  	"sigs.k8s.io/cli-utils/pkg/kstatus/status"
    20  	"sigs.k8s.io/cli-utils/pkg/object"
    21  	fakemapper "sigs.k8s.io/cli-utils/pkg/testutil"
    22  )
    23  
    24  var (
    25  	currentDeployment = strings.TrimSpace(`
    26  apiVersion: apps/v1
    27  kind: Deployment
    28  metadata:
    29    name: test
    30    generation: 1
    31    namespace: qual
    32  spec:
    33    selector:
    34      matchLabels:
    35        app: app
    36  status:
    37    observedGeneration: 1
    38    updatedReplicas: 1
    39    readyReplicas: 1
    40    availableReplicas: 1
    41    replicas: 1
    42    conditions:
    43    - type: Progressing 
    44      status: "True"
    45      reason: NewReplicaSetAvailable
    46    - type: Available 
    47      status: "True"
    48  `)
    49  )
    50  
    51  func TestReadStatus(t *testing.T) {
    52  	testCases := map[string]struct {
    53  		identifier             object.ObjMetadata
    54  		readerResource         *unstructured.Unstructured
    55  		readerErr              error
    56  		expectedErr            error
    57  		expectedResourceStatus *event.ResourceStatus
    58  	}{
    59  		"Current resource": {
    60  			identifier:     object.UnstructuredToObjMetadata(testutil.YamlToUnstructured(t, currentDeployment)),
    61  			readerResource: testutil.YamlToUnstructured(t, currentDeployment),
    62  			expectedResourceStatus: &event.ResourceStatus{
    63  				Identifier: object.UnstructuredToObjMetadata(testutil.YamlToUnstructured(t, currentDeployment)),
    64  				Status:     status.CurrentStatus,
    65  				Resource:   testutil.YamlToUnstructured(t, currentDeployment),
    66  				Message:    "Deployment is available. Replicas: 1",
    67  			},
    68  		},
    69  		"Resource not found": {
    70  			identifier: object.UnstructuredToObjMetadata(testutil.YamlToUnstructured(t, currentDeployment)),
    71  			readerErr:  errors.NewNotFound(deploymentGVR.GroupResource(), "test"),
    72  			expectedResourceStatus: &event.ResourceStatus{
    73  				Identifier: object.UnstructuredToObjMetadata(testutil.YamlToUnstructured(t, currentDeployment)),
    74  				Status:     status.NotFoundStatus,
    75  				Message:    "Resource not found",
    76  			},
    77  		},
    78  		"Context cancelled": {
    79  			identifier:  object.UnstructuredToObjMetadata(testutil.YamlToUnstructured(t, currentDeployment)),
    80  			readerErr:   context.Canceled,
    81  			expectedErr: context.Canceled,
    82  		},
    83  	}
    84  
    85  	for tn := range testCases {
    86  		tc := testCases[tn]
    87  		t.Run(tn, func(t *testing.T) {
    88  			fakeReader := &fakecr.ClusterReader{
    89  				GetResource: tc.readerResource,
    90  				GetErr:      tc.readerErr,
    91  			}
    92  			fakeMapper := fakemapper.NewFakeRESTMapper(deploymentGVK, replicaSetGVK)
    93  
    94  			fakeStatusReader := &fake.StatusReader{}
    95  			statusReader := NewDeploymentResourceReader(fakeMapper, fakeStatusReader)
    96  
    97  			rs, err := statusReader.ReadStatus(context.Background(), fakeReader, tc.identifier)
    98  
    99  			if tc.expectedErr != nil {
   100  				if err == nil {
   101  					t.Errorf("expected error, but didn't get one")
   102  				} else {
   103  					assert.EqualError(t, err, tc.expectedErr.Error())
   104  				}
   105  				return
   106  			}
   107  
   108  			require.NoError(t, err)
   109  			assert.Equal(t, tc.expectedResourceStatus, rs)
   110  		})
   111  	}
   112  }
   113  

View as plain text