1
2
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