1
1
package rtl
2
2
3
3
import (
4
+ "context"
4
5
"encoding/json"
6
+ "errors"
5
7
"fmt"
6
8
"net/http"
7
9
"net/http/httptest"
@@ -50,13 +52,13 @@ func TestAuthSession_Do_Authorization(t *testing.T) {
50
52
}
51
53
})
52
54
53
- s := NewAuthSession (ApiSettings {
55
+ session := NewAuthSession (ApiSettings {
54
56
BaseUrl : server .URL ,
55
57
ApiVersion : apiVersion ,
56
58
})
57
59
58
60
var r string
59
- err := s .Do (& r , "GET" , apiVersion , path , nil , nil , nil )
61
+ err := session .Do (& r , "GET" , apiVersion , path , nil , nil , nil )
60
62
61
63
if err != nil {
62
64
t .Errorf ("Do() call failed: %v" , err )
@@ -91,13 +93,13 @@ func TestAuthSession_Do_Authorization(t *testing.T) {
91
93
fmt .Fprint (w , string (s ))
92
94
})
93
95
94
- s := NewAuthSession (ApiSettings {
96
+ session := NewAuthSession (ApiSettings {
95
97
BaseUrl : server .URL ,
96
98
ApiVersion : apiVersion ,
97
99
})
98
100
99
101
var r string
100
- err := s .Do (& r , "GET" , apiVersion , path , nil , nil , nil )
102
+ err := session .Do (& r , "GET" , apiVersion , path , nil , nil , nil )
101
103
102
104
if err != nil {
103
105
t .Errorf ("First Do() call failed: %v" , err )
@@ -106,7 +108,7 @@ func TestAuthSession_Do_Authorization(t *testing.T) {
106
108
// wait till previous token is definitely expired
107
109
time .Sleep (2 * time .Second )
108
110
109
- err = s .Do (& r , "GET" , apiVersion , path , nil , nil , nil )
111
+ err = session .Do (& r , "GET" , apiVersion , path , nil , nil , nil )
110
112
111
113
if err != nil {
112
114
t .Errorf ("Second Do() call failed: %v" , err )
@@ -123,6 +125,70 @@ func TestAuthSession_Do_Authorization(t *testing.T) {
123
125
})
124
126
}
125
127
128
+ func TestAuthSession_Do_UserAgent (t * testing.T ) {
129
+ const path = "/someMethod"
130
+ const apiVersion = "/4.0"
131
+
132
+ t .Run ("Do() sets User-Agent header with AuthSession config's AgentTag" , func (t * testing.T ) {
133
+ mux := http .NewServeMux ()
134
+ setupApi40Login (mux , foreverValidTestToken , http .StatusOK )
135
+ server := httptest .NewServer (mux )
136
+ defer server .Close ()
137
+
138
+ mux .HandleFunc ("/api" + apiVersion + path , func (w http.ResponseWriter , r * http.Request ) {
139
+ userAgentHeader := r .Header .Get ("User-Agent" )
140
+ expectedHeader := "some-agent-tag"
141
+ if userAgentHeader != expectedHeader {
142
+ t .Errorf ("User-Agent header not correct. got=%v want=%v" , userAgentHeader , expectedHeader )
143
+ }
144
+ })
145
+
146
+ session := NewAuthSession (ApiSettings {
147
+ BaseUrl : server .URL ,
148
+ ApiVersion : apiVersion ,
149
+ AgentTag : "some-agent-tag" ,
150
+ })
151
+
152
+ var r string
153
+ err := session .Do (& r , "GET" , apiVersion , path , nil , nil , nil )
154
+
155
+ if err != nil {
156
+ t .Errorf ("Do() call failed: %v" , err )
157
+ }
158
+ })
159
+
160
+ t .Run ("Do() sets User-Agent header with Do's option's AgentTag, which will overwrite AuthSession config" , func (t * testing.T ) {
161
+ mux := http .NewServeMux ()
162
+ setupApi40Login (mux , foreverValidTestToken , http .StatusOK )
163
+ server := httptest .NewServer (mux )
164
+ defer server .Close ()
165
+
166
+ mux .HandleFunc ("/api" + apiVersion + path , func (w http.ResponseWriter , r * http.Request ) {
167
+ userAgentHeader := r .Header .Get ("User-Agent" )
168
+ expectedHeader := "new-agent-tag"
169
+ if userAgentHeader != expectedHeader {
170
+ t .Errorf ("User-Agent header not correct. got=%v want=%v" , userAgentHeader , expectedHeader )
171
+ }
172
+ })
173
+
174
+ session := NewAuthSession (ApiSettings {
175
+ BaseUrl : server .URL ,
176
+ ApiVersion : apiVersion ,
177
+ AgentTag : "some-agent-tag" ,
178
+ })
179
+
180
+ var r string
181
+ options := ApiSettings {
182
+ AgentTag : "new-agent-tag" ,
183
+ }
184
+ err := session .Do (& r , "GET" , apiVersion , path , nil , nil , & options )
185
+
186
+ if err != nil {
187
+ t .Errorf ("Do() call failed: %v" , err )
188
+ }
189
+ })
190
+ }
191
+
126
192
func TestAuthSession_Do_Parse (t * testing.T ) {
127
193
type stringStruct struct {
128
194
Field * string `json:"field"`
@@ -153,13 +219,13 @@ func TestAuthSession_Do_Parse(t *testing.T) {
153
219
fmt .Fprint (w , string (s ))
154
220
})
155
221
156
- s := NewAuthSession (ApiSettings {
222
+ session := NewAuthSession (ApiSettings {
157
223
BaseUrl : server .URL ,
158
224
ApiVersion : apiVersion ,
159
225
})
160
226
161
227
var result stringStruct
162
- s .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
228
+ session .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
163
229
164
230
if * result .Field != stringField {
165
231
t .Error ("num type field was not unmarshaled correctly into string type field" )
@@ -181,13 +247,13 @@ func TestAuthSession_Do_Parse(t *testing.T) {
181
247
fmt .Fprint (w , string (s ))
182
248
})
183
249
184
- s := NewAuthSession (ApiSettings {
250
+ session := NewAuthSession (ApiSettings {
185
251
BaseUrl : server .URL ,
186
252
ApiVersion : apiVersion ,
187
253
})
188
254
189
255
var result numStruct
190
- s .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
256
+ session .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
191
257
192
258
if * result .Field != numField {
193
259
t .Error ("string type field was not unmarshaled correctly into num type field" )
@@ -233,7 +299,7 @@ func TestAuthSession_Do_Parse(t *testing.T) {
233
299
fmt .Fprint (w , string (s ))
234
300
})
235
301
236
- s := NewAuthSession (ApiSettings {
302
+ session := NewAuthSession (ApiSettings {
237
303
BaseUrl : server .URL ,
238
304
ApiVersion : apiVersion ,
239
305
})
@@ -265,7 +331,7 @@ func TestAuthSession_Do_Parse(t *testing.T) {
265
331
266
332
var result expectedStructType
267
333
268
- s .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
334
+ session .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
269
335
270
336
if ! reflect .DeepEqual (result , expectedStruct ) {
271
337
t .Error ("fields of mixed types were not unmarshaled correctly into the right types" )
@@ -283,14 +349,14 @@ func TestAuthSession_Do_Parse(t *testing.T) {
283
349
fmt .Fprint (w , "a response" )
284
350
})
285
351
286
- s := NewAuthSession (ApiSettings {
352
+ session := NewAuthSession (ApiSettings {
287
353
BaseUrl : server .URL ,
288
354
ApiVersion : apiVersion ,
289
355
})
290
356
291
357
var result string
292
358
293
- err := s .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
359
+ err := session .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
294
360
295
361
if err != nil {
296
362
t .Errorf ("Do() failed. error=%v" , err )
@@ -318,15 +384,15 @@ func TestAuthSession_Do_Parse(t *testing.T) {
318
384
fmt .Fprint (w , string (s ))
319
385
})
320
386
321
- s := NewAuthSession (ApiSettings {
387
+ session := NewAuthSession (ApiSettings {
322
388
BaseUrl : server .URL ,
323
389
ApiVersion : apiVersion ,
324
390
})
325
391
326
392
var result interface {}
327
393
var expectedField float64 = 10
328
394
329
- err := s .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
395
+ err := session .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
330
396
331
397
if err != nil {
332
398
t .Errorf ("Do() failed. error=%v" , err )
@@ -356,7 +422,7 @@ func TestAuthSession_Do_Parse(t *testing.T) {
356
422
fmt .Fprint (w , string (s ))
357
423
})
358
424
359
- s := NewAuthSession (ApiSettings {
425
+ session := NewAuthSession (ApiSettings {
360
426
BaseUrl : server .URL ,
361
427
ApiVersion : apiVersion ,
362
428
})
@@ -376,7 +442,7 @@ func TestAuthSession_Do_Parse(t *testing.T) {
376
442
377
443
var result expectedStructType
378
444
379
- err := s .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
445
+ err := session .Do (& result , "GET" , apiVersion , path , nil , nil , nil )
380
446
381
447
if err != nil {
382
448
t .Errorf ("Do() failed. error=%v" , err )
@@ -406,7 +472,7 @@ func TestAuthSession_Do_Content_Type(t *testing.T) {
406
472
}
407
473
})
408
474
409
- s := NewAuthSession (ApiSettings {
475
+ session := NewAuthSession (ApiSettings {
410
476
BaseUrl : server .URL ,
411
477
ApiVersion : apiVersion ,
412
478
})
@@ -418,7 +484,7 @@ func TestAuthSession_Do_Content_Type(t *testing.T) {
418
484
key : "value" ,
419
485
}
420
486
421
- err := s .Do (& r , "GET" , apiVersion , path , nil , body , nil )
487
+ err := session .Do (& r , "GET" , apiVersion , path , nil , body , nil )
422
488
423
489
if err != nil {
424
490
t .Errorf ("Do() call failed: %v" , err )
@@ -439,20 +505,78 @@ func TestAuthSession_Do_Content_Type(t *testing.T) {
439
505
}
440
506
})
441
507
442
- s := NewAuthSession (ApiSettings {
508
+ session := NewAuthSession (ApiSettings {
443
509
BaseUrl : server .URL ,
444
510
ApiVersion : apiVersion ,
445
511
})
446
512
447
513
var r string
448
- err := s .Do (& r , "GET" , apiVersion , path , nil , "body" , nil )
514
+ err := session .Do (& r , "GET" , apiVersion , path , nil , "body" , nil )
449
515
450
516
if err != nil {
451
517
t .Errorf ("Do() call failed: %v" , err )
452
518
}
453
519
})
454
520
}
455
521
522
+ func TestAuthSession_Do_Timeout (t * testing.T ) {
523
+ const path = "/someMethod"
524
+ const apiVersion = "/4.0"
525
+
526
+ t .Run ("Do() follows Timeout set in AuthSession config" , func (t * testing.T ) {
527
+ mux := http .NewServeMux ()
528
+ setupApi40Login (mux , foreverValidTestToken , http .StatusOK )
529
+ server := httptest .NewServer (mux )
530
+ defer server .Close ()
531
+
532
+ mux .HandleFunc ("/api" + apiVersion + path , func (w http.ResponseWriter , r * http.Request ) {
533
+ time .Sleep (4 * time .Second )
534
+ })
535
+
536
+ session := NewAuthSession (ApiSettings {
537
+ BaseUrl : server .URL ,
538
+ ApiVersion : apiVersion ,
539
+ Timeout : 1 , // seconds
540
+ })
541
+
542
+ err := session .Do (nil , "GET" , apiVersion , path , nil , nil , nil )
543
+
544
+ if err == nil {
545
+ t .Errorf ("Do() call did not error/timeout" )
546
+ } else if ! errors .Is (err , context .DeadlineExceeded ) {
547
+ t .Errorf ("Do() call did not error with context.DeadlineExceeded, got=%v" , err )
548
+ }
549
+ })
550
+
551
+ t .Run ("Do() follows Timeout set in Do()'s options" , func (t * testing.T ) {
552
+ mux := http .NewServeMux ()
553
+ setupApi40Login (mux , foreverValidTestToken , http .StatusOK )
554
+ server := httptest .NewServer (mux )
555
+ defer server .Close ()
556
+
557
+ mux .HandleFunc ("/api" + apiVersion + path , func (w http.ResponseWriter , r * http.Request ) {
558
+ time .Sleep (4 * time .Second )
559
+ })
560
+
561
+ session := NewAuthSession (ApiSettings {
562
+ BaseUrl : server .URL ,
563
+ ApiVersion : apiVersion ,
564
+ })
565
+
566
+ options := ApiSettings {
567
+ Timeout : 1 , //seconds
568
+ }
569
+
570
+ err := session .Do (nil , "GET" , apiVersion , path , nil , nil , & options )
571
+
572
+ if err == nil {
573
+ t .Errorf ("Do() call did not error/timeout" )
574
+ } else if ! errors .Is (err , context .DeadlineExceeded ) {
575
+ t .Errorf ("Do() call did not error with context.DeadlineExceeded, got=%v" , err )
576
+ }
577
+ })
578
+ }
579
+
456
580
func TestSetQuery (t * testing.T ) {
457
581
somestring := "somestring"
458
582
testcases := []struct {
0 commit comments