@@ -18,13 +18,13 @@ import (
18
18
"github.com/valyala/fasthttp"
19
19
)
20
20
21
- func createProxyTestServer (t * testing.T , handler fiber.Handler ) (* fiber.App , string ) {
21
+ func createProxyTestServer (t * testing.T , handler fiber.Handler , network , address string ) (* fiber.App , string ) {
22
22
t .Helper ()
23
23
24
24
target := fiber .New ()
25
25
target .Get ("/" , handler )
26
26
27
- ln , err := net .Listen (fiber . NetworkTCP4 , "127.0.0.1:0" )
27
+ ln , err := net .Listen (network , address )
28
28
require .NoError (t , err )
29
29
30
30
go func () {
@@ -39,6 +39,16 @@ func createProxyTestServer(t *testing.T, handler fiber.Handler) (*fiber.App, str
39
39
return target , addr
40
40
}
41
41
42
+ func createProxyTestServerIPv4 (t * testing.T , handler fiber.Handler ) (* fiber.App , string ) {
43
+ t .Helper ()
44
+ return createProxyTestServer (t , handler , fiber .NetworkTCP4 , "127.0.0.1:0" )
45
+ }
46
+
47
+ func createProxyTestServerIPv6 (t * testing.T , handler fiber.Handler ) (* fiber.App , string ) {
48
+ t .Helper ()
49
+ return createProxyTestServer (t , handler , fiber .NetworkTCP6 , "[::1]:0" )
50
+ }
51
+
42
52
// go test -run Test_Proxy_Empty_Host
43
53
func Test_Proxy_Empty_Upstream_Servers (t * testing.T ) {
44
54
t .Parallel ()
@@ -86,7 +96,7 @@ func Test_Proxy_Next(t *testing.T) {
86
96
func Test_Proxy (t * testing.T ) {
87
97
t .Parallel ()
88
98
89
- target , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
99
+ target , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
90
100
return c .SendStatus (fiber .StatusTeapot )
91
101
})
92
102
@@ -148,11 +158,86 @@ func Test_Proxy_Balancer_WithTlsConfig(t *testing.T) {
148
158
resp .Close ()
149
159
}
150
160
161
+ // go test -run Test_Proxy_Balancer_IPv6_Upstream
162
+ func Test_Proxy_Balancer_IPv6_Upstream (t * testing.T ) {
163
+ t .Parallel ()
164
+
165
+ target , addr := createProxyTestServerIPv6 (t , func (c fiber.Ctx ) error {
166
+ return c .SendStatus (fiber .StatusTeapot )
167
+ })
168
+
169
+ resp , err := target .Test (httptest .NewRequest (fiber .MethodGet , "/" , nil ), 2 * time .Second )
170
+ require .NoError (t , err )
171
+ require .Equal (t , fiber .StatusTeapot , resp .StatusCode )
172
+
173
+ app := fiber .New ()
174
+
175
+ app .Use (Balancer (Config {Servers : []string {addr }}))
176
+
177
+ req := httptest .NewRequest (fiber .MethodGet , "/" , nil )
178
+ req .Host = addr
179
+ resp , err = app .Test (req )
180
+ require .NoError (t , err )
181
+ require .Equal (t , fiber .StatusInternalServerError , resp .StatusCode )
182
+ }
183
+
184
+ // go test -run Test_Proxy_Balancer_IPv6_Upstream
185
+ func Test_Proxy_Balancer_IPv6_Upstream_With_DialDualStack (t * testing.T ) {
186
+ t .Parallel ()
187
+
188
+ target , addr := createProxyTestServerIPv6 (t , func (c fiber.Ctx ) error {
189
+ return c .SendStatus (fiber .StatusTeapot )
190
+ })
191
+
192
+ resp , err := target .Test (httptest .NewRequest (fiber .MethodGet , "/" , nil ), 2 * time .Second )
193
+ require .NoError (t , err )
194
+ require .Equal (t , fiber .StatusTeapot , resp .StatusCode )
195
+
196
+ app := fiber .New ()
197
+
198
+ app .Use (Balancer (Config {
199
+ Servers : []string {addr },
200
+ DialDualStack : true ,
201
+ }))
202
+
203
+ req := httptest .NewRequest (fiber .MethodGet , "/" , nil )
204
+ req .Host = addr
205
+ resp , err = app .Test (req )
206
+ require .NoError (t , err )
207
+ require .Equal (t , fiber .StatusTeapot , resp .StatusCode )
208
+ }
209
+
210
+ // go test -run Test_Proxy_Balancer_IPv6_Upstream
211
+ func Test_Proxy_Balancer_IPv4_Upstream_With_DialDualStack (t * testing.T ) {
212
+ t .Parallel ()
213
+
214
+ target , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
215
+ return c .SendStatus (fiber .StatusTeapot )
216
+ })
217
+
218
+ resp , err := target .Test (httptest .NewRequest (fiber .MethodGet , "/" , nil ), 2 * time .Second )
219
+ require .NoError (t , err )
220
+ require .Equal (t , fiber .StatusTeapot , resp .StatusCode )
221
+
222
+ app := fiber .New ()
223
+
224
+ app .Use (Balancer (Config {
225
+ Servers : []string {addr },
226
+ DialDualStack : true ,
227
+ }))
228
+
229
+ req := httptest .NewRequest (fiber .MethodGet , "/" , nil )
230
+ req .Host = addr
231
+ resp , err = app .Test (req )
232
+ require .NoError (t , err )
233
+ require .Equal (t , fiber .StatusTeapot , resp .StatusCode )
234
+ }
235
+
151
236
// go test -run Test_Proxy_Forward_WithTlsConfig_To_Http
152
237
func Test_Proxy_Forward_WithTlsConfig_To_Http (t * testing.T ) {
153
238
t .Parallel ()
154
239
155
- _ , targetAddr := createProxyTestServer (t , func (c fiber.Ctx ) error {
240
+ _ , targetAddr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
156
241
return c .SendString ("hello from target" )
157
242
})
158
243
@@ -193,7 +278,7 @@ func Test_Proxy_Forward(t *testing.T) {
193
278
194
279
app := fiber .New ()
195
280
196
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
281
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
197
282
return c .SendString ("forwarded" )
198
283
})
199
284
@@ -255,7 +340,7 @@ func Test_Proxy_Forward_WithClient_TLSConfig(t *testing.T) {
255
340
func Test_Proxy_Modify_Response (t * testing.T ) {
256
341
t .Parallel ()
257
342
258
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
343
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
259
344
return c .Status (500 ).SendString ("not modified" )
260
345
})
261
346
@@ -281,7 +366,7 @@ func Test_Proxy_Modify_Response(t *testing.T) {
281
366
func Test_Proxy_Modify_Request (t * testing.T ) {
282
367
t .Parallel ()
283
368
284
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
369
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
285
370
b := c .Request ().Body ()
286
371
return c .SendString (string (b ))
287
372
})
@@ -308,7 +393,7 @@ func Test_Proxy_Modify_Request(t *testing.T) {
308
393
func Test_Proxy_Timeout_Slow_Server (t * testing.T ) {
309
394
t .Parallel ()
310
395
311
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
396
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
312
397
time .Sleep (300 * time .Millisecond )
313
398
return c .SendString ("fiber is awesome" )
314
399
})
@@ -332,7 +417,7 @@ func Test_Proxy_Timeout_Slow_Server(t *testing.T) {
332
417
func Test_Proxy_With_Timeout (t * testing.T ) {
333
418
t .Parallel ()
334
419
335
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
420
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
336
421
time .Sleep (1 * time .Second )
337
422
return c .SendString ("fiber is awesome" )
338
423
})
@@ -356,7 +441,7 @@ func Test_Proxy_With_Timeout(t *testing.T) {
356
441
func Test_Proxy_Buffer_Size_Response (t * testing.T ) {
357
442
t .Parallel ()
358
443
359
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
444
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
360
445
long := strings .Join (make ([]string , 5000 ), "-" )
361
446
c .Set ("Very-Long-Header" , long )
362
447
return c .SendString ("ok" )
@@ -383,7 +468,7 @@ func Test_Proxy_Buffer_Size_Response(t *testing.T) {
383
468
// go test -race -run Test_Proxy_Do_RestoreOriginalURL
384
469
func Test_Proxy_Do_RestoreOriginalURL (t * testing.T ) {
385
470
t .Parallel ()
386
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
471
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
387
472
return c .SendString ("proxied" )
388
473
})
389
474
@@ -470,7 +555,7 @@ func Test_Proxy_DoRedirects_TooManyRedirects(t *testing.T) {
470
555
func Test_Proxy_DoTimeout_RestoreOriginalURL (t * testing.T ) {
471
556
t .Parallel ()
472
557
473
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
558
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
474
559
return c .SendString ("proxied" )
475
560
})
476
561
@@ -492,7 +577,7 @@ func Test_Proxy_DoTimeout_RestoreOriginalURL(t *testing.T) {
492
577
func Test_Proxy_DoTimeout_Timeout (t * testing.T ) {
493
578
t .Parallel ()
494
579
495
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
580
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
496
581
time .Sleep (time .Second * 5 )
497
582
return c .SendString ("proxied" )
498
583
})
@@ -510,7 +595,7 @@ func Test_Proxy_DoTimeout_Timeout(t *testing.T) {
510
595
func Test_Proxy_DoDeadline_RestoreOriginalURL (t * testing.T ) {
511
596
t .Parallel ()
512
597
513
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
598
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
514
599
return c .SendString ("proxied" )
515
600
})
516
601
@@ -532,7 +617,7 @@ func Test_Proxy_DoDeadline_RestoreOriginalURL(t *testing.T) {
532
617
func Test_Proxy_DoDeadline_PastDeadline (t * testing.T ) {
533
618
t .Parallel ()
534
619
535
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
620
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
536
621
time .Sleep (time .Second * 5 )
537
622
return c .SendString ("proxied" )
538
623
})
@@ -550,7 +635,7 @@ func Test_Proxy_DoDeadline_PastDeadline(t *testing.T) {
550
635
func Test_Proxy_Do_HTTP_Prefix_URL (t * testing.T ) {
551
636
t .Parallel ()
552
637
553
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
638
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
554
639
return c .SendString ("hello world" )
555
640
})
556
641
@@ -641,7 +726,7 @@ func Test_Proxy_Forward_Local_Client(t *testing.T) {
641
726
func Test_ProxyBalancer_Custom_Client (t * testing.T ) {
642
727
t .Parallel ()
643
728
644
- target , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
729
+ target , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
645
730
return c .SendStatus (fiber .StatusTeapot )
646
731
})
647
732
@@ -721,7 +806,7 @@ func Test_Proxy_Balancer_Forward_Local(t *testing.T) {
721
806
722
807
app := fiber .New ()
723
808
724
- _ , addr := createProxyTestServer (t , func (c fiber.Ctx ) error {
809
+ _ , addr := createProxyTestServerIPv4 (t , func (c fiber.Ctx ) error {
725
810
return c .SendString ("forwarded" )
726
811
})
727
812
0 commit comments