Simplify the setup of controller tests (#2352)
This commit is contained in:
		
							parent
							
								
									2984de912c
								
							
						
					
					
						commit
						40c905f25d
					
				|  | @ -28,46 +28,23 @@ const ( | ||||||
| 
 | 
 | ||||||
| var _ = Describe("Test AutoScalingListener controller", func() { | var _ = Describe("Test AutoScalingListener controller", func() { | ||||||
| 	var ctx context.Context | 	var ctx context.Context | ||||||
| 	var cancel context.CancelFunc | 	var mgr ctrl.Manager | ||||||
| 	autoscalingNS := new(corev1.Namespace) | 	var autoscalingNS *corev1.Namespace | ||||||
| 	autoscalingRunnerSet := new(actionsv1alpha1.AutoscalingRunnerSet) | 	var autoscalingRunnerSet *actionsv1alpha1.AutoscalingRunnerSet | ||||||
| 	configSecret := new(corev1.Secret) | 	var configSecret *corev1.Secret | ||||||
| 	autoscalingListener := new(actionsv1alpha1.AutoscalingListener) | 	var autoscalingListener *actionsv1alpha1.AutoscalingListener | ||||||
| 
 | 
 | ||||||
| 	BeforeEach(func() { | 	BeforeEach(func() { | ||||||
| 		ctx, cancel = context.WithCancel(context.TODO()) | 		ctx = context.Background() | ||||||
| 		autoscalingNS = &corev1.Namespace{ | 		autoscalingNS, mgr = createNamespace(GinkgoT(), k8sClient) | ||||||
| 			ObjectMeta: metav1.ObjectMeta{Name: "testns-autoscaling-listener" + RandStringRunes(5)}, | 		configSecret = createDefaultSecret(GinkgoT(), k8sClient, autoscalingNS.Name) | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		err := k8sClient.Create(ctx, autoscalingNS) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create test namespace for AutoScalingRunnerSet") |  | ||||||
| 
 |  | ||||||
| 		configSecret = &corev1.Secret{ |  | ||||||
| 			ObjectMeta: metav1.ObjectMeta{ |  | ||||||
| 				Name:      "github-config-secret", |  | ||||||
| 				Namespace: autoscalingNS.Name, |  | ||||||
| 			}, |  | ||||||
| 			Data: map[string][]byte{ |  | ||||||
| 				"github_token": []byte(autoscalingListenerTestGitHubToken), |  | ||||||
| 			}, |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		err = k8sClient.Create(ctx, configSecret) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create config secret") |  | ||||||
| 
 |  | ||||||
| 		mgr, err := ctrl.NewManager(cfg, ctrl.Options{ |  | ||||||
| 			Namespace:          autoscalingNS.Name, |  | ||||||
| 			MetricsBindAddress: "0", |  | ||||||
| 		}) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create manager") |  | ||||||
| 
 | 
 | ||||||
| 		controller := &AutoscalingListenerReconciler{ | 		controller := &AutoscalingListenerReconciler{ | ||||||
| 			Client: mgr.GetClient(), | 			Client: mgr.GetClient(), | ||||||
| 			Scheme: mgr.GetScheme(), | 			Scheme: mgr.GetScheme(), | ||||||
| 			Log:    logf.Log, | 			Log:    logf.Log, | ||||||
| 		} | 		} | ||||||
| 		err = controller.SetupWithManager(mgr) | 		err := controller.SetupWithManager(mgr) | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | 		Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | ||||||
| 
 | 
 | ||||||
| 		min := 1 | 		min := 1 | ||||||
|  | @ -119,19 +96,7 @@ var _ = Describe("Test AutoScalingListener controller", func() { | ||||||
| 		err = k8sClient.Create(ctx, autoscalingListener) | 		err = k8sClient.Create(ctx, autoscalingListener) | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create AutoScalingListener") | 		Expect(err).NotTo(HaveOccurred(), "failed to create AutoScalingListener") | ||||||
| 
 | 
 | ||||||
| 		go func() { | 		startManagers(GinkgoT(), mgr) | ||||||
| 			defer GinkgoRecover() |  | ||||||
| 
 |  | ||||||
| 			err := mgr.Start(ctx) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to start manager") |  | ||||||
| 		}() |  | ||||||
| 	}) |  | ||||||
| 
 |  | ||||||
| 	AfterEach(func() { |  | ||||||
| 		defer cancel() |  | ||||||
| 
 |  | ||||||
| 		err := k8sClient.Delete(ctx, autoscalingNS) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace for AutoScalingRunnerSet") |  | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	Context("When creating a new AutoScalingListener", func() { | 	Context("When creating a new AutoScalingListener", func() { | ||||||
|  | @ -396,11 +361,11 @@ var _ = Describe("Test AutoScalingListener controller", func() { | ||||||
| 
 | 
 | ||||||
| var _ = Describe("Test AutoScalingListener controller with proxy", func() { | var _ = Describe("Test AutoScalingListener controller with proxy", func() { | ||||||
| 	var ctx context.Context | 	var ctx context.Context | ||||||
| 	var cancel context.CancelFunc | 	var mgr ctrl.Manager | ||||||
| 	autoscalingNS := new(corev1.Namespace) | 	var autoscalingNS *corev1.Namespace | ||||||
| 	autoscalingRunnerSet := new(actionsv1alpha1.AutoscalingRunnerSet) | 	var autoscalingRunnerSet *actionsv1alpha1.AutoscalingRunnerSet | ||||||
| 	configSecret := new(corev1.Secret) | 	var configSecret *corev1.Secret | ||||||
| 	autoscalingListener := new(actionsv1alpha1.AutoscalingListener) | 	var autoscalingListener *actionsv1alpha1.AutoscalingListener | ||||||
| 
 | 
 | ||||||
| 	createRunnerSetAndListener := func(proxy *actionsv1alpha1.ProxyConfig) { | 	createRunnerSetAndListener := func(proxy *actionsv1alpha1.ProxyConfig) { | ||||||
| 		min := 1 | 		min := 1 | ||||||
|  | @ -456,54 +421,19 @@ var _ = Describe("Test AutoScalingListener controller with proxy", func() { | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	BeforeEach(func() { | 	BeforeEach(func() { | ||||||
| 		ctx, cancel = context.WithCancel(context.TODO()) | 		ctx = context.Background() | ||||||
| 		autoscalingNS = &corev1.Namespace{ | 		autoscalingNS, mgr = createNamespace(GinkgoT(), k8sClient) | ||||||
| 			ObjectMeta: metav1.ObjectMeta{Name: "testns-autoscaling-listener" + RandStringRunes(5)}, | 		configSecret = createDefaultSecret(GinkgoT(), k8sClient, autoscalingNS.Name) | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		err := k8sClient.Create(ctx, autoscalingNS) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create test namespace for AutoScalingRunnerSet") |  | ||||||
| 
 |  | ||||||
| 		configSecret = &corev1.Secret{ |  | ||||||
| 			ObjectMeta: metav1.ObjectMeta{ |  | ||||||
| 				Name:      "github-config-secret", |  | ||||||
| 				Namespace: autoscalingNS.Name, |  | ||||||
| 			}, |  | ||||||
| 			Data: map[string][]byte{ |  | ||||||
| 				"github_token": []byte(autoscalingListenerTestGitHubToken), |  | ||||||
| 			}, |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		err = k8sClient.Create(ctx, configSecret) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create config secret") |  | ||||||
| 
 |  | ||||||
| 		mgr, err := ctrl.NewManager(cfg, ctrl.Options{ |  | ||||||
| 			Namespace:          autoscalingNS.Name, |  | ||||||
| 			MetricsBindAddress: "0", |  | ||||||
| 		}) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create manager") |  | ||||||
| 
 | 
 | ||||||
| 		controller := &AutoscalingListenerReconciler{ | 		controller := &AutoscalingListenerReconciler{ | ||||||
| 			Client: mgr.GetClient(), | 			Client: mgr.GetClient(), | ||||||
| 			Scheme: mgr.GetScheme(), | 			Scheme: mgr.GetScheme(), | ||||||
| 			Log:    logf.Log, | 			Log:    logf.Log, | ||||||
| 		} | 		} | ||||||
| 		err = controller.SetupWithManager(mgr) | 		err := controller.SetupWithManager(mgr) | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | 		Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | ||||||
| 
 | 
 | ||||||
| 		go func() { | 		startManagers(GinkgoT(), mgr) | ||||||
| 			defer GinkgoRecover() |  | ||||||
| 
 |  | ||||||
| 			err := mgr.Start(ctx) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to start manager") |  | ||||||
| 		}() |  | ||||||
| 	}) |  | ||||||
| 
 |  | ||||||
| 	AfterEach(func() { |  | ||||||
| 		defer cancel() |  | ||||||
| 
 |  | ||||||
| 		err := k8sClient.Delete(ctx, autoscalingNS) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace for AutoScalingRunnerSet") |  | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	It("should create a secret in the listener namespace containing proxy details, use it to populate env vars on the pod and should delete it as part of cleanup", func() { | 	It("should create a secret in the listener namespace containing proxy details, use it to populate env vars on the pod and should delete it as part of cleanup", func() { | ||||||
|  |  | ||||||
|  | @ -35,38 +35,15 @@ const ( | ||||||
| 
 | 
 | ||||||
| var _ = Describe("Test AutoScalingRunnerSet controller", func() { | var _ = Describe("Test AutoScalingRunnerSet controller", func() { | ||||||
| 	var ctx context.Context | 	var ctx context.Context | ||||||
| 	var cancel context.CancelFunc | 	var mgr ctrl.Manager | ||||||
| 	autoscalingNS := new(corev1.Namespace) | 	var autoscalingNS *corev1.Namespace | ||||||
| 	autoscalingRunnerSet := new(v1alpha1.AutoscalingRunnerSet) | 	var autoscalingRunnerSet *v1alpha1.AutoscalingRunnerSet | ||||||
| 	configSecret := new(corev1.Secret) | 	var configSecret *corev1.Secret | ||||||
| 
 | 
 | ||||||
| 	BeforeEach(func() { | 	BeforeEach(func() { | ||||||
| 		ctx, cancel = context.WithCancel(context.TODO()) | 		ctx = context.Background() | ||||||
| 		autoscalingNS = &corev1.Namespace{ | 		autoscalingNS, mgr = createNamespace(GinkgoT(), k8sClient) | ||||||
| 			ObjectMeta: metav1.ObjectMeta{Name: "testns-autoscaling" + RandStringRunes(5)}, | 		configSecret = createDefaultSecret(GinkgoT(), k8sClient, autoscalingNS.Name) | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		err := k8sClient.Create(ctx, autoscalingNS) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create test namespace for AutoScalingRunnerSet") |  | ||||||
| 
 |  | ||||||
| 		configSecret = &corev1.Secret{ |  | ||||||
| 			ObjectMeta: metav1.ObjectMeta{ |  | ||||||
| 				Name:      "github-config-secret", |  | ||||||
| 				Namespace: autoscalingNS.Name, |  | ||||||
| 			}, |  | ||||||
| 			Data: map[string][]byte{ |  | ||||||
| 				"github_token": []byte(autoscalingRunnerSetTestGitHubToken), |  | ||||||
| 			}, |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		err = k8sClient.Create(ctx, configSecret) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create config secret") |  | ||||||
| 
 |  | ||||||
| 		mgr, err := ctrl.NewManager(cfg, ctrl.Options{ |  | ||||||
| 			Namespace:          autoscalingNS.Name, |  | ||||||
| 			MetricsBindAddress: "0", |  | ||||||
| 		}) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create manager") |  | ||||||
| 
 | 
 | ||||||
| 		controller := &AutoscalingRunnerSetReconciler{ | 		controller := &AutoscalingRunnerSetReconciler{ | ||||||
| 			Client:                             mgr.GetClient(), | 			Client:                             mgr.GetClient(), | ||||||
|  | @ -76,7 +53,7 @@ var _ = Describe("Test AutoScalingRunnerSet controller", func() { | ||||||
| 			DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc", | 			DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc", | ||||||
| 			ActionsClient:                      fake.NewMultiClient(), | 			ActionsClient:                      fake.NewMultiClient(), | ||||||
| 		} | 		} | ||||||
| 		err = controller.SetupWithManager(mgr) | 		err := controller.SetupWithManager(mgr) | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | 		Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | ||||||
| 
 | 
 | ||||||
| 		min := 1 | 		min := 1 | ||||||
|  | @ -108,19 +85,7 @@ var _ = Describe("Test AutoScalingRunnerSet controller", func() { | ||||||
| 		err = k8sClient.Create(ctx, autoscalingRunnerSet) | 		err = k8sClient.Create(ctx, autoscalingRunnerSet) | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create AutoScalingRunnerSet") | 		Expect(err).NotTo(HaveOccurred(), "failed to create AutoScalingRunnerSet") | ||||||
| 
 | 
 | ||||||
| 		go func() { | 		startManagers(GinkgoT(), mgr) | ||||||
| 			defer GinkgoRecover() |  | ||||||
| 
 |  | ||||||
| 			err := mgr.Start(ctx) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to start manager") |  | ||||||
| 		}() |  | ||||||
| 	}) |  | ||||||
| 
 |  | ||||||
| 	AfterEach(func() { |  | ||||||
| 		defer cancel() |  | ||||||
| 
 |  | ||||||
| 		err := k8sClient.Delete(ctx, autoscalingNS) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace for AutoScalingRunnerSet") |  | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	Context("When creating a new AutoScalingRunnerSet", func() { | 	Context("When creating a new AutoScalingRunnerSet", func() { | ||||||
|  | @ -438,36 +403,12 @@ var _ = Describe("Test AutoScalingRunnerSet controller", func() { | ||||||
| var _ = Describe("Test AutoscalingController creation failures", func() { | var _ = Describe("Test AutoscalingController creation failures", func() { | ||||||
| 	Context("When autoscaling runner set creation fails on the client", func() { | 	Context("When autoscaling runner set creation fails on the client", func() { | ||||||
| 		var ctx context.Context | 		var ctx context.Context | ||||||
| 		var cancel context.CancelFunc | 		var mgr ctrl.Manager | ||||||
| 		autoscalingNS := new(corev1.Namespace) | 		var autoscalingNS *corev1.Namespace | ||||||
| 		configSecret := new(corev1.Secret) |  | ||||||
| 
 | 
 | ||||||
| 		BeforeEach(func() { | 		BeforeEach(func() { | ||||||
| 			ctx, cancel = context.WithCancel(context.TODO()) | 			ctx = context.Background() | ||||||
| 			autoscalingNS = &corev1.Namespace{ | 			autoscalingNS, mgr = createNamespace(GinkgoT(), k8sClient) | ||||||
| 				ObjectMeta: metav1.ObjectMeta{Name: "testns-autoscaling" + RandStringRunes(5)}, |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			err := k8sClient.Create(ctx, autoscalingNS) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to create test namespace for AutoScalingRunnerSet") |  | ||||||
| 
 |  | ||||||
| 			configSecret = &corev1.Secret{ |  | ||||||
| 				ObjectMeta: metav1.ObjectMeta{ |  | ||||||
| 					Name:      "github-config-secret", |  | ||||||
| 					Namespace: autoscalingNS.Name, |  | ||||||
| 				}, |  | ||||||
| 				Data: map[string][]byte{ |  | ||||||
| 					"github_token": []byte(autoscalingRunnerSetTestGitHubToken), |  | ||||||
| 				}, |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			err = k8sClient.Create(ctx, configSecret) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to create config secret") |  | ||||||
| 
 |  | ||||||
| 			mgr, err := ctrl.NewManager(cfg, ctrl.Options{ |  | ||||||
| 				MetricsBindAddress: "0", |  | ||||||
| 			}) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to create manager") |  | ||||||
| 
 | 
 | ||||||
| 			controller := &AutoscalingRunnerSetReconciler{ | 			controller := &AutoscalingRunnerSetReconciler{ | ||||||
| 				Client:                             mgr.GetClient(), | 				Client:                             mgr.GetClient(), | ||||||
|  | @ -477,22 +418,10 @@ var _ = Describe("Test AutoscalingController creation failures", func() { | ||||||
| 				DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc", | 				DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc", | ||||||
| 				ActionsClient:                      fake.NewMultiClient(), | 				ActionsClient:                      fake.NewMultiClient(), | ||||||
| 			} | 			} | ||||||
| 			err = controller.SetupWithManager(mgr) | 			err := controller.SetupWithManager(mgr) | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | 			Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | ||||||
| 
 | 
 | ||||||
| 			go func() { | 			startManagers(GinkgoT(), mgr) | ||||||
| 				defer GinkgoRecover() |  | ||||||
| 
 |  | ||||||
| 				err := mgr.Start(ctx) |  | ||||||
| 				Expect(err).NotTo(HaveOccurred(), "failed to start manager") |  | ||||||
| 			}() |  | ||||||
| 		}) |  | ||||||
| 
 |  | ||||||
| 		AfterEach(func() { |  | ||||||
| 			defer cancel() |  | ||||||
| 
 |  | ||||||
| 			err := k8sClient.Delete(ctx, autoscalingNS) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace for AutoScalingRunnerSet") |  | ||||||
| 		}) | 		}) | ||||||
| 
 | 
 | ||||||
| 		It("It should be able to clean up if annotation related to scale set id does not exist", func() { | 		It("It should be able to clean up if annotation related to scale set id does not exist", func() { | ||||||
|  | @ -583,57 +512,17 @@ var _ = Describe("Test AutoscalingController creation failures", func() { | ||||||
| var _ = Describe("Test Client optional configuration", func() { | var _ = Describe("Test Client optional configuration", func() { | ||||||
| 	Context("When specifying a proxy", func() { | 	Context("When specifying a proxy", func() { | ||||||
| 		var ctx context.Context | 		var ctx context.Context | ||||||
| 		var cancel context.CancelFunc |  | ||||||
| 
 |  | ||||||
| 		autoscalingNS := new(corev1.Namespace) |  | ||||||
| 		configSecret := new(corev1.Secret) |  | ||||||
| 		var mgr ctrl.Manager | 		var mgr ctrl.Manager | ||||||
|  | 		var autoscalingNS *corev1.Namespace | ||||||
|  | 		var configSecret *corev1.Secret | ||||||
|  | 		var controller *AutoscalingRunnerSetReconciler | ||||||
| 
 | 
 | ||||||
| 		BeforeEach(func() { | 		BeforeEach(func() { | ||||||
| 			ctx, cancel = context.WithCancel(context.TODO()) | 			ctx = context.Background() | ||||||
| 			autoscalingNS = &corev1.Namespace{ | 			autoscalingNS, mgr = createNamespace(GinkgoT(), k8sClient) | ||||||
| 				ObjectMeta: metav1.ObjectMeta{Name: "testns-autoscaling" + RandStringRunes(5)}, | 			configSecret = createDefaultSecret(GinkgoT(), k8sClient, autoscalingNS.Name) | ||||||
| 			} |  | ||||||
| 
 | 
 | ||||||
| 			err := k8sClient.Create(ctx, autoscalingNS) | 			controller = &AutoscalingRunnerSetReconciler{ | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to create test namespace for AutoScalingRunnerSet") |  | ||||||
| 
 |  | ||||||
| 			configSecret = &corev1.Secret{ |  | ||||||
| 				ObjectMeta: metav1.ObjectMeta{ |  | ||||||
| 					Name:      "github-config-secret", |  | ||||||
| 					Namespace: autoscalingNS.Name, |  | ||||||
| 				}, |  | ||||||
| 				Data: map[string][]byte{ |  | ||||||
| 					"github_token": []byte(autoscalingRunnerSetTestGitHubToken), |  | ||||||
| 				}, |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			err = k8sClient.Create(ctx, configSecret) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to create config secret") |  | ||||||
| 
 |  | ||||||
| 			mgr, err = ctrl.NewManager(cfg, ctrl.Options{ |  | ||||||
| 				Namespace:          autoscalingNS.Name, |  | ||||||
| 				MetricsBindAddress: "0", |  | ||||||
| 			}) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to create manager") |  | ||||||
| 
 |  | ||||||
| 			go func() { |  | ||||||
| 				defer GinkgoRecover() |  | ||||||
| 
 |  | ||||||
| 				err := mgr.Start(ctx) |  | ||||||
| 				Expect(err).NotTo(HaveOccurred(), "failed to start manager") |  | ||||||
| 			}() |  | ||||||
| 		}) |  | ||||||
| 
 |  | ||||||
| 		AfterEach(func() { |  | ||||||
| 			defer cancel() |  | ||||||
| 
 |  | ||||||
| 			err := k8sClient.Delete(ctx, autoscalingNS) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace for AutoScalingRunnerSet") |  | ||||||
| 		}) |  | ||||||
| 
 |  | ||||||
| 		It("should be able to make requests to a server using a proxy", func() { |  | ||||||
| 			controller := &AutoscalingRunnerSetReconciler{ |  | ||||||
| 				Client:                             mgr.GetClient(), | 				Client:                             mgr.GetClient(), | ||||||
| 				Scheme:                             mgr.GetScheme(), | 				Scheme:                             mgr.GetScheme(), | ||||||
| 				Log:                                logf.Log, | 				Log:                                logf.Log, | ||||||
|  | @ -644,6 +533,10 @@ var _ = Describe("Test Client optional configuration", func() { | ||||||
| 			err := controller.SetupWithManager(mgr) | 			err := controller.SetupWithManager(mgr) | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | 			Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | ||||||
| 
 | 
 | ||||||
|  | 			startManagers(GinkgoT(), mgr) | ||||||
|  | 		}) | ||||||
|  | 
 | ||||||
|  | 		It("should be able to make requests to a server using a proxy", func() { | ||||||
| 			serverSuccessfullyCalled := false | 			serverSuccessfullyCalled := false | ||||||
| 			proxy := testserver.New(GinkgoT(), http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | 			proxy := testserver.New(GinkgoT(), http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | ||||||
| 				serverSuccessfullyCalled = true | 				serverSuccessfullyCalled = true | ||||||
|  | @ -681,7 +574,7 @@ var _ = Describe("Test Client optional configuration", func() { | ||||||
| 				}, | 				}, | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			err = k8sClient.Create(ctx, autoscalingRunnerSet) | 			err := k8sClient.Create(ctx, autoscalingRunnerSet) | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to create AutoScalingRunnerSet") | 			Expect(err).NotTo(HaveOccurred(), "failed to create AutoScalingRunnerSet") | ||||||
| 
 | 
 | ||||||
| 			// wait for server to be called
 | 			// wait for server to be called
 | ||||||
|  | @ -695,17 +588,6 @@ var _ = Describe("Test Client optional configuration", func() { | ||||||
| 		}) | 		}) | ||||||
| 
 | 
 | ||||||
| 		It("should be able to make requests to a server using a proxy with user info", func() { | 		It("should be able to make requests to a server using a proxy with user info", func() { | ||||||
| 			controller := &AutoscalingRunnerSetReconciler{ |  | ||||||
| 				Client:                             mgr.GetClient(), |  | ||||||
| 				Scheme:                             mgr.GetScheme(), |  | ||||||
| 				Log:                                logf.Log, |  | ||||||
| 				ControllerNamespace:                autoscalingNS.Name, |  | ||||||
| 				DefaultRunnerScaleSetListenerImage: "ghcr.io/actions/arc", |  | ||||||
| 				ActionsClient:                      actions.NewMultiClient("test", logr.Discard()), |  | ||||||
| 			} |  | ||||||
| 			err := controller.SetupWithManager(mgr) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to setup controller") |  | ||||||
| 
 |  | ||||||
| 			serverSuccessfullyCalled := false | 			serverSuccessfullyCalled := false | ||||||
| 			proxy := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | 			proxy := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { | ||||||
| 				header := r.Header.Get("Proxy-Authorization") | 				header := r.Header.Get("Proxy-Authorization") | ||||||
|  | @ -734,7 +616,7 @@ var _ = Describe("Test Client optional configuration", func() { | ||||||
| 				}, | 				}, | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			err = k8sClient.Create(ctx, secretCredentials) | 			err := k8sClient.Create(ctx, secretCredentials) | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to create secret credentials") | 			Expect(err).NotTo(HaveOccurred(), "failed to create secret credentials") | ||||||
| 
 | 
 | ||||||
| 			min := 1 | 			min := 1 | ||||||
|  |  | ||||||
|  | @ -22,11 +22,9 @@ import ( | ||||||
| 	ctrl "sigs.k8s.io/controller-runtime" | 	ctrl "sigs.k8s.io/controller-runtime" | ||||||
| 	"sigs.k8s.io/controller-runtime/pkg/client" | 	"sigs.k8s.io/controller-runtime/pkg/client" | ||||||
| 	logf "sigs.k8s.io/controller-runtime/pkg/log" | 	logf "sigs.k8s.io/controller-runtime/pkg/log" | ||||||
| 	"sigs.k8s.io/controller-runtime/pkg/manager" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
| 	gh_token    = "gh_token" |  | ||||||
| 	timeout     = time.Second * 10 | 	timeout     = time.Second * 10 | ||||||
| 	interval    = time.Millisecond * 250 | 	interval    = time.Millisecond * 250 | ||||||
| 	runnerImage = "ghcr.io/actions/actions-runner:latest" | 	runnerImage = "ghcr.io/actions/actions-runner:latest" | ||||||
|  | @ -87,42 +85,16 @@ func newExampleRunner(name, namespace, configSecretName string) *v1alpha1.Epheme | ||||||
| var _ = Describe("EphemeralRunner", func() { | var _ = Describe("EphemeralRunner", func() { | ||||||
| 	Describe("Resource manipulation", func() { | 	Describe("Resource manipulation", func() { | ||||||
| 		var ctx context.Context | 		var ctx context.Context | ||||||
| 		var cancel context.CancelFunc | 		var mgr ctrl.Manager | ||||||
| 
 | 		var autoscalingNS *corev1.Namespace | ||||||
| 		autoscalingNS := new(corev1.Namespace) | 		var configSecret *corev1.Secret | ||||||
| 		configSecret := new(corev1.Secret) | 		var controller *EphemeralRunnerReconciler | ||||||
| 
 | 		var ephemeralRunner *v1alpha1.EphemeralRunner | ||||||
| 		controller := new(EphemeralRunnerReconciler) |  | ||||||
| 		ephemeralRunner := new(v1alpha1.EphemeralRunner) |  | ||||||
| 
 | 
 | ||||||
| 		BeforeEach(func() { | 		BeforeEach(func() { | ||||||
| 			ctx, cancel = context.WithCancel(context.Background()) | 			ctx = context.Background() | ||||||
| 			autoscalingNS = &corev1.Namespace{ | 			autoscalingNS, mgr = createNamespace(GinkgoT(), k8sClient) | ||||||
| 				ObjectMeta: metav1.ObjectMeta{ | 			configSecret = createDefaultSecret(GinkgoT(), k8sClient, autoscalingNS.Name) | ||||||
| 					Name: "testns-autoscaling-runner" + RandStringRunes(5), |  | ||||||
| 				}, |  | ||||||
| 			} |  | ||||||
| 			err := k8sClient.Create(ctx, autoscalingNS) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to create test namespace for EphemeralRunner") |  | ||||||
| 
 |  | ||||||
| 			configSecret = &corev1.Secret{ |  | ||||||
| 				ObjectMeta: metav1.ObjectMeta{ |  | ||||||
| 					Name:      "github-config-secret", |  | ||||||
| 					Namespace: autoscalingNS.Name, |  | ||||||
| 				}, |  | ||||||
| 				Data: map[string][]byte{ |  | ||||||
| 					"github_token": []byte(gh_token), |  | ||||||
| 				}, |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			err = k8sClient.Create(ctx, configSecret) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to create config secret") |  | ||||||
| 
 |  | ||||||
| 			mgr, err := ctrl.NewManager(cfg, ctrl.Options{ |  | ||||||
| 				Namespace:          autoscalingNS.Name, |  | ||||||
| 				MetricsBindAddress: "0", |  | ||||||
| 			}) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to create manager") |  | ||||||
| 
 | 
 | ||||||
| 			controller = &EphemeralRunnerReconciler{ | 			controller = &EphemeralRunnerReconciler{ | ||||||
| 				Client:        mgr.GetClient(), | 				Client:        mgr.GetClient(), | ||||||
|  | @ -131,26 +103,14 @@ var _ = Describe("EphemeralRunner", func() { | ||||||
| 				ActionsClient: fake.NewMultiClient(), | 				ActionsClient: fake.NewMultiClient(), | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 			err = controller.SetupWithManager(mgr) | 			err := controller.SetupWithManager(mgr) | ||||||
| 			Expect(err).To(BeNil(), "failed to setup controller") | 			Expect(err).To(BeNil(), "failed to setup controller") | ||||||
| 
 | 
 | ||||||
| 			ephemeralRunner = newExampleRunner("test-runner", autoscalingNS.Name, configSecret.Name) | 			ephemeralRunner = newExampleRunner("test-runner", autoscalingNS.Name, configSecret.Name) | ||||||
| 			err = k8sClient.Create(ctx, ephemeralRunner) | 			err = k8sClient.Create(ctx, ephemeralRunner) | ||||||
| 			Expect(err).To(BeNil(), "failed to create ephemeral runner") | 			Expect(err).To(BeNil(), "failed to create ephemeral runner") | ||||||
| 
 | 
 | ||||||
| 			go func() { | 			startManagers(GinkgoT(), mgr) | ||||||
| 				defer GinkgoRecover() |  | ||||||
| 
 |  | ||||||
| 				err := mgr.Start(ctx) |  | ||||||
| 				Expect(err).To(BeNil(), "failed to start manager") |  | ||||||
| 			}() |  | ||||||
| 		}) |  | ||||||
| 
 |  | ||||||
| 		AfterEach(func() { |  | ||||||
| 			defer cancel() |  | ||||||
| 
 |  | ||||||
| 			err := k8sClient.Delete(ctx, autoscalingNS) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to delete test namespace for EphemeralRunner") |  | ||||||
| 		}) | 		}) | ||||||
| 
 | 
 | ||||||
| 		It("It should create/add all required resources for EphemeralRunner (finalizer, jit secret)", func() { | 		It("It should create/add all required resources for EphemeralRunner (finalizer, jit secret)", func() { | ||||||
|  | @ -668,52 +628,17 @@ var _ = Describe("EphemeralRunner", func() { | ||||||
| 
 | 
 | ||||||
| 	Describe("Checking the API", func() { | 	Describe("Checking the API", func() { | ||||||
| 		var ctx context.Context | 		var ctx context.Context | ||||||
| 		var cancel context.CancelFunc | 		var autoscalingNS *corev1.Namespace | ||||||
| 
 | 		var configSecret *corev1.Secret | ||||||
| 		autoscalingNS := new(corev1.Namespace) | 		var controller *EphemeralRunnerReconciler | ||||||
| 		configSecret := new(corev1.Secret) | 		var mgr ctrl.Manager | ||||||
| 
 |  | ||||||
| 		var mgr manager.Manager |  | ||||||
| 
 | 
 | ||||||
| 		BeforeEach(func() { | 		BeforeEach(func() { | ||||||
| 			ctx, cancel = context.WithCancel(context.Background()) | 			ctx = context.Background() | ||||||
| 			autoscalingNS = &corev1.Namespace{ | 			autoscalingNS, mgr = createNamespace(GinkgoT(), k8sClient) | ||||||
| 				ObjectMeta: metav1.ObjectMeta{ | 			configSecret = createDefaultSecret(GinkgoT(), k8sClient, autoscalingNS.Name) | ||||||
| 					Name: "testns-autoscaling-runner" + RandStringRunes(5), |  | ||||||
| 				}, |  | ||||||
| 			} |  | ||||||
| 			err := k8sClient.Create(ctx, autoscalingNS) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to create test namespace for EphemeralRunner") |  | ||||||
| 
 | 
 | ||||||
| 			configSecret = &corev1.Secret{ | 			controller = &EphemeralRunnerReconciler{ | ||||||
| 				ObjectMeta: metav1.ObjectMeta{ |  | ||||||
| 					Name:      "github-config-secret", |  | ||||||
| 					Namespace: autoscalingNS.Name, |  | ||||||
| 				}, |  | ||||||
| 				Data: map[string][]byte{ |  | ||||||
| 					"github_token": []byte(gh_token), |  | ||||||
| 				}, |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			err = k8sClient.Create(ctx, configSecret) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to create config secret") |  | ||||||
| 
 |  | ||||||
| 			mgr, err = ctrl.NewManager(cfg, ctrl.Options{ |  | ||||||
| 				Namespace:          autoscalingNS.Name, |  | ||||||
| 				MetricsBindAddress: "0", |  | ||||||
| 			}) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to create manager") |  | ||||||
| 		}) |  | ||||||
| 
 |  | ||||||
| 		AfterEach(func() { |  | ||||||
| 			defer cancel() |  | ||||||
| 
 |  | ||||||
| 			err := k8sClient.Delete(ctx, autoscalingNS) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to delete test namespace for EphemeralRunner") |  | ||||||
| 		}) |  | ||||||
| 
 |  | ||||||
| 		It("It should set the Phase to Succeeded", func() { |  | ||||||
| 			controller := &EphemeralRunnerReconciler{ |  | ||||||
| 				Client: mgr.GetClient(), | 				Client: mgr.GetClient(), | ||||||
| 				Scheme: mgr.GetScheme(), | 				Scheme: mgr.GetScheme(), | ||||||
| 				Log:    logf.Log, | 				Log:    logf.Log, | ||||||
|  | @ -732,20 +657,16 @@ var _ = Describe("EphemeralRunner", func() { | ||||||
| 					), | 					), | ||||||
| 				), | 				), | ||||||
| 			} | 			} | ||||||
| 
 |  | ||||||
| 			err := controller.SetupWithManager(mgr) | 			err := controller.SetupWithManager(mgr) | ||||||
| 			Expect(err).To(BeNil(), "failed to setup controller") | 			Expect(err).To(BeNil(), "failed to setup controller") | ||||||
| 
 | 
 | ||||||
| 			go func() { | 			startManagers(GinkgoT(), mgr) | ||||||
| 				defer GinkgoRecover() | 		}) | ||||||
| 
 |  | ||||||
| 				err := mgr.Start(ctx) |  | ||||||
| 				Expect(err).To(BeNil(), "failed to start manager") |  | ||||||
| 			}() |  | ||||||
| 
 | 
 | ||||||
|  | 		It("It should set the Phase to Succeeded", func() { | ||||||
| 			ephemeralRunner := newExampleRunner("test-runner", autoscalingNS.Name, configSecret.Name) | 			ephemeralRunner := newExampleRunner("test-runner", autoscalingNS.Name, configSecret.Name) | ||||||
| 
 | 
 | ||||||
| 			err = k8sClient.Create(ctx, ephemeralRunner) | 			err := k8sClient.Create(ctx, ephemeralRunner) | ||||||
| 			Expect(err).To(BeNil()) | 			Expect(err).To(BeNil()) | ||||||
| 
 | 
 | ||||||
| 			pod := new(corev1.Pod) | 			pod := new(corev1.Pod) | ||||||
|  | @ -780,40 +701,15 @@ var _ = Describe("EphemeralRunner", func() { | ||||||
| 
 | 
 | ||||||
| 	Describe("Pod proxy config", func() { | 	Describe("Pod proxy config", func() { | ||||||
| 		var ctx context.Context | 		var ctx context.Context | ||||||
| 		var cancel context.CancelFunc | 		var mgr ctrl.Manager | ||||||
| 
 | 		var autoScalingNS *corev1.Namespace | ||||||
| 		autoScalingNS := new(corev1.Namespace) | 		var configSecret *corev1.Secret | ||||||
| 		configSecret := new(corev1.Secret) | 		var controller *EphemeralRunnerReconciler | ||||||
| 		controller := new(EphemeralRunnerReconciler) |  | ||||||
| 
 | 
 | ||||||
| 		BeforeEach(func() { | 		BeforeEach(func() { | ||||||
| 			ctx, cancel = context.WithCancel(context.Background()) | 			ctx = context.Background() | ||||||
| 			autoScalingNS = &corev1.Namespace{ | 			autoScalingNS, mgr = createNamespace(GinkgoT(), k8sClient) | ||||||
| 				ObjectMeta: metav1.ObjectMeta{ | 			configSecret = createDefaultSecret(GinkgoT(), k8sClient, autoScalingNS.Name) | ||||||
| 					Name: "testns-autoscaling-runner" + RandStringRunes(5), |  | ||||||
| 				}, |  | ||||||
| 			} |  | ||||||
| 			err := k8sClient.Create(ctx, autoScalingNS) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to create test namespace for EphemeralRunner") |  | ||||||
| 
 |  | ||||||
| 			configSecret = &corev1.Secret{ |  | ||||||
| 				ObjectMeta: metav1.ObjectMeta{ |  | ||||||
| 					Name:      "github-config-secret", |  | ||||||
| 					Namespace: autoScalingNS.Name, |  | ||||||
| 				}, |  | ||||||
| 				Data: map[string][]byte{ |  | ||||||
| 					"github_token": []byte(gh_token), |  | ||||||
| 				}, |  | ||||||
| 			} |  | ||||||
| 
 |  | ||||||
| 			err = k8sClient.Create(ctx, configSecret) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to create config secret") |  | ||||||
| 
 |  | ||||||
| 			mgr, err := ctrl.NewManager(cfg, ctrl.Options{ |  | ||||||
| 				Namespace:          autoScalingNS.Name, |  | ||||||
| 				MetricsBindAddress: "0", |  | ||||||
| 			}) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to create manager") |  | ||||||
| 
 | 
 | ||||||
| 			controller = &EphemeralRunnerReconciler{ | 			controller = &EphemeralRunnerReconciler{ | ||||||
| 				Client:        mgr.GetClient(), | 				Client:        mgr.GetClient(), | ||||||
|  | @ -821,23 +717,10 @@ var _ = Describe("EphemeralRunner", func() { | ||||||
| 				Log:           logf.Log, | 				Log:           logf.Log, | ||||||
| 				ActionsClient: fake.NewMultiClient(), | 				ActionsClient: fake.NewMultiClient(), | ||||||
| 			} | 			} | ||||||
| 
 | 			err := controller.SetupWithManager(mgr) | ||||||
| 			err = controller.SetupWithManager(mgr) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to setup controller") | 			Expect(err).To(BeNil(), "failed to setup controller") | ||||||
| 
 | 
 | ||||||
| 			go func() { | 			startManagers(GinkgoT(), mgr) | ||||||
| 				defer GinkgoRecover() |  | ||||||
| 
 |  | ||||||
| 				err := mgr.Start(ctx) |  | ||||||
| 				Expect(err).To(BeNil(), "failed to start manager") |  | ||||||
| 			}() |  | ||||||
| 		}) |  | ||||||
| 
 |  | ||||||
| 		AfterEach(func() { |  | ||||||
| 			defer cancel() |  | ||||||
| 
 |  | ||||||
| 			err := k8sClient.Delete(ctx, autoScalingNS) |  | ||||||
| 			Expect(err).To(BeNil(), "failed to delete test namespace for EphemeralRunner") |  | ||||||
| 		}) | 		}) | ||||||
| 
 | 
 | ||||||
| 		It("uses an actions client with proxy transport", func() { | 		It("uses an actions client with proxy transport", func() { | ||||||
|  |  | ||||||
|  | @ -34,38 +34,15 @@ const ( | ||||||
| 
 | 
 | ||||||
| var _ = Describe("Test EphemeralRunnerSet controller", func() { | var _ = Describe("Test EphemeralRunnerSet controller", func() { | ||||||
| 	var ctx context.Context | 	var ctx context.Context | ||||||
| 	var cancel context.CancelFunc | 	var mgr ctrl.Manager | ||||||
| 	autoscalingNS := new(corev1.Namespace) | 	var autoscalingNS *corev1.Namespace | ||||||
| 	ephemeralRunnerSet := new(actionsv1alpha1.EphemeralRunnerSet) | 	var ephemeralRunnerSet *actionsv1alpha1.EphemeralRunnerSet | ||||||
| 	configSecret := new(corev1.Secret) | 	var configSecret *corev1.Secret | ||||||
| 
 | 
 | ||||||
| 	BeforeEach(func() { | 	BeforeEach(func() { | ||||||
| 		ctx, cancel = context.WithCancel(context.TODO()) | 		ctx = context.Background() | ||||||
| 		autoscalingNS = &corev1.Namespace{ | 		autoscalingNS, mgr = createNamespace(GinkgoT(), k8sClient) | ||||||
| 			ObjectMeta: metav1.ObjectMeta{Name: "testns-autoscaling-runnerset" + RandStringRunes(5)}, | 		configSecret = createDefaultSecret(GinkgoT(), k8sClient, autoscalingNS.Name) | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		err := k8sClient.Create(ctx, autoscalingNS) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create test namespace for EphemeralRunnerSet") |  | ||||||
| 
 |  | ||||||
| 		configSecret = &corev1.Secret{ |  | ||||||
| 			ObjectMeta: metav1.ObjectMeta{ |  | ||||||
| 				Name:      "github-config-secret", |  | ||||||
| 				Namespace: autoscalingNS.Name, |  | ||||||
| 			}, |  | ||||||
| 			Data: map[string][]byte{ |  | ||||||
| 				"github_token": []byte(ephemeralRunnerSetTestGitHubToken), |  | ||||||
| 			}, |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		err = k8sClient.Create(ctx, configSecret) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create config secret") |  | ||||||
| 
 |  | ||||||
| 		mgr, err := ctrl.NewManager(cfg, ctrl.Options{ |  | ||||||
| 			Namespace:          autoscalingNS.Name, |  | ||||||
| 			MetricsBindAddress: "0", |  | ||||||
| 		}) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create manager") |  | ||||||
| 
 | 
 | ||||||
| 		controller := &EphemeralRunnerSetReconciler{ | 		controller := &EphemeralRunnerSetReconciler{ | ||||||
| 			Client:        mgr.GetClient(), | 			Client:        mgr.GetClient(), | ||||||
|  | @ -73,7 +50,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() { | ||||||
| 			Log:           logf.Log, | 			Log:           logf.Log, | ||||||
| 			ActionsClient: fake.NewMultiClient(), | 			ActionsClient: fake.NewMultiClient(), | ||||||
| 		} | 		} | ||||||
| 		err = controller.SetupWithManager(mgr) | 		err := controller.SetupWithManager(mgr) | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | 		Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | ||||||
| 
 | 
 | ||||||
| 		ephemeralRunnerSet = &actionsv1alpha1.EphemeralRunnerSet{ | 		ephemeralRunnerSet = &actionsv1alpha1.EphemeralRunnerSet{ | ||||||
|  | @ -103,19 +80,7 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() { | ||||||
| 		err = k8sClient.Create(ctx, ephemeralRunnerSet) | 		err = k8sClient.Create(ctx, ephemeralRunnerSet) | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create EphemeralRunnerSet") | 		Expect(err).NotTo(HaveOccurred(), "failed to create EphemeralRunnerSet") | ||||||
| 
 | 
 | ||||||
| 		go func() { | 		startManagers(GinkgoT(), mgr) | ||||||
| 			defer GinkgoRecover() |  | ||||||
| 
 |  | ||||||
| 			err := mgr.Start(ctx) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to start manager") |  | ||||||
| 		}() |  | ||||||
| 	}) |  | ||||||
| 
 |  | ||||||
| 	AfterEach(func() { |  | ||||||
| 		defer cancel() |  | ||||||
| 
 |  | ||||||
| 		err := k8sClient.Delete(ctx, autoscalingNS) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace for EphemeralRunnerSet") |  | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	Context("When creating a new EphemeralRunnerSet", func() { | 	Context("When creating a new EphemeralRunnerSet", func() { | ||||||
|  | @ -595,38 +560,15 @@ var _ = Describe("Test EphemeralRunnerSet controller", func() { | ||||||
| 
 | 
 | ||||||
| var _ = Describe("Test EphemeralRunnerSet controller with proxy settings", func() { | var _ = Describe("Test EphemeralRunnerSet controller with proxy settings", func() { | ||||||
| 	var ctx context.Context | 	var ctx context.Context | ||||||
| 	var cancel context.CancelFunc | 	var mgr ctrl.Manager | ||||||
| 	autoscalingNS := new(corev1.Namespace) | 	var autoscalingNS *corev1.Namespace | ||||||
| 	ephemeralRunnerSet := new(actionsv1alpha1.EphemeralRunnerSet) | 	var ephemeralRunnerSet *actionsv1alpha1.EphemeralRunnerSet | ||||||
| 	configSecret := new(corev1.Secret) | 	var configSecret *corev1.Secret | ||||||
| 
 | 
 | ||||||
| 	BeforeEach(func() { | 	BeforeEach(func() { | ||||||
| 		ctx, cancel = context.WithCancel(context.TODO()) | 		ctx = context.Background() | ||||||
| 		autoscalingNS = &corev1.Namespace{ | 		autoscalingNS, mgr = createNamespace(GinkgoT(), k8sClient) | ||||||
| 			ObjectMeta: metav1.ObjectMeta{Name: "testns-autoscaling-runnerset" + RandStringRunes(5)}, | 		configSecret = createDefaultSecret(GinkgoT(), k8sClient, autoscalingNS.Name) | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		err := k8sClient.Create(ctx, autoscalingNS) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create test namespace for EphemeralRunnerSet") |  | ||||||
| 
 |  | ||||||
| 		configSecret = &corev1.Secret{ |  | ||||||
| 			ObjectMeta: metav1.ObjectMeta{ |  | ||||||
| 				Name:      "github-config-secret", |  | ||||||
| 				Namespace: autoscalingNS.Name, |  | ||||||
| 			}, |  | ||||||
| 			Data: map[string][]byte{ |  | ||||||
| 				"github_token": []byte(ephemeralRunnerSetTestGitHubToken), |  | ||||||
| 			}, |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		err = k8sClient.Create(ctx, configSecret) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create config secret") |  | ||||||
| 
 |  | ||||||
| 		mgr, err := ctrl.NewManager(cfg, ctrl.Options{ |  | ||||||
| 			Namespace:          autoscalingNS.Name, |  | ||||||
| 			MetricsBindAddress: "0", |  | ||||||
| 		}) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to create manager") |  | ||||||
| 
 | 
 | ||||||
| 		controller := &EphemeralRunnerSetReconciler{ | 		controller := &EphemeralRunnerSetReconciler{ | ||||||
| 			Client:        mgr.GetClient(), | 			Client:        mgr.GetClient(), | ||||||
|  | @ -634,22 +576,10 @@ var _ = Describe("Test EphemeralRunnerSet controller with proxy settings", func( | ||||||
| 			Log:           logf.Log, | 			Log:           logf.Log, | ||||||
| 			ActionsClient: actions.NewMultiClient("test", logr.Discard()), | 			ActionsClient: actions.NewMultiClient("test", logr.Discard()), | ||||||
| 		} | 		} | ||||||
| 		err = controller.SetupWithManager(mgr) | 		err := controller.SetupWithManager(mgr) | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | 		Expect(err).NotTo(HaveOccurred(), "failed to setup controller") | ||||||
| 
 | 
 | ||||||
| 		go func() { | 		startManagers(GinkgoT(), mgr) | ||||||
| 			defer GinkgoRecover() |  | ||||||
| 
 |  | ||||||
| 			err := mgr.Start(ctx) |  | ||||||
| 			Expect(err).NotTo(HaveOccurred(), "failed to start manager") |  | ||||||
| 		}() |  | ||||||
| 	}) |  | ||||||
| 
 |  | ||||||
| 	AfterEach(func() { |  | ||||||
| 		defer cancel() |  | ||||||
| 
 |  | ||||||
| 		err := k8sClient.Delete(ctx, autoscalingNS) |  | ||||||
| 		Expect(err).NotTo(HaveOccurred(), "failed to delete test namespace for EphemeralRunnerSet") |  | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	It("should create a proxy secret and delete the proxy secreat after the runner-set is deleted", func() { | 	It("should create a proxy secret and delete the proxy secreat after the runner-set is deleted", func() { | ||||||
|  |  | ||||||
|  | @ -0,0 +1,71 @@ | ||||||
|  | package actionsgithubcom | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"context" | ||||||
|  | 
 | ||||||
|  | 	"github.com/onsi/ginkgo/v2" | ||||||
|  | 	"github.com/stretchr/testify/require" | ||||||
|  | 	"golang.org/x/sync/errgroup" | ||||||
|  | 	corev1 "k8s.io/api/core/v1" | ||||||
|  | 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" | ||||||
|  | 	ctrl "sigs.k8s.io/controller-runtime" | ||||||
|  | 	"sigs.k8s.io/controller-runtime/pkg/client" | ||||||
|  | 	"sigs.k8s.io/controller-runtime/pkg/manager" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | const defaultGitHubToken = "gh_token" | ||||||
|  | 
 | ||||||
|  | func startManagers(t ginkgo.GinkgoTInterface, first manager.Manager, others ...manager.Manager) { | ||||||
|  | 	for _, mgr := range append([]manager.Manager{first}, others...) { | ||||||
|  | 		ctx, cancel := context.WithCancel(context.Background()) | ||||||
|  | 
 | ||||||
|  | 		g, ctx := errgroup.WithContext(ctx) | ||||||
|  | 		g.Go(func() error { | ||||||
|  | 			return mgr.Start(ctx) | ||||||
|  | 		}) | ||||||
|  | 
 | ||||||
|  | 		t.Cleanup(func() { | ||||||
|  | 			cancel() | ||||||
|  | 			require.NoError(t, g.Wait()) | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func createNamespace(t ginkgo.GinkgoTInterface, client client.Client) (*corev1.Namespace, manager.Manager) { | ||||||
|  | 	ns := &corev1.Namespace{ | ||||||
|  | 		ObjectMeta: metav1.ObjectMeta{Name: "testns-autoscaling" + RandStringRunes(5)}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err := k8sClient.Create(context.Background(), ns) | ||||||
|  | 	require.NoError(t, err) | ||||||
|  | 
 | ||||||
|  | 	t.Cleanup(func() { | ||||||
|  | 		err := k8sClient.Delete(context.Background(), ns) | ||||||
|  | 		require.NoError(t, err) | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
|  | 	mgr, err := ctrl.NewManager(cfg, ctrl.Options{ | ||||||
|  | 		Namespace:          ns.Name, | ||||||
|  | 		MetricsBindAddress: "0", | ||||||
|  | 	}) | ||||||
|  | 	require.NoError(t, err) | ||||||
|  | 
 | ||||||
|  | 	return ns, mgr | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func createDefaultSecret(t ginkgo.GinkgoTInterface, client client.Client, namespace string) *corev1.Secret { | ||||||
|  | 	secret := &corev1.Secret{ | ||||||
|  | 		ObjectMeta: metav1.ObjectMeta{ | ||||||
|  | 			Name:      "github-config-secret", | ||||||
|  | 			Namespace: namespace, | ||||||
|  | 		}, | ||||||
|  | 		Data: map[string][]byte{ | ||||||
|  | 			"github_token": []byte(defaultGitHubToken), | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	err := k8sClient.Create(context.Background(), secret) | ||||||
|  | 	require.NoError(t, err) | ||||||
|  | 
 | ||||||
|  | 	return secret | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								go.mod
								
								
								
								
							
							
						
						
									
										1
									
								
								go.mod
								
								
								
								
							|  | @ -28,6 +28,7 @@ require ( | ||||||
| 	go.uber.org/zap v1.24.0 | 	go.uber.org/zap v1.24.0 | ||||||
| 	golang.org/x/net v0.7.0 | 	golang.org/x/net v0.7.0 | ||||||
| 	golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 | 	golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 | ||||||
|  | 	golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 | ||||||
| 	gomodules.xyz/jsonpatch/v2 v2.2.0 | 	gomodules.xyz/jsonpatch/v2 v2.2.0 | ||||||
| 	gopkg.in/yaml.v2 v2.4.0 | 	gopkg.in/yaml.v2 v2.4.0 | ||||||
| 	k8s.io/api v0.26.1 | 	k8s.io/api v0.26.1 | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								go.sum
								
								
								
								
							
							
						
						
									
										2
									
								
								go.sum
								
								
								
								
							|  | @ -473,6 +473,8 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ | ||||||
| golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
|  | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4 h1:uVc8UZUe6tr40fFVnUP5Oj+veunVezqYl9z7DYw9xzw= | ||||||
|  | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||||
| golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
| golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
| golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue