github.com/argoproj/argo-events@v1.9.1/test/e2e/fixtures/when.go (about) 1 package fixtures 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 9 "k8s.io/client-go/kubernetes" 10 "k8s.io/client-go/rest" 11 12 eventbusv1alpha1 "github.com/argoproj/argo-events/pkg/apis/eventbus/v1alpha1" 13 eventsourcev1alpha1 "github.com/argoproj/argo-events/pkg/apis/eventsource/v1alpha1" 14 sensorv1alpha1 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1" 15 eventbuspkg "github.com/argoproj/argo-events/pkg/client/eventbus/clientset/versioned/typed/eventbus/v1alpha1" 16 eventsourcepkg "github.com/argoproj/argo-events/pkg/client/eventsource/clientset/versioned/typed/eventsource/v1alpha1" 17 sensorpkg "github.com/argoproj/argo-events/pkg/client/sensor/clientset/versioned/typed/sensor/v1alpha1" 18 testutil "github.com/argoproj/argo-events/test/util" 19 ) 20 21 type When struct { 22 t *testing.T 23 eventBusClient eventbuspkg.EventBusInterface 24 eventSourceClient eventsourcepkg.EventSourceInterface 25 sensorClient sensorpkg.SensorInterface 26 eventBus *eventbusv1alpha1.EventBus 27 eventSource *eventsourcev1alpha1.EventSource 28 sensor *sensorv1alpha1.Sensor 29 restConfig *rest.Config 30 kubeClient kubernetes.Interface 31 } 32 33 func (w *When) CreateEventBus() *When { 34 w.t.Helper() 35 if w.eventBus == nil { 36 w.t.Fatal("No event bus to create") 37 } 38 w.t.Log("Creating event bus", w.eventBus.Name) 39 ctx := context.Background() 40 eb, err := w.eventBusClient.Create(ctx, w.eventBus, metav1.CreateOptions{}) 41 if err != nil { 42 w.t.Fatal(err) 43 } else { 44 w.eventBus = eb 45 } 46 return w 47 } 48 49 func (w *When) DeleteEventBus() *When { 50 w.t.Helper() 51 if w.eventBus == nil { 52 w.t.Fatal("No event bus to delete") 53 } 54 w.t.Log("Deleting event bus", w.eventBus.Name) 55 ctx := context.Background() 56 err := w.eventBusClient.Delete(ctx, w.eventBus.Name, metav1.DeleteOptions{}) 57 if err != nil { 58 w.t.Fatal(err) 59 } 60 return w 61 } 62 63 func (w *When) CreateEventSource() *When { 64 w.t.Helper() 65 if w.eventSource == nil { 66 w.t.Fatal("No event source to create") 67 } 68 w.t.Log("Creating event source", w.eventSource.Name) 69 ctx := context.Background() 70 es, err := w.eventSourceClient.Create(ctx, w.eventSource, metav1.CreateOptions{}) 71 if err != nil { 72 w.t.Fatal(err) 73 } else { 74 w.eventSource = es 75 } 76 return w 77 } 78 79 func (w *When) DeleteEventSource() *When { 80 w.t.Helper() 81 if w.eventSource == nil { 82 w.t.Fatal("No event source to delete") 83 } 84 w.t.Log("Deleting event source", w.eventSource.Name) 85 ctx := context.Background() 86 err := w.eventSourceClient.Delete(ctx, w.eventSource.Name, metav1.DeleteOptions{}) 87 if err != nil { 88 w.t.Fatal(err) 89 } 90 return w 91 } 92 93 func (w *When) CreateSensor() *When { 94 w.t.Helper() 95 if w.sensor == nil { 96 w.t.Fatal("No sensor to create") 97 } 98 w.t.Log("Creating sensor", w.sensor.Name) 99 ctx := context.Background() 100 s, err := w.sensorClient.Create(ctx, w.sensor, metav1.CreateOptions{}) 101 if err != nil { 102 w.t.Fatal(err) 103 } else { 104 w.sensor = s 105 } 106 return w 107 } 108 109 func (w *When) DeleteSensor() *When { 110 w.t.Helper() 111 if w.sensor == nil { 112 w.t.Fatal("No sensor to delete") 113 } 114 w.t.Log("Deleting sensor", w.sensor.Name) 115 ctx := context.Background() 116 err := w.sensorClient.Delete(ctx, w.sensor.Name, metav1.DeleteOptions{}) 117 if err != nil { 118 w.t.Fatal(err) 119 } 120 return w 121 } 122 123 func (w *When) Wait(timeout time.Duration) *When { 124 w.t.Helper() 125 w.t.Log("Waiting for", timeout.String()) 126 time.Sleep(timeout) 127 w.t.Log("Done waiting") 128 return w 129 } 130 131 func (w *When) And(block func()) *When { 132 w.t.Helper() 133 block() 134 if w.t.Failed() { 135 w.t.FailNow() 136 } 137 return w 138 } 139 140 func (w *When) Exec(name string, args []string, block func(t *testing.T, output string, err error)) *When { 141 w.t.Helper() 142 output, err := Exec(name, args...) 143 block(w.t, output, err) 144 if w.t.Failed() { 145 w.t.FailNow() 146 } 147 return w 148 } 149 150 func (w *When) WaitForEventBusReady() *When { 151 w.t.Helper() 152 ctx := context.Background() 153 if err := testutil.WaitForEventBusReady(ctx, w.eventBusClient, w.eventBus.Name, defaultTimeout); err != nil { 154 w.t.Fatal(err) 155 } 156 if w.eventBus.Spec.Kafka == nil { // not needed for kafka (exotic only) 157 if err := testutil.WaitForEventBusStatefulSetReady(ctx, w.kubeClient, Namespace, w.eventBus.Name, 2*time.Minute); err != nil { 158 w.t.Fatal(err) 159 } 160 } 161 return w 162 } 163 164 func (w *When) WaitForEventSourceReady() *When { 165 w.t.Helper() 166 ctx := context.Background() 167 if err := testutil.WaitForEventSourceReady(ctx, w.eventSourceClient, w.eventSource.Name, defaultTimeout); err != nil { 168 w.t.Fatal(err) 169 } 170 if err := testutil.WaitForEventSourceDeploymentReady(ctx, w.kubeClient, Namespace, w.eventSource.Name, defaultTimeout); err != nil { 171 w.t.Fatal(err) 172 } 173 w.t.Logf("Pod of EventSource %s is running", w.eventSource.Name) 174 return w 175 } 176 177 func (w *When) WaitForSensorReady() *When { 178 w.t.Helper() 179 ctx := context.Background() 180 if err := testutil.WaitForSensorReady(ctx, w.sensorClient, w.sensor.Name, defaultTimeout); err != nil { 181 w.t.Fatal(err) 182 } 183 if err := testutil.WaitForSensorDeploymentReady(ctx, w.kubeClient, Namespace, w.sensor.Name, defaultTimeout); err != nil { 184 w.t.Fatal(err) 185 } 186 w.t.Logf("Pod of Sensor %s is running", w.sensor.Name) 187 return w 188 } 189 190 func (w *When) Given() *Given { 191 return &Given{ 192 t: w.t, 193 eventBusClient: w.eventBusClient, 194 eventSourceClient: w.eventSourceClient, 195 sensorClient: w.sensorClient, 196 eventBus: w.eventBus, 197 eventSource: w.eventSource, 198 sensor: w.sensor, 199 restConfig: w.restConfig, 200 kubeClient: w.kubeClient, 201 } 202 } 203 204 func (w *When) Then() *Then { 205 return &Then{ 206 t: w.t, 207 eventBusClient: w.eventBusClient, 208 eventSourceClient: w.eventSourceClient, 209 sensorClient: w.sensorClient, 210 eventBus: w.eventBus, 211 eventSource: w.eventSource, 212 sensor: w.sensor, 213 restConfig: w.restConfig, 214 kubeClient: w.kubeClient, 215 } 216 }