-
Notifications
You must be signed in to change notification settings - Fork 11
/
coil_test.go
120 lines (104 loc) · 2.87 KB
/
coil_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
package dctest
import (
"encoding/json"
"errors"
"fmt"
"os"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
)
// testCoilSetup tests Coil setup
func testCoilSetup() {
It("should be deployed successfully", func() {
By("waiting for coild DaemonSet and coil-controller Deployment")
checkCoilNodeDaemonSet()
checkCoilControllerDeployment()
Eventually(func() error {
stdout, _, err := execAt(bootServers[0], "kubectl", "get", "nodes", "-o", "json")
if err != nil {
return err
}
var nl corev1.NodeList
err = json.Unmarshal(stdout, &nl)
if err != nil {
return err
}
OUTER:
for _, n := range nl.Items {
for _, cond := range n.Status.Conditions {
if cond.Type != corev1.NodeReady {
continue
}
if cond.Status != corev1.ConditionTrue {
return fmt.Errorf("node %s is not ready", n.Name)
}
continue OUTER
}
return fmt.Errorf("node %s has no readiness status", n.Name)
}
return nil
}).Should(Succeed())
By("creating IP address pool")
Eventually(func() error {
data, err := os.ReadFile(addressPoolsFile)
if err != nil {
return err
}
stdout, stderr, err := execAtWithInput(bootServers[0], data, "kubectl", "apply", "-f", "-")
if err != nil {
return fmt.Errorf("err=%s stdout=%s, stderr=%s", err, stdout, stderr)
}
return nil
}).Should(Succeed())
})
}
// testCoil tests Coil
func testCoil() {
It("should be available", func() {
By("checking coild DaemonSet and coil-controller Deployment")
checkCoilNodeDaemonSet()
checkCoilControllerDeployment()
// Pod creation is tested somewhere else.
})
}
func checkCoilNodeDaemonSet() {
EventuallyWithOffset(1, func() error {
stdout, _, err := execAt(bootServers[0], "kubectl", "--namespace=kube-system",
"get", "daemonsets/coild", "-o=json")
if err != nil {
return err
}
daemonset := new(appsv1.DaemonSet)
err = json.Unmarshal(stdout, daemonset)
if err != nil {
return err
}
if daemonset.Status.NumberReady != daemonset.Status.DesiredNumberScheduled {
return fmt.Errorf("NumberReady: %d, DesiredNumberScheduled: %d", daemonset.Status.NumberReady, daemonset.Status.DesiredNumberScheduled)
}
if daemonset.Status.NumberReady == 0 {
return errors.New("NumberReady == 0")
}
return nil
}).Should(Succeed())
}
func checkCoilControllerDeployment() {
EventuallyWithOffset(1, func() error {
stdout, _, err := execAt(bootServers[0], "kubectl", "--namespace=kube-system",
"get", "deployment/coil-controller", "-o=json")
if err != nil {
return err
}
deployment := new(appsv1.Deployment)
err = json.Unmarshal(stdout, deployment)
if err != nil {
return err
}
if deployment.Status.ReadyReplicas != 2 {
return fmt.Errorf("ReadyReplicas is not 2 but %d", deployment.Status.ReadyReplicas)
}
return nil
}).Should(Succeed())
}