Skip to content

Commit dd28a83

Browse files
committed
Add tests for database and distributed architecture
Signed-off-by: Dmitry Tantsur <[email protected]>
1 parent 347f743 commit dd28a83

File tree

1 file changed

+81
-14
lines changed

1 file changed

+81
-14
lines changed

test/suite_test.go

Lines changed: 81 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
. "github.com/onsi/gomega"
3030

3131
corev1 "k8s.io/api/core/v1"
32+
k8serrors "k8s.io/apimachinery/pkg/api/errors"
3233
"k8s.io/apimachinery/pkg/api/meta"
3334
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3435
"k8s.io/apimachinery/pkg/types"
@@ -82,6 +83,42 @@ var _ = BeforeSuite(func() {
8283

8384
})
8485

86+
func WaitForIronic(name types.NamespacedName) *metal3api.Ironic {
87+
GinkgoHelper()
88+
89+
ironic := &metal3api.Ironic{}
90+
91+
By("waiting for Ironic deployment")
92+
93+
var cond *metav1.Condition
94+
for attempt := 0; attempt < 10; attempt += 1 {
95+
err := k8sClient.Get(ctx, name, ironic)
96+
Expect(err).NotTo(HaveOccurred())
97+
98+
cond = meta.FindStatusCondition(ironic.Status.Conditions, string(metal3api.IronicStatusAvailable))
99+
if cond != nil && cond.Status == metav1.ConditionTrue {
100+
break
101+
}
102+
103+
time.Sleep(5 * time.Second)
104+
}
105+
106+
if cond == nil || cond.Status != metav1.ConditionTrue {
107+
Fail("Ironic deployment never succeded")
108+
}
109+
110+
return ironic
111+
}
112+
113+
func VerifyIronic(ironic *metal3api.Ironic) {
114+
GinkgoHelper()
115+
116+
By("checking the service")
117+
118+
_, err := clientset.CoreV1().Services(ironic.Namespace).Get(ctx, ironic.Name, metav1.GetOptions{})
119+
Expect(err).NotTo(HaveOccurred())
120+
}
121+
85122
var _ = Describe("Ironic object tests", func() {
86123
var namespace string
87124

@@ -93,6 +130,16 @@ var _ = Describe("Ironic object tests", func() {
93130
Expect(err).NotTo(HaveOccurred())
94131
DeferCleanup(func() {
95132
_ = clientset.CoreV1().Namespaces().Delete(ctx, namespace, metav1.DeleteOptions{})
133+
for attempt := 0; attempt < 10; attempt += 1 {
134+
_, err := clientset.CoreV1().Namespaces().Get(ctx, namespace, metav1.GetOptions{})
135+
if err != nil && k8serrors.IsNotFound(err) {
136+
break
137+
} else {
138+
Expect(err).NotTo(HaveOccurred())
139+
}
140+
141+
time.Sleep(5 * time.Second)
142+
}
96143
})
97144
})
98145

@@ -102,33 +149,53 @@ var _ = Describe("Ironic object tests", func() {
102149
Namespace: namespace,
103150
}
104151

105-
ironic := metal3api.Ironic{
152+
ironic := &metal3api.Ironic{
106153
ObjectMeta: metav1.ObjectMeta{
107154
Name: name.Name,
108155
Namespace: name.Namespace,
109156
},
110157
}
111-
err := k8sClient.Create(ctx, &ironic)
158+
err := k8sClient.Create(ctx, ironic)
112159
Expect(err).NotTo(HaveOccurred())
113160

114-
var cond *metav1.Condition
115-
for attempt := 0; attempt < 10; attempt += 1 {
116-
err = k8sClient.Get(ctx, name, &ironic)
117-
Expect(err).NotTo(HaveOccurred())
161+
ironic = WaitForIronic(name)
162+
VerifyIronic(ironic)
163+
})
118164

119-
cond = meta.FindStatusCondition(ironic.Status.Conditions, string(metal3api.IronicStatusAvailable))
120-
if cond != nil && cond.Status == metav1.ConditionTrue {
121-
break
122-
}
165+
It("creates distributed Ironic", func() {
166+
name := types.NamespacedName{
167+
Name: "test-ironic",
168+
Namespace: namespace,
169+
}
123170

124-
time.Sleep(5 * time.Second)
171+
ironicDb := &metal3api.IronicDatabase{
172+
ObjectMeta: metav1.ObjectMeta{
173+
Name: fmt.Sprintf("%s-db", name.Name),
174+
Namespace: name.Namespace,
175+
},
125176
}
126177

127-
if cond == nil || cond.Status != metav1.ConditionTrue {
128-
Fail("Ironic deployment never succeded")
178+
err := k8sClient.Create(ctx, ironicDb)
179+
Expect(err).NotTo(HaveOccurred())
180+
181+
ironic := &metal3api.Ironic{
182+
ObjectMeta: metav1.ObjectMeta{
183+
Name: name.Name,
184+
Namespace: name.Namespace,
185+
},
186+
Spec: metal3api.IronicSpec{
187+
DatabaseRef: corev1.LocalObjectReference{
188+
Name: ironicDb.Name,
189+
},
190+
Distributed: true,
191+
},
129192
}
130-
})
193+
err = k8sClient.Create(ctx, ironic)
194+
Expect(err).NotTo(HaveOccurred())
131195

196+
ironic = WaitForIronic(name)
197+
VerifyIronic(ironic)
198+
})
132199
})
133200

134201
var _ = AfterSuite(func() {

0 commit comments

Comments
 (0)