github.com/gogf/gf@v1.16.9/net/ghttp/ghttp_unit_router_domain_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/internal/intlog" 12 "testing" 13 "time" 14 15 "github.com/gogf/gf/frame/g" 16 "github.com/gogf/gf/net/ghttp" 17 "github.com/gogf/gf/test/gtest" 18 ) 19 20 func Test_Router_DomainBasic(t *testing.T) { 21 p, _ := ports.PopRand() 22 s := g.Server(p) 23 d := s.Domain("localhost, local") 24 d.BindHandler("/:name", func(r *ghttp.Request) { 25 r.Response.Write("/:name") 26 }) 27 d.BindHandler("/:name/update", func(r *ghttp.Request) { 28 r.Response.Write(r.Get("name")) 29 }) 30 d.BindHandler("/:name/:action", func(r *ghttp.Request) { 31 r.Response.Write(r.Get("action")) 32 }) 33 d.BindHandler("/:name/*any", func(r *ghttp.Request) { 34 r.Response.Write(r.Get("any")) 35 }) 36 d.BindHandler("/user/list/{field}.html", func(r *ghttp.Request) { 37 r.Response.Write(r.Get("field")) 38 }) 39 s.SetPort(p) 40 s.SetDumpRouterMap(false) 41 s.Start() 42 defer s.Shutdown() 43 44 time.Sleep(100 * time.Millisecond) 45 gtest.C(t, func(t *gtest.T) { 46 client := g.Client() 47 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 48 t.Assert(client.GetContent("/john"), "Not Found") 49 t.Assert(client.GetContent("/john/update"), "Not Found") 50 t.Assert(client.GetContent("/john/edit"), "Not Found") 51 t.Assert(client.GetContent("/user/list/100.html"), "Not Found") 52 }) 53 gtest.C(t, func(t *gtest.T) { 54 client := g.Client() 55 client.SetPrefix(fmt.Sprintf("http://localhost:%d", p)) 56 t.Assert(client.GetContent("/john"), "") 57 t.Assert(client.GetContent("/john/update"), "john") 58 t.Assert(client.GetContent("/john/edit"), "edit") 59 t.Assert(client.GetContent("/user/list/100.html"), "100") 60 }) 61 gtest.C(t, func(t *gtest.T) { 62 client := g.Client() 63 client.SetPrefix(fmt.Sprintf("http://local:%d", p)) 64 t.Assert(client.GetContent("/john"), "") 65 t.Assert(client.GetContent("/john/update"), "john") 66 t.Assert(client.GetContent("/john/edit"), "edit") 67 t.Assert(client.GetContent("/user/list/100.html"), "100") 68 }) 69 } 70 71 func Test_Router_DomainMethod(t *testing.T) { 72 p, _ := ports.PopRand() 73 s := g.Server(p) 74 d := s.Domain("localhost, local") 75 d.BindHandler("GET:/get", func(r *ghttp.Request) { 76 77 }) 78 d.BindHandler("POST:/post", func(r *ghttp.Request) { 79 80 }) 81 s.SetPort(p) 82 s.SetDumpRouterMap(false) 83 s.Start() 84 defer s.Shutdown() 85 86 time.Sleep(100 * time.Millisecond) 87 gtest.C(t, func(t *gtest.T) { 88 client := g.Client() 89 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 90 91 resp1, err := client.Get("/get") 92 defer resp1.Close() 93 t.Assert(err, nil) 94 t.Assert(resp1.StatusCode, 404) 95 96 resp2, err := client.Post("/get") 97 defer resp2.Close() 98 t.Assert(err, nil) 99 t.Assert(resp2.StatusCode, 404) 100 101 resp3, err := client.Get("/post") 102 defer resp3.Close() 103 t.Assert(err, nil) 104 t.Assert(resp3.StatusCode, 404) 105 106 resp4, err := client.Post("/post") 107 defer resp4.Close() 108 t.Assert(err, nil) 109 t.Assert(resp4.StatusCode, 404) 110 }) 111 112 gtest.C(t, func(t *gtest.T) { 113 client := g.Client() 114 client.SetPrefix(fmt.Sprintf("http://localhost:%d", p)) 115 116 resp1, err := client.Get("/get") 117 defer resp1.Close() 118 t.Assert(err, nil) 119 t.Assert(resp1.StatusCode, 200) 120 121 resp2, err := client.Post("/get") 122 defer resp2.Close() 123 t.Assert(err, nil) 124 t.Assert(resp2.StatusCode, 404) 125 126 resp3, err := client.Get("/post") 127 defer resp3.Close() 128 t.Assert(err, nil) 129 t.Assert(resp3.StatusCode, 404) 130 131 resp4, err := client.Post("/post") 132 defer resp4.Close() 133 t.Assert(err, nil) 134 t.Assert(resp4.StatusCode, 200) 135 }) 136 137 gtest.C(t, func(t *gtest.T) { 138 client := g.Client() 139 client.SetPrefix(fmt.Sprintf("http://local:%d", p)) 140 141 resp1, err := client.Get("/get") 142 defer resp1.Close() 143 t.Assert(err, nil) 144 t.Assert(resp1.StatusCode, 200) 145 146 resp2, err := client.Post("/get") 147 defer resp2.Close() 148 t.Assert(err, nil) 149 t.Assert(resp2.StatusCode, 404) 150 151 resp3, err := client.Get("/post") 152 defer resp3.Close() 153 t.Assert(err, nil) 154 t.Assert(resp3.StatusCode, 404) 155 156 resp4, err := client.Post("/post") 157 defer resp4.Close() 158 t.Assert(err, nil) 159 t.Assert(resp4.StatusCode, 200) 160 }) 161 } 162 163 func Test_Router_DomainStatus(t *testing.T) { 164 p, _ := ports.PopRand() 165 s := g.Server(p) 166 d := s.Domain("localhost, local") 167 d.BindHandler("/200", func(r *ghttp.Request) { 168 r.Response.WriteStatus(200) 169 }) 170 d.BindHandler("/300", func(r *ghttp.Request) { 171 r.Response.WriteStatus(300) 172 }) 173 d.BindHandler("/400", func(r *ghttp.Request) { 174 r.Response.WriteStatus(400) 175 }) 176 d.BindHandler("/500", func(r *ghttp.Request) { 177 r.Response.WriteStatus(500) 178 }) 179 s.SetPort(p) 180 s.SetDumpRouterMap(false) 181 s.Start() 182 defer s.Shutdown() 183 184 time.Sleep(100 * time.Millisecond) 185 gtest.C(t, func(t *gtest.T) { 186 client := g.Client() 187 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 188 189 resp1, err := client.Get("/200") 190 defer resp1.Close() 191 t.Assert(err, nil) 192 t.Assert(resp1.StatusCode, 404) 193 194 resp2, err := client.Get("/300") 195 defer resp2.Close() 196 t.Assert(err, nil) 197 t.Assert(resp2.StatusCode, 404) 198 199 resp3, err := client.Get("/400") 200 defer resp3.Close() 201 t.Assert(err, nil) 202 t.Assert(resp3.StatusCode, 404) 203 204 resp4, err := client.Get("/500") 205 defer resp4.Close() 206 t.Assert(err, nil) 207 t.Assert(resp4.StatusCode, 404) 208 }) 209 gtest.C(t, func(t *gtest.T) { 210 client := g.Client() 211 client.SetPrefix(fmt.Sprintf("http://localhost:%d", p)) 212 213 resp1, err := client.Get("/200") 214 defer resp1.Close() 215 t.Assert(err, nil) 216 t.Assert(resp1.StatusCode, 200) 217 218 resp2, err := client.Get("/300") 219 defer resp2.Close() 220 t.Assert(err, nil) 221 t.Assert(resp2.StatusCode, 300) 222 223 resp3, err := client.Get("/400") 224 defer resp3.Close() 225 t.Assert(err, nil) 226 t.Assert(resp3.StatusCode, 400) 227 228 resp4, err := client.Get("/500") 229 defer resp4.Close() 230 t.Assert(err, nil) 231 t.Assert(resp4.StatusCode, 500) 232 }) 233 gtest.C(t, func(t *gtest.T) { 234 client := g.Client() 235 client.SetPrefix(fmt.Sprintf("http://local:%d", p)) 236 237 resp1, err := client.Get("/200") 238 defer resp1.Close() 239 t.Assert(err, nil) 240 t.Assert(resp1.StatusCode, 200) 241 242 resp2, err := client.Get("/300") 243 defer resp2.Close() 244 t.Assert(err, nil) 245 t.Assert(resp2.StatusCode, 300) 246 247 resp3, err := client.Get("/400") 248 defer resp3.Close() 249 t.Assert(err, nil) 250 t.Assert(resp3.StatusCode, 400) 251 252 resp4, err := client.Get("/500") 253 defer resp4.Close() 254 t.Assert(err, nil) 255 t.Assert(resp4.StatusCode, 500) 256 }) 257 } 258 259 func Test_Router_DomainCustomStatusHandler(t *testing.T) { 260 p, _ := ports.PopRand() 261 s := g.Server(p) 262 d := s.Domain("localhost, local") 263 d.BindHandler("/", func(r *ghttp.Request) { 264 r.Response.Write("hello") 265 }) 266 d.BindStatusHandler(404, func(r *ghttp.Request) { 267 r.Response.Write("404 page") 268 }) 269 s.SetPort(p) 270 s.SetDumpRouterMap(false) 271 s.Start() 272 defer s.Shutdown() 273 274 time.Sleep(100 * time.Millisecond) 275 gtest.C(t, func(t *gtest.T) { 276 client := g.Client() 277 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 278 279 t.Assert(client.GetContent("/"), "Not Found") 280 t.Assert(client.GetContent("/ThisDoesNotExist"), "Not Found") 281 }) 282 gtest.C(t, func(t *gtest.T) { 283 client := g.Client() 284 client.SetPrefix(fmt.Sprintf("http://localhost:%d", p)) 285 286 t.Assert(client.GetContent("/"), "hello") 287 t.Assert(client.GetContent("/ThisDoesNotExist"), "404 page") 288 }) 289 gtest.C(t, func(t *gtest.T) { 290 client := g.Client() 291 client.SetPrefix(fmt.Sprintf("http://local:%d", p)) 292 293 t.Assert(client.GetContent("/"), "hello") 294 t.Assert(client.GetContent("/ThisDoesNotExist"), "404 page") 295 }) 296 } 297 298 func Test_Router_Domain404(t *testing.T) { 299 p, _ := ports.PopRand() 300 s := g.Server(p) 301 d := s.Domain("localhost, local") 302 d.BindHandler("/", func(r *ghttp.Request) { 303 r.Response.Write("hello") 304 }) 305 s.SetPort(p) 306 s.SetDumpRouterMap(false) 307 s.Start() 308 defer s.Shutdown() 309 310 time.Sleep(100 * time.Millisecond) 311 gtest.C(t, func(t *gtest.T) { 312 client := g.Client() 313 client.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 314 315 t.Assert(client.GetContent("/"), "Not Found") 316 }) 317 gtest.C(t, func(t *gtest.T) { 318 client := g.Client() 319 client.SetPrefix(fmt.Sprintf("http://localhost:%d", p)) 320 321 t.Assert(client.GetContent("/"), "hello") 322 }) 323 gtest.C(t, func(t *gtest.T) { 324 client := g.Client() 325 client.SetPrefix(fmt.Sprintf("http://local:%d", p)) 326 327 t.Assert(client.GetContent("/"), "hello") 328 }) 329 } 330 331 func Test_Router_DomainGroup(t *testing.T) { 332 p, _ := ports.PopRand() 333 s := g.Server(p) 334 d := s.Domain("localhost, local") 335 d.Group("/", func(group *ghttp.RouterGroup) { 336 group.Group("/app", func(gApp *ghttp.RouterGroup) { 337 gApp.GET("/{table}/list/{page}.html", func(r *ghttp.Request) { 338 intlog.Print(r.Context(), "/{table}/list/{page}.html") 339 r.Response.Write(r.Get("table"), "&", r.Get("page")) 340 }) 341 gApp.GET("/order/info/{order_id}", func(r *ghttp.Request) { 342 intlog.Print(r.Context(), "/order/info/{order_id}") 343 r.Response.Write(r.Get("order_id")) 344 }) 345 gApp.DELETE("/comment/{id}", func(r *ghttp.Request) { 346 intlog.Print(r.Context(), "/comment/{id}") 347 r.Response.Write(r.Get("id")) 348 }) 349 }) 350 }) 351 s.SetPort(p) 352 s.SetDumpRouterMap(false) 353 s.Start() 354 defer s.Shutdown() 355 356 time.Sleep(100 * time.Millisecond) 357 gtest.C(t, func(t *gtest.T) { 358 client1 := g.Client() 359 client1.SetPrefix(fmt.Sprintf("http://local:%d", p)) 360 361 client2 := g.Client() 362 client2.SetPrefix(fmt.Sprintf("http://127.0.0.1:%d", p)) 363 364 t.Assert(client1.GetContent("/app/t/list/2.html"), "t&2") 365 t.Assert(client2.GetContent("/app/t/list/2.html"), "Not Found") 366 367 t.Assert(client1.GetContent("/app/order/info/2"), "2") 368 t.Assert(client2.GetContent("/app/order/info/2"), "Not Found") 369 370 t.Assert(client1.GetContent("/app/comment/20"), "Not Found") 371 t.Assert(client2.GetContent("/app/comment/20"), "Not Found") 372 373 t.Assert(client1.DeleteContent("/app/comment/20"), "20") 374 t.Assert(client2.DeleteContent("/app/comment/20"), "Not Found") 375 }) 376 }