-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgologz_test.go
174 lines (154 loc) · 4.92 KB
/
gologz_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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
package gologz
import (
"errors"
"reflect"
"testing"
)
func TestNewClient(t *testing.T) {
usecases := []struct {
name string
token string
region string
expectedURL string
}{
{"Should return a valid client with a valid url for EU region", "X-CLIENT-API-TOKEN", "eu", euURL},
{"Should return a valid client with a valid url for US region", "X-CLIENT-API-TOKEN", "us", usURL},
}
for _, usecase := range usecases {
t.Run(usecase.name, func(t *testing.T) {
client := New(usecase.token, usecase.region)
if ok := reflect.TypeOf(client); ok == nil {
t.Errorf("unexpected type on client instantiation got %v", ok)
}
if client.BaseURL != usecase.expectedURL {
t.Errorf("unexpected base url. expected %s, got %s", usecase.expectedURL, client.BaseURL)
}
})
}
}
func TestTrace(t *testing.T) {
usecases := []struct {
name string
token string
input string
expectedResult int
expectedError error
}{
{"Should return an error when requesting with an unauthorized token",
"X-UNAUTHORIZED-TOKEN", "*", 0, errInvalidToken},
{"Should return an LogzResponse with data with an authorized access and a valid query",
"X-AUTHORIZED-TOKEN", "test_parameter:test_value", 2, nil},
{"Should return an empty LogzResponse with an authorized access and valid query but no found records",
"X-AUTHORIZED-TOKEN", "", 0, nil},
}
for _, usecase := range usecases {
t.Run(usecase.name, func(t *testing.T) {
client := &Logzio{Token: usecase.token, BaseURL: euURL, fetcher: MockFetcher}
result, err := client.Trace(usecase.input, 0, 2)
if err != usecase.expectedError {
t.Errorf("unexpected error, expected %v, got %v", err, usecase.expectedError)
}
if result != nil && len(result.Logs) != usecase.expectedResult {
t.Errorf("unexpected log count, expected %d, got %d", usecase.expectedResult, len(result.Logs))
}
if usecase.expectedResult > 0 {
for index := range result.Logs {
if result.Logs[index].Log == "" {
t.Errorf("Expected log value to be parsed, got empty value")
}
if result.Logs[index].Service == "" {
t.Errorf("Expected service value to be parsed, got empty value")
}
if result.Logs[index].When == "" {
t.Errorf("Expected when value to be parsed, got empty value")
}
}
}
})
}
}
func TestTracePairs(t *testing.T) {
usecases := []struct {
caseName string
token string
input map[string]interface{}
expectedResult int
expectedError error
}{
{"Should return an error when requesting with an unauthorized token",
"X-UNAUTHORIZED-TOKEN", map[string]interface{}{}, 0, errInvalidToken},
{"Should return an LogzResponse with data with an authorized access and a valid query",
"X-AUTHORIZED-TOKEN", map[string]interface{}{"test_parameter": "test_value", "test_parameter2": 123}, 2, nil},
{"Should return an empty LogzResponse with an authorized access and valid query but no found records",
"X-AUTHORIZED-TOKEN", map[string]interface{}{}, 0, nil},
}
for _, usecase := range usecases {
t.Run(usecase.caseName, func(t *testing.T) {
client := &Logzio{Token: usecase.token, BaseURL: euURL, fetcher: MockFetcher}
result, err := client.TracePairs(usecase.input, 0, 2)
if err != usecase.expectedError {
t.Errorf("unexpected error, expected %v, got %v", err, usecase.expectedError)
}
if result != nil && len(result.Logs) != usecase.expectedResult {
t.Errorf("unexpected log count, expected %d, got %d", usecase.expectedResult, len(result.Logs))
}
if usecase.expectedResult > 0 {
for index := range result.Logs {
if result.Logs[index].Log == "" {
t.Errorf("Expected log value to be parsed, got empty value")
}
if result.Logs[index].Service == "" {
t.Errorf("Expected service value to be parsed, got empty value")
}
if result.Logs[index].When == "" {
t.Errorf("Expected when value to be parsed, got empty value")
}
}
}
})
}
}
func MockFetcher(parameters *request, logzioURL, token string) ([]byte, error) {
var response []byte
var err error
switch token {
case "X-UNAUTHORIZED-TOKEN":
err = errInvalidToken
case "X-AUTHORIZED-TOKEN":
err = nil
}
switch parameters.Query.QueryType.String.Input {
case "test_parameter:test_value":
response = validResponse
case "test_parameter:\"test_value\" AND test_parameter2:123":
response = validResponse
default:
response = invalidResponse
}
return response, err
}
var (
errInvalidToken = errors.New("Invalid token")
invalidResponse = []byte(`{}`)
validResponse = []byte(`{
"hits": {
"total": 17,
"hits": [
{
"_source": {
"log": "{\"this_is\" : \"a_log\"}",
"service": "test-service",
"when": "2018-03-19T16:15:30.291+0000"
}
},
{
"_source": {
"log": "{\"this_is\" : \"a_log\"}",
"service": "test-service",
"when": "2018-03-19T16:15:30.291+0000"
}
}
]
}
}`)
)