github.com/gogf/gf@v1.16.9/net/ghttp/ghttp_unit_middleware_basic_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package ghttp_test 8 9 import ( 10 "fmt" 11 "github.com/gogf/gf/container/garray" 12 "github.com/gogf/gf/debug/gdebug" 13 "net/http" 14 "testing" 15 "time" 16 17 "github.com/gogf/gf/frame/g" 18 "github.com/gogf/gf/net/ghttp" 19 "github.com/gogf/gf/test/gtest" 20 ) 21 22 func Test_BindMiddleware_Basic1(t *testing.T) { 23 p, _ := ports.PopRand() 24 s := g.Server(p) 25 s.BindHandler("/test/test", func(r *ghttp.Request) { 26 r.Response.Write("test") 27 }) 28 s.BindMiddleware("/test", func(r *ghttp.Request) { 29 r.Response.Write("1") 30 r.Middleware.Next() 31 r.Response.Write("2") 32 }, func(r *ghttp.Request) { 33 r.Response.Write("3") 34 r.Middleware.Next() 35 r.Response.Write("4") 36 }) 37 s.BindMiddleware("/test/:name", func(r *ghttp.Request) { 38 r.Response.Write("5") 39 r.Middleware.Next() 40 r.Response.Write("6") 41 }, func(r *ghttp.Request) { 42 r.Response.Write("7") 43 r.Middleware.Next() 44 r.Response.Write("8") 45 }) 46 s.SetPort(p) 47 s.SetDumpRouterMap(false) 48 s.Start() 49 defer s.Shutdown() 50 51 time.Sleep(100 * time.Millisecond) 52 gtest.C(t, func(t *gtest.T) { 53 client := g.Client() 54 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 55 56 t.Assert(client.GetContent("/"), "Not Found") 57 t.Assert(client.GetContent("/test"), "1342") 58 t.Assert(client.GetContent("/test/test"), "57test86") 59 }) 60 } 61 62 func Test_BindMiddleware_Basic2(t *testing.T) { 63 p, _ := ports.PopRand() 64 s := g.Server(p) 65 s.BindHandler("/test/test", func(r *ghttp.Request) { 66 r.Response.Write("test") 67 }) 68 s.BindMiddleware("/*", func(r *ghttp.Request) { 69 r.Response.Write("1") 70 r.Middleware.Next() 71 r.Response.Write("2") 72 }) 73 s.SetPort(p) 74 s.SetDumpRouterMap(false) 75 s.Start() 76 defer s.Shutdown() 77 78 time.Sleep(100 * time.Millisecond) 79 gtest.C(t, func(t *gtest.T) { 80 client := g.Client() 81 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 82 83 t.Assert(client.GetContent("/"), "12") 84 t.Assert(client.GetContent("/test"), "12") 85 t.Assert(client.GetContent("/test/test"), "1test2") 86 }) 87 } 88 89 func Test_BindMiddleware_Basic3(t *testing.T) { 90 p, _ := ports.PopRand() 91 s := g.Server(p) 92 s.BindHandler("/test/test", func(r *ghttp.Request) { 93 r.Response.Write("test") 94 }) 95 s.BindMiddleware("PUT:/test", func(r *ghttp.Request) { 96 r.Response.Write("1") 97 r.Middleware.Next() 98 r.Response.Write("2") 99 }, func(r *ghttp.Request) { 100 r.Response.Write("3") 101 r.Middleware.Next() 102 r.Response.Write("4") 103 }) 104 s.BindMiddleware("POST:/test/:name", func(r *ghttp.Request) { 105 r.Response.Write("5") 106 r.Middleware.Next() 107 r.Response.Write("6") 108 }, func(r *ghttp.Request) { 109 r.Response.Write("7") 110 r.Middleware.Next() 111 r.Response.Write("8") 112 }) 113 s.SetPort(p) 114 s.SetDumpRouterMap(false) 115 s.Start() 116 defer s.Shutdown() 117 118 time.Sleep(100 * time.Millisecond) 119 gtest.C(t, func(t *gtest.T) { 120 client := g.Client() 121 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 122 123 t.Assert(client.GetContent("/"), "Not Found") 124 t.Assert(client.GetContent("/test"), "Not Found") 125 t.Assert(client.PutContent("/test"), "1342") 126 t.Assert(client.PostContent("/test"), "Not Found") 127 t.Assert(client.GetContent("/test/test"), "test") 128 t.Assert(client.PutContent("/test/test"), "test") 129 t.Assert(client.PostContent("/test/test"), "57test86") 130 }) 131 } 132 133 func Test_BindMiddleware_Basic4(t *testing.T) { 134 p, _ := ports.PopRand() 135 s := g.Server(p) 136 s.Group("/", func(group *ghttp.RouterGroup) { 137 group.Middleware(func(r *ghttp.Request) { 138 r.Response.Write("1") 139 r.Middleware.Next() 140 }) 141 group.Middleware(func(r *ghttp.Request) { 142 r.Middleware.Next() 143 r.Response.Write("2") 144 }) 145 group.ALL("/test", func(r *ghttp.Request) { 146 r.Response.Write("test") 147 }) 148 }) 149 s.SetPort(p) 150 s.SetDumpRouterMap(false) 151 s.Start() 152 defer s.Shutdown() 153 154 time.Sleep(100 * time.Millisecond) 155 gtest.C(t, func(t *gtest.T) { 156 client := g.Client() 157 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 158 159 t.Assert(client.GetContent("/"), "Not Found") 160 t.Assert(client.GetContent("/test"), "1test2") 161 t.Assert(client.PutContent("/test/none"), "Not Found") 162 }) 163 } 164 165 func Test_Middleware_With_Static(t *testing.T) { 166 p, _ := ports.PopRand() 167 s := g.Server(p) 168 s.Group("/", func(group *ghttp.RouterGroup) { 169 group.Middleware(func(r *ghttp.Request) { 170 r.Response.Write("1") 171 r.Middleware.Next() 172 r.Response.Write("2") 173 }) 174 group.ALL("/user/list", func(r *ghttp.Request) { 175 r.Response.Write("list") 176 }) 177 }) 178 s.SetPort(p) 179 s.SetDumpRouterMap(false) 180 s.SetServerRoot(gdebug.TestDataPath("static1")) 181 s.Start() 182 defer s.Shutdown() 183 time.Sleep(100 * time.Millisecond) 184 gtest.C(t, func(t *gtest.T) { 185 client := g.Client() 186 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 187 188 t.Assert(client.GetContent("/"), "index") 189 t.Assert(client.GetContent("/test.html"), "test") 190 t.Assert(client.GetContent("/none"), "Not Found") 191 t.Assert(client.GetContent("/user/list"), "1list2") 192 }) 193 } 194 195 func Test_Middleware_Status(t *testing.T) { 196 p, _ := ports.PopRand() 197 s := g.Server(p) 198 s.Group("/", func(group *ghttp.RouterGroup) { 199 group.Middleware(func(r *ghttp.Request) { 200 r.Middleware.Next() 201 r.Response.WriteOver(r.Response.Status) 202 }) 203 group.ALL("/user/list", func(r *ghttp.Request) { 204 r.Response.Write("list") 205 }) 206 }) 207 s.SetPort(p) 208 s.SetDumpRouterMap(false) 209 s.Start() 210 defer s.Shutdown() 211 time.Sleep(100 * time.Millisecond) 212 gtest.C(t, func(t *gtest.T) { 213 client := g.Client() 214 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 215 216 t.Assert(client.GetContent("/"), "Not Found") 217 t.Assert(client.GetContent("/user/list"), "200") 218 219 resp, err := client.Get("/") 220 defer resp.Close() 221 t.Assert(err, nil) 222 t.Assert(resp.StatusCode, 404) 223 }) 224 } 225 226 func Test_Middleware_Hook_With_Static(t *testing.T) { 227 p, _ := ports.PopRand() 228 s := g.Server(p) 229 a := garray.New(true) 230 s.Group("/", func(group *ghttp.RouterGroup) { 231 group.Hook("/*", ghttp.HookBeforeServe, func(r *ghttp.Request) { 232 a.Append(1) 233 fmt.Println("HookBeforeServe") 234 r.Response.Write("a") 235 }) 236 group.Hook("/*", ghttp.HookAfterServe, func(r *ghttp.Request) { 237 a.Append(1) 238 fmt.Println("HookAfterServe") 239 r.Response.Write("b") 240 }) 241 group.Middleware(func(r *ghttp.Request) { 242 r.Response.Write("1") 243 r.Middleware.Next() 244 r.Response.Write("2") 245 }) 246 group.ALL("/user/list", func(r *ghttp.Request) { 247 r.Response.Write("list") 248 }) 249 }) 250 s.SetPort(p) 251 s.SetDumpRouterMap(false) 252 s.SetServerRoot(gdebug.TestDataPath("static1")) 253 s.Start() 254 defer s.Shutdown() 255 time.Sleep(100 * time.Millisecond) 256 gtest.C(t, func(t *gtest.T) { 257 client := g.Client() 258 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 259 260 // The length assert sometimes fails, so I added time.Sleep here for debug purpose. 261 262 t.Assert(client.GetContent("/"), "index") 263 time.Sleep(100 * time.Millisecond) 264 t.Assert(a.Len(), 2) 265 266 t.Assert(client.GetContent("/test.html"), "test") 267 time.Sleep(100 * time.Millisecond) 268 t.Assert(a.Len(), 4) 269 270 t.Assert(client.GetContent("/none"), "ab") 271 time.Sleep(100 * time.Millisecond) 272 t.Assert(a.Len(), 6) 273 274 t.Assert(client.GetContent("/user/list"), "a1list2b") 275 time.Sleep(100 * time.Millisecond) 276 t.Assert(a.Len(), 8) 277 }) 278 } 279 280 func Test_BindMiddleware_Status(t *testing.T) { 281 p, _ := ports.PopRand() 282 s := g.Server(p) 283 s.BindHandler("/test/test", func(r *ghttp.Request) { 284 r.Response.Write("test") 285 }) 286 s.BindMiddleware("/test/*any", func(r *ghttp.Request) { 287 r.Middleware.Next() 288 }) 289 s.SetPort(p) 290 s.SetDumpRouterMap(false) 291 s.Start() 292 defer s.Shutdown() 293 294 time.Sleep(100 * time.Millisecond) 295 gtest.C(t, func(t *gtest.T) { 296 client := g.Client() 297 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 298 299 t.Assert(client.GetContent("/"), "Not Found") 300 t.Assert(client.GetContent("/test"), "Not Found") 301 t.Assert(client.GetContent("/test/test"), "test") 302 t.Assert(client.GetContent("/test/test/test"), "Not Found") 303 }) 304 } 305 306 func Test_BindMiddlewareDefault_Basic1(t *testing.T) { 307 p, _ := ports.PopRand() 308 s := g.Server(p) 309 s.BindHandler("/test/test", func(r *ghttp.Request) { 310 r.Response.Write("test") 311 }) 312 s.BindMiddlewareDefault(func(r *ghttp.Request) { 313 r.Response.Write("1") 314 r.Middleware.Next() 315 r.Response.Write("2") 316 }) 317 s.BindMiddlewareDefault(func(r *ghttp.Request) { 318 r.Response.Write("3") 319 r.Middleware.Next() 320 r.Response.Write("4") 321 }) 322 s.SetPort(p) 323 s.SetDumpRouterMap(false) 324 s.Start() 325 defer s.Shutdown() 326 327 time.Sleep(100 * time.Millisecond) 328 gtest.C(t, func(t *gtest.T) { 329 client := g.Client() 330 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 331 332 t.Assert(client.GetContent("/"), "1342") 333 t.Assert(client.GetContent("/test/test"), "13test42") 334 }) 335 } 336 337 func Test_BindMiddlewareDefault_Basic2(t *testing.T) { 338 p, _ := ports.PopRand() 339 s := g.Server(p) 340 s.BindHandler("PUT:/test/test", func(r *ghttp.Request) { 341 r.Response.Write("test") 342 }) 343 s.BindMiddlewareDefault(func(r *ghttp.Request) { 344 r.Response.Write("1") 345 r.Middleware.Next() 346 r.Response.Write("2") 347 }) 348 s.BindMiddlewareDefault(func(r *ghttp.Request) { 349 r.Response.Write("3") 350 r.Middleware.Next() 351 r.Response.Write("4") 352 }) 353 s.SetPort(p) 354 s.SetDumpRouterMap(false) 355 s.Start() 356 defer s.Shutdown() 357 358 time.Sleep(100 * time.Millisecond) 359 gtest.C(t, func(t *gtest.T) { 360 client := g.Client() 361 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 362 363 t.Assert(client.GetContent("/"), "1342") 364 t.Assert(client.PutContent("/"), "1342") 365 t.Assert(client.GetContent("/test/test"), "1342") 366 t.Assert(client.PutContent("/test/test"), "13test42") 367 }) 368 } 369 370 func Test_BindMiddlewareDefault_Basic3(t *testing.T) { 371 p, _ := ports.PopRand() 372 s := g.Server(p) 373 s.BindHandler("/test/test", func(r *ghttp.Request) { 374 r.Response.Write("test") 375 }) 376 s.BindMiddlewareDefault(func(r *ghttp.Request) { 377 r.Response.Write("1") 378 r.Middleware.Next() 379 }) 380 s.BindMiddlewareDefault(func(r *ghttp.Request) { 381 r.Middleware.Next() 382 r.Response.Write("2") 383 }) 384 s.SetPort(p) 385 s.SetDumpRouterMap(false) 386 s.Start() 387 defer s.Shutdown() 388 389 time.Sleep(100 * time.Millisecond) 390 gtest.C(t, func(t *gtest.T) { 391 client := g.Client() 392 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 393 394 t.Assert(client.GetContent("/"), "12") 395 t.Assert(client.GetContent("/test/test"), "1test2") 396 }) 397 } 398 399 func Test_BindMiddlewareDefault_Basic4(t *testing.T) { 400 p, _ := ports.PopRand() 401 s := g.Server(p) 402 s.BindHandler("/test/test", func(r *ghttp.Request) { 403 r.Response.Write("test") 404 }) 405 s.BindMiddlewareDefault(func(r *ghttp.Request) { 406 r.Middleware.Next() 407 r.Response.Write("1") 408 }) 409 s.BindMiddlewareDefault(func(r *ghttp.Request) { 410 r.Response.Write("2") 411 r.Middleware.Next() 412 }) 413 s.SetPort(p) 414 s.SetDumpRouterMap(false) 415 s.Start() 416 defer s.Shutdown() 417 418 time.Sleep(100 * time.Millisecond) 419 gtest.C(t, func(t *gtest.T) { 420 client := g.Client() 421 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 422 423 t.Assert(client.GetContent("/"), "21") 424 t.Assert(client.GetContent("/test/test"), "2test1") 425 }) 426 } 427 428 func Test_BindMiddlewareDefault_Basic5(t *testing.T) { 429 p, _ := ports.PopRand() 430 s := g.Server(p) 431 s.BindHandler("/test/test", func(r *ghttp.Request) { 432 r.Response.Write("test") 433 }) 434 s.BindMiddlewareDefault(func(r *ghttp.Request) { 435 r.Response.Write("1") 436 r.Middleware.Next() 437 }) 438 s.BindMiddlewareDefault(func(r *ghttp.Request) { 439 r.Response.Write("2") 440 r.Middleware.Next() 441 }) 442 s.SetPort(p) 443 s.SetDumpRouterMap(false) 444 s.Start() 445 defer s.Shutdown() 446 447 time.Sleep(100 * time.Millisecond) 448 gtest.C(t, func(t *gtest.T) { 449 client := g.Client() 450 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 451 452 t.Assert(client.GetContent("/"), "12") 453 t.Assert(client.GetContent("/test/test"), "12test") 454 }) 455 } 456 457 func Test_BindMiddlewareDefault_Status(t *testing.T) { 458 p, _ := ports.PopRand() 459 s := g.Server(p) 460 s.BindHandler("/test/test", func(r *ghttp.Request) { 461 r.Response.Write("test") 462 }) 463 s.BindMiddlewareDefault(func(r *ghttp.Request) { 464 r.Middleware.Next() 465 }) 466 s.SetPort(p) 467 s.SetDumpRouterMap(false) 468 s.Start() 469 defer s.Shutdown() 470 471 time.Sleep(100 * time.Millisecond) 472 gtest.C(t, func(t *gtest.T) { 473 client := g.Client() 474 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 475 476 t.Assert(client.GetContent("/"), "Not Found") 477 t.Assert(client.GetContent("/test/test"), "test") 478 }) 479 } 480 481 type ObjectMiddleware struct{} 482 483 func (o *ObjectMiddleware) Init(r *ghttp.Request) { 484 r.Response.Write("100") 485 } 486 487 func (o *ObjectMiddleware) Shut(r *ghttp.Request) { 488 r.Response.Write("200") 489 } 490 491 func (o *ObjectMiddleware) Index(r *ghttp.Request) { 492 r.Response.Write("Object Index") 493 } 494 495 func (o *ObjectMiddleware) Show(r *ghttp.Request) { 496 r.Response.Write("Object Show") 497 } 498 499 func (o *ObjectMiddleware) Info(r *ghttp.Request) { 500 r.Response.Write("Object Info") 501 } 502 503 func Test_BindMiddlewareDefault_Basic6(t *testing.T) { 504 p, _ := ports.PopRand() 505 s := g.Server(p) 506 s.BindObject("/", new(ObjectMiddleware)) 507 s.BindMiddlewareDefault(func(r *ghttp.Request) { 508 r.Response.Write("1") 509 r.Middleware.Next() 510 r.Response.Write("2") 511 }) 512 s.BindMiddlewareDefault(func(r *ghttp.Request) { 513 r.Response.Write("3") 514 r.Middleware.Next() 515 r.Response.Write("4") 516 }) 517 s.SetPort(p) 518 s.SetDumpRouterMap(false) 519 s.Start() 520 defer s.Shutdown() 521 522 time.Sleep(100 * time.Millisecond) 523 gtest.C(t, func(t *gtest.T) { 524 client := g.Client() 525 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 526 527 t.Assert(client.GetContent("/"), "13100Object Index20042") 528 t.Assert(client.GetContent("/init"), "1342") 529 t.Assert(client.GetContent("/shut"), "1342") 530 t.Assert(client.GetContent("/index"), "13100Object Index20042") 531 t.Assert(client.GetContent("/show"), "13100Object Show20042") 532 t.Assert(client.GetContent("/none-exist"), "1342") 533 }) 534 } 535 536 func Test_Hook_Middleware_Basic1(t *testing.T) { 537 p, _ := ports.PopRand() 538 s := g.Server(p) 539 s.BindHandler("/test/test", func(r *ghttp.Request) { 540 r.Response.Write("test") 541 }) 542 s.BindHookHandler("/*", ghttp.HookBeforeServe, func(r *ghttp.Request) { 543 r.Response.Write("a") 544 }) 545 s.BindHookHandler("/*", ghttp.HookAfterServe, func(r *ghttp.Request) { 546 r.Response.Write("b") 547 }) 548 s.BindHookHandler("/*", ghttp.HookBeforeServe, func(r *ghttp.Request) { 549 r.Response.Write("c") 550 }) 551 s.BindHookHandler("/*", ghttp.HookAfterServe, func(r *ghttp.Request) { 552 r.Response.Write("d") 553 }) 554 s.BindMiddlewareDefault(func(r *ghttp.Request) { 555 r.Response.Write("1") 556 r.Middleware.Next() 557 r.Response.Write("2") 558 }) 559 s.BindMiddlewareDefault(func(r *ghttp.Request) { 560 r.Response.Write("3") 561 r.Middleware.Next() 562 r.Response.Write("4") 563 }) 564 s.SetPort(p) 565 s.SetDumpRouterMap(false) 566 s.Start() 567 defer s.Shutdown() 568 569 time.Sleep(100 * time.Millisecond) 570 gtest.C(t, func(t *gtest.T) { 571 client := g.Client() 572 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 573 574 t.Assert(client.GetContent("/"), "ac1342bd") 575 t.Assert(client.GetContent("/test/test"), "ac13test42bd") 576 }) 577 } 578 579 func MiddlewareAuth(r *ghttp.Request) { 580 token := r.Get("token") 581 if token == "123456" { 582 r.Middleware.Next() 583 } else { 584 r.Response.WriteStatus(http.StatusForbidden) 585 } 586 } 587 588 func MiddlewareCORS(r *ghttp.Request) { 589 r.Response.CORSDefault() 590 r.Middleware.Next() 591 } 592 593 func Test_Middleware_CORSAndAuth(t *testing.T) { 594 p, _ := ports.PopRand() 595 s := g.Server(p) 596 s.Use(MiddlewareCORS) 597 s.Group("/api.v2", func(group *ghttp.RouterGroup) { 598 group.Middleware(MiddlewareAuth) 599 group.POST("/user/list", func(r *ghttp.Request) { 600 r.Response.Write("list") 601 }) 602 }) 603 s.SetPort(p) 604 s.SetDumpRouterMap(false) 605 s.Start() 606 defer s.Shutdown() 607 time.Sleep(100 * time.Millisecond) 608 gtest.C(t, func(t *gtest.T) { 609 client := g.Client() 610 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 611 // Common Checks. 612 t.Assert(client.GetContent("/"), "Not Found") 613 t.Assert(client.GetContent("/api.v2"), "Not Found") 614 // Auth Checks. 615 t.Assert(client.PostContent("/api.v2/user/list"), "Forbidden") 616 t.Assert(client.PostContent("/api.v2/user/list", "token=123456"), "list") 617 // CORS Checks. 618 resp, err := client.Post("/api.v2/user/list", "token=123456") 619 t.Assert(err, nil) 620 t.Assert(len(resp.Header["Access-Control-Allow-Headers"]), 1) 621 t.Assert(resp.Header["Access-Control-Allow-Headers"][0], "Origin,Content-Type,Accept,User-Agent,Cookie,Authorization,X-Auth-Token,X-Requested-With") 622 t.Assert(resp.Header["Access-Control-Allow-Methods"][0], "GET,PUT,POST,DELETE,PATCH,HEAD,CONNECT,OPTIONS,TRACE") 623 t.Assert(resp.Header["Access-Control-Allow-Origin"][0], "*") 624 t.Assert(resp.Header["Access-Control-Max-Age"][0], "3628800") 625 resp.Close() 626 }) 627 } 628 629 func MiddlewareScope1(r *ghttp.Request) { 630 r.Response.Write("a") 631 r.Middleware.Next() 632 r.Response.Write("b") 633 } 634 635 func MiddlewareScope2(r *ghttp.Request) { 636 r.Response.Write("c") 637 r.Middleware.Next() 638 r.Response.Write("d") 639 } 640 641 func MiddlewareScope3(r *ghttp.Request) { 642 r.Response.Write("e") 643 r.Middleware.Next() 644 r.Response.Write("f") 645 } 646 647 func Test_Middleware_Scope(t *testing.T) { 648 p, _ := ports.PopRand() 649 s := g.Server(p) 650 s.Group("/", func(group *ghttp.RouterGroup) { 651 group.Middleware(MiddlewareScope1) 652 group.ALL("/scope1", func(r *ghttp.Request) { 653 r.Response.Write("1") 654 }) 655 group.Group("/", func(group *ghttp.RouterGroup) { 656 group.Middleware(MiddlewareScope2) 657 group.ALL("/scope2", func(r *ghttp.Request) { 658 r.Response.Write("2") 659 }) 660 }) 661 group.Group("/", func(group *ghttp.RouterGroup) { 662 group.Middleware(MiddlewareScope3) 663 group.ALL("/scope3", func(r *ghttp.Request) { 664 r.Response.Write("3") 665 }) 666 }) 667 }) 668 s.SetPort(p) 669 s.SetDumpRouterMap(false) 670 s.Start() 671 defer s.Shutdown() 672 time.Sleep(100 * time.Millisecond) 673 gtest.C(t, func(t *gtest.T) { 674 client := g.Client() 675 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 676 677 t.Assert(client.GetContent("/"), "Not Found") 678 t.Assert(client.GetContent("/scope1"), "a1b") 679 t.Assert(client.GetContent("/scope2"), "ac2db") 680 t.Assert(client.GetContent("/scope3"), "ae3fb") 681 }) 682 } 683 684 func Test_Middleware_Panic(t *testing.T) { 685 p, _ := ports.PopRand() 686 s := g.Server(p) 687 i := 0 688 s.Group("/", func(group *ghttp.RouterGroup) { 689 group.Group("/", func(group *ghttp.RouterGroup) { 690 group.Middleware(func(r *ghttp.Request) { 691 i++ 692 panic("error") 693 r.Middleware.Next() 694 }, func(r *ghttp.Request) { 695 i++ 696 r.Middleware.Next() 697 }) 698 group.ALL("/", func(r *ghttp.Request) { 699 r.Response.Write(i) 700 }) 701 }) 702 }) 703 s.SetPort(p) 704 s.SetDumpRouterMap(false) 705 s.Start() 706 defer s.Shutdown() 707 time.Sleep(100 * time.Millisecond) 708 gtest.C(t, func(t *gtest.T) { 709 client := g.Client() 710 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 711 712 t.Assert(client.GetContent("/"), "error") 713 }) 714 }