in testutils/fakekubeapi/fakekubeapi.go [100:134]
func New(namespaces corev1.NamespaceList, secrets map[string][]corev1.Secret, port int, kmsClient *kmspluginclient.Client, timeout time.Duration) (*Server, error) {
var err error
if port == 0 {
port, err = freeport.GetFreePort()
if err != nil {
return nil, fmt.Errorf("failed to allocate port for fake kube-apiserver, error: %v", err)
}
}
s := &Server{
namespaces: namespaces,
secrets: secrets,
kms: kmsClient,
timeout: timeout,
}
s.srv = httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch r.Method {
case http.MethodGet:
s.processGet(r.URL.EscapedPath(), w)
case http.MethodPut:
s.processPut(r, w)
default:
http.Error(w, fmt.Sprintf("unexpected http method %v", r.Method), http.StatusBadRequest)
}
}))
l, err := net.Listen("tcp", fmt.Sprintf("localhost:%d", port))
if err != nil {
return nil, fmt.Errorf("failed to listen on port %d, error: %v", port, err)
}
s.srv.Listener = l
s.srv.Start()
return s, nil
}