@@ -309,6 +309,92 @@ func TestRouterChaining(t *testing.T) {
309
309
}
310
310
}
311
311
312
+ func TestRouterGroup (t * testing.T ) {
313
+ r1 := New ()
314
+ r2 := r1 .Group ("/boo" )
315
+ r1 .NotFound = r2 .Handler
316
+ fooHit := false
317
+ r1 .POST ("/foo" , func (ctx * fasthttp.RequestCtx ) {
318
+ fooHit = true
319
+ ctx .SetStatusCode (fasthttp .StatusOK )
320
+ })
321
+
322
+ barHit := false
323
+ r2 .POST ("/bar" , func (ctx * fasthttp.RequestCtx ) {
324
+ barHit = true
325
+ ctx .SetStatusCode (fasthttp .StatusOK )
326
+ })
327
+
328
+ s := & fasthttp.Server {
329
+ Handler : r1 .Handler ,
330
+ }
331
+
332
+ rw := & readWriter {}
333
+ ch := make (chan error )
334
+
335
+ rw .r .WriteString ("POST /foo HTTP/1.1\r \n \r \n " )
336
+ go func () {
337
+ ch <- s .ServeConn (rw )
338
+ }()
339
+ select {
340
+ case err := <- ch :
341
+ if err != nil {
342
+ t .Fatalf ("return error %s" , err )
343
+ }
344
+ case <- time .After (100 * time .Millisecond ):
345
+ t .Fatalf ("timeout" )
346
+ }
347
+ br := bufio .NewReader (& rw .w )
348
+ var resp fasthttp.Response
349
+ if err := resp .Read (br ); err != nil {
350
+ t .Fatalf ("Unexpected error when reading response: %s" , err )
351
+ }
352
+ if ! (resp .Header .StatusCode () == fasthttp .StatusOK && fooHit ) {
353
+ t .Errorf ("Regular routing failed with router chaining." )
354
+ t .FailNow ()
355
+ }
356
+
357
+ rw .r .WriteString ("POST /boo/bar HTTP/1.1\r \n \r \n " )
358
+ go func () {
359
+ ch <- s .ServeConn (rw )
360
+ }()
361
+ select {
362
+ case err := <- ch :
363
+ if err != nil {
364
+ t .Fatalf ("return error %s" , err )
365
+ }
366
+ case <- time .After (100 * time .Millisecond ):
367
+ t .Fatalf ("timeout" )
368
+ }
369
+ if err := resp .Read (br ); err != nil {
370
+ t .Fatalf ("Unexpected error when reading response: %s" , err )
371
+ }
372
+ if ! (resp .Header .StatusCode () == fasthttp .StatusOK && barHit ) {
373
+ t .Errorf ("Chained routing failed with router chaining." )
374
+ t .FailNow ()
375
+ }
376
+
377
+ rw .r .WriteString ("POST /qax HTTP/1.1\r \n \r \n " )
378
+ go func () {
379
+ ch <- s .ServeConn (rw )
380
+ }()
381
+ select {
382
+ case err := <- ch :
383
+ if err != nil {
384
+ t .Fatalf ("return error %s" , err )
385
+ }
386
+ case <- time .After (100 * time .Millisecond ):
387
+ t .Fatalf ("timeout" )
388
+ }
389
+ if err := resp .Read (br ); err != nil {
390
+ t .Fatalf ("Unexpected error when reading response: %s" , err )
391
+ }
392
+ if ! (resp .Header .StatusCode () == fasthttp .StatusNotFound ) {
393
+ t .Errorf ("NotFound behavior failed with router chaining." )
394
+ t .FailNow ()
395
+ }
396
+ }
397
+
312
398
func TestRouterOPTIONS (t * testing.T ) {
313
399
// TODO: because fasthttp is not support OPTIONS method now,
314
400
// these test cases will be used in the future.
0 commit comments