...

Source file src/sigs.k8s.io/cli-utils/pkg/kstatus/polling/statusreaders/pod_controller_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  	"fmt"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  	v1 "k8s.io/api/apps/v1"
    13  	"k8s.io/apimachinery/pkg/api/meta"
    14  	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
    15  	"k8s.io/apimachinery/pkg/runtime/schema"
    16  	fakecr "sigs.k8s.io/cli-utils/pkg/kstatus/polling/clusterreader/fake"
    17  	"sigs.k8s.io/cli-utils/pkg/kstatus/polling/engine"
    18  	"sigs.k8s.io/cli-utils/pkg/kstatus/polling/event"
    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  func TestPodControllerStatusReader(t *testing.T) {
    25  	rsGVK = v1.SchemeGroupVersion.WithKind("ReplicaSet")
    26  	name := "Foo"
    27  	namespace := "Bar"
    28  
    29  	testCases := map[string]struct {
    30  		computeStatusResult *status.Result
    31  		computeStatusErr    error
    32  		genResourceStatuses event.ResourceStatuses
    33  		expectedIdentifier  object.ObjMetadata
    34  		expectedStatus      status.Status
    35  	}{
    36  		"successfully computes status": {
    37  			computeStatusResult: &status.Result{
    38  				Status:  status.InProgressStatus,
    39  				Message: "this is a test",
    40  			},
    41  			expectedIdentifier: object.ObjMetadata{
    42  				GroupKind: rsGVK.GroupKind(),
    43  				Name:      name,
    44  				Namespace: namespace,
    45  			},
    46  			expectedStatus: status.InProgressStatus,
    47  		},
    48  		"computing status fails": {
    49  			computeStatusErr: fmt.Errorf("this error is a test"),
    50  			expectedIdentifier: object.ObjMetadata{
    51  				GroupKind: rsGVK.GroupKind(),
    52  				Name:      name,
    53  				Namespace: namespace,
    54  			},
    55  			expectedStatus: status.UnknownStatus,
    56  		},
    57  		"one of the pods has failed status": {
    58  			computeStatusResult: &status.Result{
    59  				Status:  status.InProgressStatus,
    60  				Message: "this is a test",
    61  			},
    62  			genResourceStatuses: event.ResourceStatuses{
    63  				{
    64  					Status: status.CurrentStatus,
    65  				},
    66  				{
    67  					Status: status.InProgressStatus,
    68  				},
    69  				{
    70  					Status: status.FailedStatus,
    71  				},
    72  			},
    73  			expectedIdentifier: object.ObjMetadata{
    74  				GroupKind: rsGVK.GroupKind(),
    75  				Name:      name,
    76  				Namespace: namespace,
    77  			},
    78  			expectedStatus: status.FailedStatus,
    79  		},
    80  	}
    81  
    82  	for tn, tc := range testCases {
    83  		t.Run(tn, func(t *testing.T) {
    84  			fakeReader := fakecr.NewNoopClusterReader()
    85  			fakeMapper := fakemapper.NewFakeRESTMapper()
    86  			podControllerStatusReader := &podControllerStatusReader{
    87  				mapper: fakeMapper,
    88  				statusFunc: func(u *unstructured.Unstructured) (*status.Result, error) {
    89  					return tc.computeStatusResult, tc.computeStatusErr
    90  				},
    91  				statusForGenResourcesFunc: fakeStatusForGenResourcesFunc(tc.genResourceStatuses, nil),
    92  			}
    93  
    94  			rs := &unstructured.Unstructured{}
    95  			rs.SetGroupVersionKind(rsGVK)
    96  			rs.SetName(name)
    97  			rs.SetNamespace(namespace)
    98  
    99  			resourceStatus, err := podControllerStatusReader.readStatus(context.Background(), fakeReader, rs)
   100  
   101  			assert.NoError(t, err)
   102  			assert.Equal(t, tc.expectedIdentifier, resourceStatus.Identifier)
   103  			assert.Equal(t, tc.expectedStatus, resourceStatus.Status)
   104  		})
   105  	}
   106  }
   107  
   108  func fakeStatusForGenResourcesFunc(resourceStatuses event.ResourceStatuses, err error) statusForGenResourcesFunc {
   109  	return func(_ context.Context, _ meta.RESTMapper, _ engine.ClusterReader, _ resourceTypeStatusReader,
   110  		_ *unstructured.Unstructured, _ schema.GroupKind, _ ...string) (event.ResourceStatuses, error) {
   111  		return resourceStatuses, err
   112  	}
   113  }
   114  

View as plain text