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  }