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