github.com/argoproj/argo-events@v1.9.1/test/e2e/fixtures/e2e_suite.go (about) 1 package fixtures 2 3 import ( 4 "context" 5 "os" 6 "strings" 7 "time" 8 9 "github.com/stretchr/testify/suite" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 "k8s.io/apimachinery/pkg/runtime/schema" 12 "k8s.io/client-go/dynamic" 13 "k8s.io/client-go/kubernetes" 14 "k8s.io/client-go/rest" 15 16 "github.com/argoproj/argo-events/common" 17 "github.com/argoproj/argo-events/pkg/apis/eventbus" 18 "github.com/argoproj/argo-events/pkg/apis/eventsource" 19 "github.com/argoproj/argo-events/pkg/apis/sensor" 20 eventbusversiond "github.com/argoproj/argo-events/pkg/client/eventbus/clientset/versioned" 21 eventbuspkg "github.com/argoproj/argo-events/pkg/client/eventbus/clientset/versioned/typed/eventbus/v1alpha1" 22 eventsourceversiond "github.com/argoproj/argo-events/pkg/client/eventsource/clientset/versioned" 23 eventsourcepkg "github.com/argoproj/argo-events/pkg/client/eventsource/clientset/versioned/typed/eventsource/v1alpha1" 24 sensorversiond "github.com/argoproj/argo-events/pkg/client/sensor/clientset/versioned" 25 sensorpkg "github.com/argoproj/argo-events/pkg/client/sensor/clientset/versioned/typed/sensor/v1alpha1" 26 ) 27 28 const ( 29 Namespace = "argo-events" 30 Label = "argo-events-e2e" 31 LabelValue = "true" 32 EventBusName = "argo-events-e2e" 33 defaultTimeout = 60 * time.Second 34 ) 35 36 var ( 37 background = metav1.DeletePropagationBackground 38 39 E2EEventBusSTAN = `apiVersion: argoproj.io/v1alpha1 40 kind: EventBus 41 metadata: 42 name: default 43 spec: 44 nats: 45 native: 46 auth: token` 47 48 E2EEventBusJetstream = `apiVersion: argoproj.io/v1alpha1 49 kind: EventBus 50 metadata: 51 name: default 52 spec: 53 jetstream: 54 version: latest` 55 56 E2EEventBusKafka = `apiVersion: argoproj.io/v1alpha1 57 kind: EventBus 58 metadata: 59 name: default 60 spec: 61 kafka: 62 url: kafka:9092` 63 ) 64 65 type E2ESuite struct { 66 suite.Suite 67 restConfig *rest.Config 68 eventBusClient eventbuspkg.EventBusInterface 69 eventSourceClient eventsourcepkg.EventSourceInterface 70 sensorClient sensorpkg.SensorInterface 71 kubeClient kubernetes.Interface 72 } 73 74 func (s *E2ESuite) SetupSuite() { 75 var err error 76 77 kubeConfig, found := os.LookupEnv(common.EnvVarKubeConfig) 78 if !found { 79 home, _ := os.UserHomeDir() 80 kubeConfig = home + "/.kube/config" 81 if _, err := os.Stat(kubeConfig); err != nil && os.IsNotExist(err) { 82 kubeConfig = "" 83 } 84 } 85 s.restConfig, err = common.GetClientConfig(kubeConfig) 86 s.CheckError(err) 87 s.kubeClient, err = kubernetes.NewForConfig(s.restConfig) 88 s.CheckError(err) 89 s.eventBusClient = eventbusversiond.NewForConfigOrDie(s.restConfig).ArgoprojV1alpha1().EventBus(Namespace) 90 s.eventSourceClient = eventsourceversiond.NewForConfigOrDie(s.restConfig).ArgoprojV1alpha1().EventSources(Namespace) 91 s.sensorClient = sensorversiond.NewForConfigOrDie(s.restConfig).ArgoprojV1alpha1().Sensors(Namespace) 92 93 // Clean up resources if any 94 s.DeleteResources() 95 // Clean up test event bus if any 96 resources := []schema.GroupVersionResource{ 97 {Group: eventsource.Group, Version: "v1alpha1", Resource: eventbus.Plural}, 98 } 99 s.deleteResources(resources) 100 101 s.Given().EventBus(GetBusDriverSpec()). 102 When(). 103 CreateEventBus(). 104 WaitForEventBusReady() 105 s.T().Log("EventBus is ready") 106 107 time.Sleep(10 * time.Second) // give it a little extra time to be fully ready // todo: any issues with this? Otherwise, I need to increase the allowance in the backoff 108 } 109 110 func (s *E2ESuite) TearDownSuite() { 111 s.DeleteResources() 112 s.Given().EventBus(GetBusDriverSpec()). 113 When(). 114 DeleteEventBus(). 115 Wait(3 * time.Second). 116 Then(). 117 ExpectEventBusDeleted() 118 s.T().Log("EventBus is deleted") 119 } 120 121 func (s *E2ESuite) BeforeTest(string, string) { 122 s.DeleteResources() 123 } 124 125 func (s *E2ESuite) deleteResources(resources []schema.GroupVersionResource) { 126 hasTestLabel := metav1.ListOptions{LabelSelector: Label} 127 ctx := context.Background() 128 for _, r := range resources { 129 err := s.dynamicFor(r).DeleteCollection(ctx, metav1.DeleteOptions{PropagationPolicy: &background}, hasTestLabel) 130 s.CheckError(err) 131 } 132 133 for _, r := range resources { 134 for { 135 list, err := s.dynamicFor(r).List(ctx, hasTestLabel) 136 s.CheckError(err) 137 if len(list.Items) == 0 { 138 break 139 } 140 time.Sleep(100 * time.Millisecond) 141 } 142 } 143 } 144 145 func (s *E2ESuite) DeleteResources() { 146 resources := []schema.GroupVersionResource{ 147 {Group: eventsource.Group, Version: "v1alpha1", Resource: eventsource.Plural}, 148 {Group: sensor.Group, Version: "v1alpha1", Resource: sensor.Plural}, 149 {Group: "", Version: "v1", Resource: "pods"}, 150 } 151 s.deleteResources(resources) 152 } 153 154 func (s *E2ESuite) dynamicFor(r schema.GroupVersionResource) dynamic.ResourceInterface { 155 resourceInterface := dynamic.NewForConfigOrDie(s.restConfig).Resource(r) 156 return resourceInterface.Namespace(Namespace) 157 } 158 159 func (s *E2ESuite) CheckError(err error) { 160 s.T().Helper() 161 if err != nil { 162 s.T().Fatal(err) 163 } 164 } 165 166 func (s *E2ESuite) Given() *Given { 167 return &Given{ 168 t: s.T(), 169 eventBusClient: s.eventBusClient, 170 eventSourceClient: s.eventSourceClient, 171 sensorClient: s.sensorClient, 172 restConfig: s.restConfig, 173 kubeClient: s.kubeClient, 174 } 175 } 176 177 func GetBusDriverSpec() string { 178 x := strings.ToUpper(os.Getenv("EventBusDriver")) 179 if x == "JETSTREAM" { 180 return E2EEventBusJetstream 181 } else if x == "KAFKA" { 182 return E2EEventBusKafka 183 } 184 return E2EEventBusSTAN 185 }