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
}