@@ -17,6 +17,8 @@ limitations under the License.
1717package functional_test
1818
1919import (
20+ "fmt"
21+
2022 . "github.com/onsi/ginkgo/v2" //revive:disable:dot-imports
2123 . "github.com/onsi/gomega" //revive:disable:dot-imports
2224
@@ -37,7 +39,29 @@ var _ = Describe("Tempest controller", func() {
3739 }
3840 })
3941
40- When ("A Tempest intance is created" , func () {
42+ DescribeTable ("Missing Openstack resources should set InputReady to false" ,
43+ func (createResource func ()) {
44+ createResource ()
45+ DeferCleanup (th .DeleteInstance , CreateTempest (tempestName , GetDefaultTempestSpec ()))
46+
47+ th .ExpectCondition (
48+ tempestName ,
49+ ConditionGetterFunc (TempestConditionGetter ),
50+ condition .InputReadyCondition ,
51+ corev1 .ConditionFalse ,
52+ )
53+ },
54+ Entry ("when config map is missing" , func () {
55+ _ , secret := CreateCommonOpenstackResources (namespace )
56+ Expect (k8sClient .Create (ctx , secret )).Should (Succeed ())
57+ }),
58+ Entry ("when secret is missing" , func () {
59+ cm , _ := CreateCommonOpenstackResources (namespace )
60+ Expect (k8sClient .Create (ctx , cm )).Should (Succeed ())
61+ }),
62+ )
63+
64+ When ("A Tempest instance is created" , func () {
4165 BeforeEach (func () {
4266 openstackConfigMap , openstackSecret := CreateCommonOpenstackResources (namespace )
4367 Expect (k8sClient .Create (ctx , openstackConfigMap )).Should (Succeed ())
@@ -52,13 +76,18 @@ var _ = Describe("Tempest controller", func() {
5276 }, timeout * 2 , interval ).Should (Succeed ())
5377 })
5478
55- It ("is not ready" , func () {
56- th .ExpectCondition (
57- tempestName ,
58- ConditionGetterFunc (TempestConditionGetter ),
59- condition .ReadyCondition ,
60- corev1 .ConditionUnknown ,
61- )
79+ It ("should have the Spec fields initialized" , func () {
80+ tempest := GetTempest (tempestName )
81+ Expect (tempest .Spec .StorageClass ).Should (Equal (DefaultStorageClass ))
82+ Expect (tempest .Spec .OpenStackConfigMap ).Should (Equal (OpenStackConfigMapName ))
83+ Expect (tempest .Spec .OpenStackConfigSecret ).Should (Equal (OpenStackConfigSecretName ))
84+ Expect (tempest .Spec .TempestRun .IncludeList ).ShouldNot (BeEmpty ())
85+ })
86+
87+ It ("should have empty Status fields" , func () {
88+ tempest := GetTempest (tempestName )
89+ Expect (tempest .Status .Hash ).To (BeEmpty ())
90+ Expect (tempest .Status .NetworkAttachments ).To (BeEmpty ())
6291 })
6392
6493 It ("should have a finalizer" , func () {
@@ -69,4 +98,75 @@ var _ = Describe("Tempest controller", func() {
6998 }, timeout , interval ).Should (ContainElement ("openstack.org/tempest" ))
7099 })
71100 })
101+
102+ When ("All dependencies are ready" , func () {
103+ var customDataConfigMapName string
104+ var envVarsConfigMapName string
105+
106+ BeforeEach (func () {
107+ openstackConfigMap , openstackSecret := CreateCommonOpenstackResources (namespace )
108+ Expect (k8sClient .Create (ctx , openstackConfigMap )).Should (Succeed ())
109+ Expect (k8sClient .Create (ctx , openstackSecret )).Should (Succeed ())
110+ DeferCleanup (th .DeleteInstance , CreateTempest (tempestName , GetDefaultTempestSpec ()))
111+
112+ customDataConfigMapName = fmt .Sprintf ("%s-custom-data-s0" , tempestName .Name )
113+ envVarsConfigMapName = fmt .Sprintf ("%s-env-vars-s0" , tempestName .Name )
114+ })
115+
116+ It ("should have InputReady condition true" , func () {
117+ th .ExpectCondition (
118+ tempestName ,
119+ ConditionGetterFunc (TempestConditionGetter ),
120+ condition .InputReadyCondition ,
121+ corev1 .ConditionTrue ,
122+ )
123+ })
124+
125+ It ("should create a PVC for logs" , func () {
126+ pvc := GetTestOperatorPVC (namespace , tempestName .Name )
127+ Expect (pvc .Name ).ToNot (BeEmpty ())
128+ Expect (* pvc .Spec .StorageClassName ).To (Equal (DefaultStorageClass ))
129+ Expect (pvc .Spec .AccessModes ).To (ContainElement (corev1 .ReadWriteOnce ))
130+ })
131+
132+ It ("should create required ConfigMaps" , func () {
133+ customDataCM := th .GetConfigMap (types.NamespacedName {
134+ Namespace : namespace ,
135+ Name : customDataConfigMapName ,
136+ })
137+ Expect (customDataCM .Data ).To (HaveKey ("include.txt" ))
138+
139+ envVarsCM := th .GetConfigMap (types.NamespacedName {
140+ Namespace : namespace ,
141+ Name : envVarsConfigMapName ,
142+ })
143+ Expect (envVarsCM .Data ).NotTo (BeEmpty ())
144+ })
145+
146+ It ("should create a pod" , func () {
147+ pod := GetTestOperatorPod (namespace , tempestName .Name )
148+ Expect (pod .Name ).ToNot (BeEmpty ())
149+ })
150+
151+ It ("should become Ready when pod succeeds" , func () {
152+ pod := GetTestOperatorPod (namespace , tempestName .Name )
153+ SimulatePodSucceeded (types.NamespacedName {
154+ Namespace : namespace ,
155+ Name : pod .Name ,
156+ })
157+
158+ th .ExpectCondition (
159+ tempestName ,
160+ ConditionGetterFunc (TempestConditionGetter ),
161+ condition .DeploymentReadyCondition ,
162+ corev1 .ConditionTrue ,
163+ )
164+ th .ExpectCondition (
165+ tempestName ,
166+ ConditionGetterFunc (TempestConditionGetter ),
167+ condition .ReadyCondition ,
168+ corev1 .ConditionTrue ,
169+ )
170+ })
171+ })
72172})
0 commit comments