-
Notifications
You must be signed in to change notification settings - Fork 2
/
nightfall_test.go
127 lines (120 loc) · 2.77 KB
/
nightfall_test.go
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package nightfall
import (
"context"
"net/http"
"net/http/httptest"
"testing"
)
func TestDo(t *testing.T) {
var callCount int
tests := []struct {
name string
handler http.HandlerFunc
expCalls int
wantErr bool
}{
{
name: "happy path",
handler: func(w http.ResponseWriter, r *http.Request) {
callCount++
w.WriteHeader(http.StatusOK)
},
expCalls: 1,
wantErr: false,
},
{
name: "happy path - retry 2 times",
handler: func(w http.ResponseWriter, r *http.Request) {
callCount++
if callCount == 3 {
w.WriteHeader(http.StatusOK)
return
}
w.WriteHeader(http.StatusTooManyRequests)
},
expCalls: 3,
wantErr: false,
},
{
name: "429 error after 5 retries",
handler: func(w http.ResponseWriter, r *http.Request) {
callCount++
w.WriteHeader(http.StatusTooManyRequests)
},
expCalls: 6,
wantErr: true,
},
{
name: "transient error",
handler: func(w http.ResponseWriter, r *http.Request) {
callCount++
w.WriteHeader(http.StatusInternalServerError)
},
expCalls: 1,
wantErr: true,
},
}
s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {}))
defer s.Close()
client, err := NewClient(OptionAPIKey("some key"))
if err != nil {
t.Fatal("Error initializing client")
}
reqParams := requestParams{
method: http.MethodPost,
url: s.URL,
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
callCount = 0
s.Config.Handler = test.handler
err = client.do(context.Background(), reqParams, nil)
if !test.wantErr && err != nil {
t.Errorf("Got unexpected error: %v", err)
}
if test.wantErr && err == nil {
t.Error("Did not get expected error")
}
if callCount != test.expCalls {
t.Error("Did not call expected number of times")
}
})
}
}
func TestNewClient(t *testing.T) {
tests := []struct {
name string
apiKey string
fileUploadConcurrency int
wantErr bool
}{
{
name: "happy path",
apiKey: "some key",
fileUploadConcurrency: 5,
wantErr: false,
},
{
name: "missing api key",
fileUploadConcurrency: 5,
wantErr: true,
},
{
name: "file concurrency too high",
apiKey: "some key",
fileUploadConcurrency: 101,
wantErr: true,
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
_, err := NewClient(OptionAPIKey(test.apiKey), OptionFileUploadConcurrency(test.fileUploadConcurrency))
if !test.wantErr && err != nil {
t.Errorf("Got unexpected error: %v", err)
}
if test.wantErr && err == nil {
t.Error("Did not get expected error")
}
})
}
}