Repository navigation
Expand file tree
/
Copy pathgetnodebootstrapdata_test.go
More file actions
69 lines (57 loc) · 2.03 KB
/
Copy pathgetnodebootstrapdata_test.go
File metadata and controls
69 lines (57 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package apiserver
import (
"net/http"
"net/http/httptest"
"strings"
"testing"
)
func TestGetNodeBootstrapDataRejectsWhenOverloaded(t *testing.T) {
api, err := NewAPIServer(&Options{Addr: ":8080"})
if err != nil {
t.Fatal(err)
}
for i := 0; i < cap(api.nodeBootstrapLimiter); i++ {
api.nodeBootstrapLimiter <- struct{}{}
}
request := httptest.NewRequest(http.MethodPost, RoutePathNodeBootstrapData, strings.NewReader("{}"))
response := httptest.NewRecorder()
api.GetNodeBootstrapData(response, request)
if response.Code != http.StatusServiceUnavailable {
t.Fatalf("expected status %d, got %d", http.StatusServiceUnavailable, response.Code)
}
if response.Header().Get("Retry-After") != api.overloadRetryAfterSeconds {
t.Fatalf("expected Retry-After %s, got %s", api.overloadRetryAfterSeconds, response.Header().Get("Retry-After"))
}
}
func TestGetNodeBootstrapDataReleasesLimiter(t *testing.T) {
api, err := NewAPIServer(&Options{Addr: ":8080"})
if err != nil {
t.Fatal(err)
}
request := httptest.NewRequest(http.MethodPost, RoutePathNodeBootstrapData, strings.NewReader("{"))
response := httptest.NewRecorder()
api.GetNodeBootstrapData(response, request)
if len(api.nodeBootstrapLimiter) != 0 {
t.Fatal("expected bootstrap limiter slot to be released")
}
}
func TestNewAPIServerUsesOverloadEnvironmentVariables(t *testing.T) {
t.Setenv(maxConcurrentNodeBootstrapRequestsEnv, "40")
t.Setenv(overloadRetryAfterSecondsEnv, "5")
api, err := NewAPIServer(&Options{Addr: ":8080"})
if err != nil {
t.Fatal(err)
}
if cap(api.nodeBootstrapLimiter) != 40 {
t.Fatalf("expected limiter capacity 40, got %d", cap(api.nodeBootstrapLimiter))
}
if api.overloadRetryAfterSeconds != "5" {
t.Fatalf("expected Retry-After 5, got %s", api.overloadRetryAfterSeconds)
}
}
func TestNewAPIServerRejectsInvalidOverloadEnvironmentVariables(t *testing.T) {
t.Setenv(maxConcurrentNodeBootstrapRequestsEnv, "invalid")
if _, err := NewAPIServer(&Options{Addr: ":8080"}); err == nil {
t.Fatal("expected invalid limiter capacity to fail")
}
}