...
1 package komega
2
3 import (
4 "testing"
5
6 _ "github.com/onsi/ginkgo/v2"
7 . "github.com/onsi/gomega"
8 appsv1 "k8s.io/api/apps/v1"
9 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10 "k8s.io/utils/ptr"
11
12 "sigs.k8s.io/controller-runtime/pkg/client"
13 fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
14 )
15
16 func exampleDeployment() *appsv1.Deployment {
17 return &appsv1.Deployment{
18 ObjectMeta: metav1.ObjectMeta{
19 Namespace: "default",
20 Name: "test",
21 },
22 Spec: appsv1.DeploymentSpec{
23 Replicas: ptr.To(int32(5)),
24 },
25 }
26 }
27
28 func createFakeClient() client.Client {
29 return fakeclient.NewClientBuilder().
30 WithObjects(exampleDeployment()).
31 Build()
32 }
33
34 func TestGet(t *testing.T) {
35 g := NewWithT(t)
36
37 fc := createFakeClient()
38 k := New(fc)
39
40 fetched := appsv1.Deployment{
41 ObjectMeta: metav1.ObjectMeta{
42 Namespace: "default",
43 Name: "test",
44 },
45 }
46 g.Eventually(k.Get(&fetched)).Should(Succeed())
47
48 g.Expect(*fetched.Spec.Replicas).To(BeEquivalentTo(5))
49 }
50
51 func TestList(t *testing.T) {
52 g := NewWithT(t)
53
54 fc := createFakeClient()
55 k := New(fc)
56
57 list := appsv1.DeploymentList{}
58 g.Eventually(k.List(&list)).Should(Succeed())
59
60 g.Expect(list.Items).To(HaveLen(1))
61 depl := exampleDeployment()
62 g.Expect(list.Items[0]).To(And(
63 HaveField("ObjectMeta.Name", Equal(depl.ObjectMeta.Name)),
64 HaveField("ObjectMeta.Namespace", Equal(depl.ObjectMeta.Namespace)),
65 ))
66 }
67
68 func TestUpdate(t *testing.T) {
69 g := NewWithT(t)
70
71 fc := createFakeClient()
72 k := New(fc)
73
74 updateDeployment := appsv1.Deployment{
75 ObjectMeta: exampleDeployment().ObjectMeta,
76 }
77 g.Eventually(k.Update(&updateDeployment, func() {
78 updateDeployment.Annotations = map[string]string{"updated": "true"}
79 })).Should(Succeed())
80
81 fetched := appsv1.Deployment{
82 ObjectMeta: exampleDeployment().ObjectMeta,
83 }
84 g.Expect(k.Object(&fetched)()).To(HaveField("ObjectMeta.Annotations", HaveKeyWithValue("updated", "true")))
85 }
86
87 func TestUpdateStatus(t *testing.T) {
88 g := NewWithT(t)
89
90 fc := createFakeClient()
91 k := New(fc)
92
93 updateDeployment := appsv1.Deployment{
94 ObjectMeta: exampleDeployment().ObjectMeta,
95 }
96 g.Eventually(k.UpdateStatus(&updateDeployment, func() {
97 updateDeployment.Status.AvailableReplicas = 1
98 })).Should(Succeed())
99
100 fetched := appsv1.Deployment{
101 ObjectMeta: exampleDeployment().ObjectMeta,
102 }
103 g.Expect(k.Object(&fetched)()).To(HaveField("Status.AvailableReplicas", BeEquivalentTo(1)))
104 }
105
106 func TestObject(t *testing.T) {
107 g := NewWithT(t)
108
109 fc := createFakeClient()
110 k := New(fc)
111
112 fetched := appsv1.Deployment{
113 ObjectMeta: metav1.ObjectMeta{
114 Namespace: "default",
115 Name: "test",
116 },
117 }
118 g.Eventually(k.Object(&fetched)).Should(And(
119 Not(BeNil()),
120 HaveField("Spec.Replicas", Equal(ptr.To(int32(5)))),
121 ))
122 }
123
124 func TestObjectList(t *testing.T) {
125 g := NewWithT(t)
126
127 fc := createFakeClient()
128 k := New(fc)
129
130 list := appsv1.DeploymentList{}
131 g.Eventually(k.ObjectList(&list)).Should(And(
132 Not(BeNil()),
133 HaveField("Items", And(
134 HaveLen(1),
135 ContainElement(HaveField("Spec.Replicas", Equal(ptr.To(int32(5))))),
136 )),
137 ))
138 }
139
View as plain text