func()

in internal/testintegration/setup.go [207:276]


func (h *EnvTestHarness) StartManager(proxyImage string) error {
	h.managerLock.Lock()
	defer h.managerLock.Unlock()

	var ctx context.Context
	ctx, h.cancel = context.WithCancel(h.testEnvCtx)

	// start webhook server using Manager
	o := &h.testEnv.WebhookInstallOptions
	mgr, err := ctrl.NewManager(h.cfg, ctrl.Options{
		Scheme: h.s,
		Metrics: metricsserver.Options{
			BindAddress: "0",
		},
		WebhookServer: &webhook.DefaultServer{
			Options: webhook.Options{
				Port:    o.LocalServingPort,
				Host:    o.LocalServingHost,
				CertDir: o.LocalServingCertDir,
			},
		},
		LeaderElection: false,
	})
	if err != nil {
		return fmt.Errorf("unable to start manager %v", err)
	}
	h.Manager = mgr

	// Initialize the controller-runtime manager.
	err = controller.SetupManagers(mgr, "cloud-sql-proxy-operator/dev", proxyImage)
	if err != nil {
		return fmt.Errorf("unable to start kuberenetes envtest %v", err)
	}

	// Run the manager in a goroutine, close the channel when the manager exits.
	h.stopped = make(chan int)
	go func() {
		defer close(h.stopped)
		Log.Info("Starting controller manager.")
		err = mgr.Start(ctx)
		if err != nil {
			Log.Info("Starting manager failed.", err)
			return
		}
		Log.Info("Manager exited normally.")
	}()

	// Wait for the controller manager webhook server to get ready.
	dialer := &net.Dialer{Timeout: time.Second}
	addrPort := fmt.Sprintf("%s:%d", o.LocalServingHost, o.LocalServingPort)
	err = testhelpers.RetryUntilSuccess(10, time.Second, func() error {

		// whyNoLint:Ignore InsecureSkipVerify warning, this is only for local testing.
		conn, err := tls.DialWithDialer(dialer, "tcp", addrPort,
			&tls.Config{InsecureSkipVerify: true}) //nolint:gosec
		if err != nil {
			return err
		}

		conn.Close()

		return nil
	})
	if err != nil {
		return fmt.Errorf("unable to connect to manager %v", err)
	}

	Log.Info("Setup complete. Manager started.")
	return nil
}