44 "context"
55 "errors"
66 "fmt"
7- "io/ioutil "
7+ "os "
88 "testing"
99 "time"
1010
@@ -21,15 +21,19 @@ import (
2121)
2222
2323var (
24- healthCheckNamespace = "health"
25- healthCheckName = "inline-monitor-remedy"
26- healthCheckKey = types.NamespacedName {Name : healthCheckName , Namespace : healthCheckNamespace }
27- healthCheckNameNs = "inline-monitor-remedy-namespace"
28- healthCheckKeyNs = types.NamespacedName {Name : healthCheckNameNs , Namespace : healthCheckNamespace }
29- healthCheckNamePause = "inline-hello-pause"
30- healthCheckKeyPause = types.NamespacedName {Name : healthCheckNamePause , Namespace : healthCheckNamespace }
31- healthCheckNameRetry = "inline-hello-custom-retry"
32- healthCheckKeyRetry = types.NamespacedName {Name : healthCheckNameRetry , Namespace : healthCheckNamespace }
24+ healthCheckNamespace = "health"
25+ healthCheckName = "inline-monitor-remedy"
26+ healthCheckKey = types.NamespacedName {Name : healthCheckName , Namespace : healthCheckNamespace }
27+ healthCheckNameNs = "inline-monitor-remedy-namespace"
28+ healthCheckKeyNs = types.NamespacedName {Name : healthCheckNameNs , Namespace : healthCheckNamespace }
29+ healthCheckNamePause = "inline-hello-pause"
30+ healthCheckKeyPause = types.NamespacedName {Name : healthCheckNamePause , Namespace : healthCheckNamespace }
31+ healthCheckNameRetry = "inline-hello-custom-retry"
32+ healthCheckKeyRetry = types.NamespacedName {Name : healthCheckNameRetry , Namespace : healthCheckNamespace }
33+ healthCheckAlreadyScheduled = "inline-monitor-remedy-already-scheduled"
34+ healthCheckKeyAlreadyScheduled = types.NamespacedName {Name : healthCheckAlreadyScheduled , Namespace : healthCheckNamespace }
35+
36+ sharedCtrl * HealthCheckReconciler
3337)
3438
3539const timeout = time .Second * 60
@@ -38,8 +42,7 @@ var _ = Describe("Active-Monitor Controller", func() {
3842 Describe ("healthCheck CR can be reconciled at cluster level" , func () {
3943 var instance * activemonitorv1alpha1.HealthCheck
4044 It ("instance should be parsable" , func () {
41- // healthCheckYaml, err := ioutil.ReadFile("../examples/inlineHello.yaml")
42- healthCheckYaml , err := ioutil .ReadFile ("../../examples/bdd/inlineMemoryRemedyUnitTest.yaml" )
45+ healthCheckYaml , err := os .ReadFile ("../../examples/bdd/inlineMemoryRemedyUnitTest.yaml" )
4346 Expect (err ).ToNot (HaveOccurred ())
4447 instance , err = parseHealthCheckYaml (healthCheckYaml )
4548 Expect (err ).ToNot (HaveOccurred ())
@@ -77,8 +80,8 @@ var _ = Describe("Active-Monitor Controller", func() {
7780 var instance * activemonitorv1alpha1.HealthCheck
7881
7982 It ("instance should be parsable" , func () {
80- // healthCheckYaml, err := ioutil .ReadFile("../examples/inlineHello.yaml")
81- healthCheckYaml , err := ioutil .ReadFile ("../../examples/bdd/inlineMemoryRemedyUnitTest_Namespace.yaml" )
83+ // healthCheckYaml, err := os .ReadFile("../examples/inlineHello.yaml")
84+ healthCheckYaml , err := os .ReadFile ("../../examples/bdd/inlineMemoryRemedyUnitTest_Namespace.yaml" )
8285 Expect (err ).ToNot (HaveOccurred ())
8386
8487 instance , err = parseHealthCheckYaml (healthCheckYaml )
@@ -117,7 +120,7 @@ var _ = Describe("Active-Monitor Controller", func() {
117120 var instance * activemonitorv1alpha1.HealthCheck
118121
119122 It ("instance should be parsable" , func () {
120- healthCheckYaml , err := ioutil .ReadFile ("../../examples/bdd/inlineHelloTest.yaml" )
123+ healthCheckYaml , err := os .ReadFile ("../../examples/bdd/inlineHelloTest.yaml" )
121124 Expect (err ).ToNot (HaveOccurred ())
122125
123126 instance , err = parseHealthCheckYaml (healthCheckYaml )
@@ -152,11 +155,55 @@ var _ = Describe("Active-Monitor Controller", func() {
152155 })
153156 })
154157
158+ Describe ("healthCheck CR will be reconcile if it is executed and rescheduled" , func () {
159+ var instance * activemonitorv1alpha1.HealthCheck
160+
161+ It ("instance should be parsable" , func () {
162+ healthCheckYaml , err := os .ReadFile ("../../examples/bdd/inlineHelloTest.yaml" )
163+ Expect (err ).ToNot (HaveOccurred ())
164+
165+ instance , err = parseHealthCheckYaml (healthCheckYaml )
166+ Expect (err ).ToNot (HaveOccurred ())
167+ Expect (instance ).To (BeAssignableToTypeOf (& activemonitorv1alpha1.HealthCheck {}))
168+ Expect (instance .GetName ()).To (Equal (healthCheckNamePause ))
169+ })
170+
171+ It ("instance should be reconciled" , func () {
172+ instance .SetNamespace (healthCheckNamespace )
173+ instance .SetName (healthCheckAlreadyScheduled )
174+ instance .Spec .RepeatAfterSec = 60
175+ sharedCtrl .RepeatTimersByName [instance .Name ] = time .AfterFunc (time .Second * 60 , func () {})
176+
177+ err := k8sClient .Create (context .TODO (), instance )
178+ if apierrors .IsInvalid (err ) {
179+ log .Error (err , "failed to create object, got an invalid object error" )
180+ return
181+ }
182+ Expect (err ).NotTo (HaveOccurred ())
183+ defer k8sClient .Delete (context .TODO (), instance )
184+
185+ Eventually (func () error {
186+ if err := k8sClient .Get (context .TODO (), healthCheckKeyAlreadyScheduled , instance ); err != nil {
187+ return err
188+ }
189+
190+ if instance .Status .StartedAt != nil {
191+ return nil
192+ }
193+ return fmt .Errorf ("HealthCheck is not valid" )
194+ // return nil
195+ }, timeout ).Should (Succeed ())
196+
197+ By ("Verify healthCheck has been reconciled by checking for status" )
198+ Expect (instance .Status .ErrorMessage ).ShouldNot (BeEmpty ())
199+ })
200+ })
201+
155202 Describe ("healthCheck CR will properly parse backoff customizations" , func () {
156203 var instance * activemonitorv1alpha1.HealthCheck
157204
158205 It ("instance should be parsable" , func () {
159- healthCheckYaml , err := ioutil .ReadFile ("../../examples/bdd/inlineCustomBackoffTest.yaml" )
206+ healthCheckYaml , err := os .ReadFile ("../../examples/bdd/inlineCustomBackoffTest.yaml" )
160207 Expect (err ).ToNot (HaveOccurred ())
161208
162209 instance , err = parseHealthCheckYaml (healthCheckYaml )
0 commit comments