internal/metrics/timeout_test.go
Rama main · réplica de lectura del repositorio original.
package metrics
import (
"context"
"io"
"net/http"
"net/http/httptest"
"strings"
"testing"
"time"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/rest"
)
func hungAPIServer(t *testing.T) dynamic.Interface {
t.Helper()
stop := make(chan struct{})
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
_, _ = io.Copy(io.Discard, r.Body)
select {
case <-r.Context().Done():
case <-stop:
}
}))
t.Cleanup(func() {
close(stop)
server.Close()
})
client, err := dynamic.NewForConfig(&rest.Config{Host: server.URL})
if err != nil {
t.Fatalf("dynamic client: %v", err)
}
return client
}
func TestBuildGivesUpOnAMetricsApiThatNeverAnswers(t *testing.T) {
previous := buildTimeout
buildTimeout = 150 * time.Millisecond
t.Cleanup(func() {
buildTimeout = previous
})
dyn := hungAPIServer(t)
started := time.Now()
built := Build(context.Background(), dyn, FromCluster(dyn))
elapsed := time.Since(started)
if elapsed > time.Second {
t.Fatalf("Build took %s, so it was not the cap that ended it", elapsed)
}
if built.Error == "" {
t.Fatal("a metrics API that never answers produced no error for the client")
}
if !strings.Contains(built.Error, "deadline") {
t.Fatalf("error = %q, want it to name the deadline", built.Error)
}
if len(built.Pods) != 0 {
t.Fatalf("pods = %v, want nothing usable", built.Pods)
}
}