-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhandler_test.go
122 lines (99 loc) · 2.6 KB
/
handler_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
// +build integration
package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"reflect"
"testing"
"time"
"github.com/uber/tchannel-go/testutils/goroutines"
)
var noteAppServer = "http://localhost:3000"
func getHTTPClient() *http.Client {
return &http.Client{
Timeout: time.Duration(1 * time.Second),
}
}
//TestHealthEndpoint checks if the Health endpoint has the right format
func TestHealthEndpoint(t *testing.T) {
defer validateGoRoutines()
expectedResponse := map[string]string{
"redis-master-0": "ok",
"redis-slave-0": "ok",
"self": "ok",
}
resp, err := getHTTPClient().Get(fmt.Sprintf("%s/health", noteAppServer))
if err != nil || resp.StatusCode != 200 {
t.Log(err)
t.FailNow()
}
defer resp.Body.Close()
var Response map[string]string
if err := json.NewDecoder(resp.Body).Decode(&Response); err != nil {
t.Log(err)
t.FailNow()
}
if !reflect.DeepEqual(expectedResponse, Response) {
t.Logf("Expected: %v \nGot: %v", expectedResponse, Response)
t.Fail()
}
}
func TestInsertReadAndDeleteItem(t *testing.T) {
defer validateGoRoutines()
insertItem := "TestCase"
// Insert Item
if resp, err := getHTTPClient().Get(fmt.Sprintf("%s/insert/note/%s", noteAppServer, insertItem)); err != nil || resp.StatusCode != 200 {
t.Log(err)
t.FailNow()
}
// Read Item
readResp, err := getHTTPClient().Get(fmt.Sprintf("%s/read/note", noteAppServer))
if err != nil || readResp.StatusCode != 200 {
t.Log(err)
t.FailNow()
}
defer readResp.Body.Close()
var readResponse []string
if err = json.NewDecoder(readResp.Body).Decode(&readResponse); err != nil {
t.Log(err)
t.FailNow()
}
if !reflect.DeepEqual([]string{insertItem}, readResponse) {
t.FailNow()
}
// Delete Item
deleteResp, err := getHTTPClient().Get(fmt.Sprintf("%s/delete/note/%s", noteAppServer, insertItem))
if err != nil || deleteResp.StatusCode != 200 {
t.Log(err)
t.FailNow()
}
defer deleteResp.Body.Close()
var deleteResponse []string
if err := json.NewDecoder(deleteResp.Body).Decode(&deleteResponse); err != nil {
t.Log(err)
t.FailNow()
}
if !reflect.DeepEqual([]string{}, deleteResponse) {
t.FailNow()
}
}
func TestWhoAmI(t *testing.T) {
defer validateGoRoutines()
readResp, err := getHTTPClient().Get(fmt.Sprintf("%s/whoami", noteAppServer))
if err != nil || readResp.StatusCode != 200 {
t.Log(err)
t.FailNow()
}
defer readResp.Body.Close()
}
func validateGoRoutines() {
if err := goroutines.IdentifyLeaks(&goroutines.VerifyOpts{
Excludes: []string{
"net/http",
},
}); err != nil {
fmt.Fprintf(os.Stderr, "Found goroutine leaks on successful test run: %v", err)
}
}