...

Source file src/sigs.k8s.io/cli-utils/pkg/kstatus/polling/aggregator/aggregator_test.go

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

     1  // Copyright 2020 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.0
     3  
     4  package aggregator
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  	"k8s.io/apimachinery/pkg/runtime/schema"
    11  	"sigs.k8s.io/cli-utils/pkg/kstatus/polling/event"
    12  	"sigs.k8s.io/cli-utils/pkg/kstatus/status"
    13  	"sigs.k8s.io/cli-utils/pkg/object"
    14  )
    15  
    16  var resourceIdentifiers = map[string]object.ObjMetadata{
    17  	"deployment": {
    18  		GroupKind: schema.GroupKind{
    19  			Group: "apps",
    20  			Kind:  "Deployment",
    21  		},
    22  		Name:      "Foo",
    23  		Namespace: "default",
    24  	},
    25  	"statefulset": {
    26  		GroupKind: schema.GroupKind{
    27  			Group: "apps",
    28  			Kind:  "StatefulSet",
    29  		},
    30  		Name:      "Bar",
    31  		Namespace: "default",
    32  	},
    33  	"service": {
    34  		GroupKind: schema.GroupKind{
    35  			Group: "",
    36  			Kind:  "Service",
    37  		},
    38  		Name:      "Service",
    39  		Namespace: "default",
    40  	},
    41  }
    42  
    43  func TestAggregator(t *testing.T) {
    44  	testCases := map[string]struct {
    45  		desiredStatus    status.Status
    46  		resourceStatuses []*event.ResourceStatus
    47  		aggregateStatus  status.Status
    48  	}{
    49  		"no identifiers": {
    50  			desiredStatus:    status.CurrentStatus,
    51  			resourceStatuses: []*event.ResourceStatus{},
    52  			aggregateStatus:  status.CurrentStatus,
    53  		},
    54  		"single resource": {
    55  			desiredStatus: status.CurrentStatus,
    56  			resourceStatuses: []*event.ResourceStatus{
    57  				{
    58  					Identifier: resourceIdentifiers["deployment"],
    59  					Status:     status.CurrentStatus,
    60  				},
    61  			},
    62  			aggregateStatus: status.CurrentStatus,
    63  		},
    64  		"multiple resources with one unknown status": {
    65  			desiredStatus: status.CurrentStatus,
    66  			resourceStatuses: []*event.ResourceStatus{
    67  				{
    68  					Identifier: resourceIdentifiers["deployment"],
    69  					Status:     status.UnknownStatus,
    70  				},
    71  				{
    72  					Identifier: resourceIdentifiers["statefulset"],
    73  					Status:     status.InProgressStatus,
    74  				},
    75  			},
    76  			aggregateStatus: status.UnknownStatus,
    77  		},
    78  		"multiple resources with one failed": {
    79  			desiredStatus: status.CurrentStatus,
    80  			resourceStatuses: []*event.ResourceStatus{
    81  				{
    82  					Identifier: resourceIdentifiers["deployment"],
    83  					Status:     status.NotFoundStatus,
    84  				},
    85  				{
    86  					Identifier: resourceIdentifiers["statefulset"],
    87  					Status:     status.CurrentStatus,
    88  				},
    89  				{
    90  					Identifier: resourceIdentifiers["service"],
    91  					Status:     status.FailedStatus,
    92  				},
    93  			},
    94  			aggregateStatus: status.FailedStatus,
    95  		},
    96  	}
    97  
    98  	for tn, tc := range testCases {
    99  		t.Run(tn, func(t *testing.T) {
   100  			aggStatus := AggregateStatus(tc.resourceStatuses, tc.desiredStatus)
   101  
   102  			assert.Equal(t, tc.aggregateStatus, aggStatus)
   103  		})
   104  	}
   105  }
   106  

View as plain text