github.com/gofiber/fiber/v2@v2.47.0/hooks_test.go (about) 1 package fiber 2 3 import ( 4 "errors" 5 "fmt" 6 "testing" 7 "time" 8 9 "github.com/gofiber/fiber/v2/utils" 10 11 "github.com/valyala/bytebufferpool" 12 ) 13 14 func testSimpleHandler(c *Ctx) error { 15 return c.SendString("simple") 16 } 17 18 func Test_Hook_OnRoute(t *testing.T) { 19 t.Parallel() 20 app := New() 21 22 app.Hooks().OnRoute(func(r Route) error { 23 utils.AssertEqual(t, "", r.Name) 24 25 return nil 26 }) 27 28 app.Get("/", testSimpleHandler).Name("x") 29 30 subApp := New() 31 subApp.Get("/test", testSimpleHandler) 32 33 app.Mount("/sub", subApp) 34 } 35 36 func Test_Hook_OnRoute_Mount(t *testing.T) { 37 t.Parallel() 38 app := New() 39 subApp := New() 40 app.Mount("/sub", subApp) 41 42 subApp.Hooks().OnRoute(func(r Route) error { 43 utils.AssertEqual(t, "/sub/test", r.Path) 44 45 return nil 46 }) 47 48 app.Hooks().OnRoute(func(r Route) error { 49 utils.AssertEqual(t, "/", r.Path) 50 51 return nil 52 }) 53 54 app.Get("/", testSimpleHandler).Name("x") 55 subApp.Get("/test", testSimpleHandler) 56 } 57 58 func Test_Hook_OnName(t *testing.T) { 59 t.Parallel() 60 app := New() 61 62 buf := bytebufferpool.Get() 63 defer bytebufferpool.Put(buf) 64 65 app.Hooks().OnName(func(r Route) error { 66 _, err := buf.WriteString(r.Name) 67 utils.AssertEqual(t, nil, err) 68 69 return nil 70 }) 71 72 app.Get("/", testSimpleHandler).Name("index") 73 74 subApp := New() 75 subApp.Get("/test", testSimpleHandler) 76 subApp.Get("/test2", testSimpleHandler) 77 78 app.Mount("/sub", subApp) 79 80 utils.AssertEqual(t, "index", buf.String()) 81 } 82 83 func Test_Hook_OnName_Error(t *testing.T) { 84 t.Parallel() 85 app := New() 86 defer func() { 87 if err := recover(); err != nil { 88 utils.AssertEqual(t, "unknown error", fmt.Sprintf("%v", err)) 89 } 90 }() 91 92 app.Hooks().OnName(func(r Route) error { 93 return errors.New("unknown error") 94 }) 95 96 app.Get("/", testSimpleHandler).Name("index") 97 } 98 99 func Test_Hook_OnGroup(t *testing.T) { 100 t.Parallel() 101 app := New() 102 103 buf := bytebufferpool.Get() 104 defer bytebufferpool.Put(buf) 105 106 app.Hooks().OnGroup(func(g Group) error { 107 _, err := buf.WriteString(g.Prefix) 108 utils.AssertEqual(t, nil, err) 109 return nil 110 }) 111 112 grp := app.Group("/x").Name("x.") 113 grp.Group("/a") 114 115 utils.AssertEqual(t, "/x/x/a", buf.String()) 116 } 117 118 func Test_Hook_OnGroup_Mount(t *testing.T) { 119 t.Parallel() 120 app := New() 121 micro := New() 122 micro.Mount("/john", app) 123 124 app.Hooks().OnGroup(func(g Group) error { 125 utils.AssertEqual(t, "/john/v1", g.Prefix) 126 return nil 127 }) 128 129 v1 := app.Group("/v1") 130 v1.Get("/doe", func(c *Ctx) error { 131 return c.SendStatus(StatusOK) 132 }) 133 } 134 135 func Test_Hook_OnGroupName(t *testing.T) { 136 t.Parallel() 137 app := New() 138 139 buf := bytebufferpool.Get() 140 defer bytebufferpool.Put(buf) 141 142 buf2 := bytebufferpool.Get() 143 defer bytebufferpool.Put(buf2) 144 145 app.Hooks().OnGroupName(func(g Group) error { 146 _, err := buf.WriteString(g.name) 147 utils.AssertEqual(t, nil, err) 148 149 return nil 150 }) 151 152 app.Hooks().OnName(func(r Route) error { 153 _, err := buf2.WriteString(r.Name) 154 utils.AssertEqual(t, nil, err) 155 156 return nil 157 }) 158 159 grp := app.Group("/x").Name("x.") 160 grp.Get("/test", testSimpleHandler).Name("test") 161 grp.Get("/test2", testSimpleHandler) 162 163 utils.AssertEqual(t, "x.", buf.String()) 164 utils.AssertEqual(t, "x.test", buf2.String()) 165 } 166 167 func Test_Hook_OnGroupName_Error(t *testing.T) { 168 t.Parallel() 169 app := New() 170 defer func() { 171 if err := recover(); err != nil { 172 utils.AssertEqual(t, "unknown error", fmt.Sprintf("%v", err)) 173 } 174 }() 175 176 app.Hooks().OnGroupName(func(g Group) error { 177 return errors.New("unknown error") 178 }) 179 180 grp := app.Group("/x").Name("x.") 181 grp.Get("/test", testSimpleHandler) 182 } 183 184 func Test_Hook_OnShutdown(t *testing.T) { 185 t.Parallel() 186 app := New() 187 188 buf := bytebufferpool.Get() 189 defer bytebufferpool.Put(buf) 190 191 app.Hooks().OnShutdown(func() error { 192 _, err := buf.WriteString("shutdowning") 193 utils.AssertEqual(t, nil, err) 194 195 return nil 196 }) 197 198 utils.AssertEqual(t, nil, app.Shutdown()) 199 utils.AssertEqual(t, "shutdowning", buf.String()) 200 } 201 202 func Test_Hook_OnListen(t *testing.T) { 203 t.Parallel() 204 app := New(Config{ 205 DisableStartupMessage: true, 206 }) 207 208 buf := bytebufferpool.Get() 209 defer bytebufferpool.Put(buf) 210 211 app.Hooks().OnListen(func() error { 212 _, err := buf.WriteString("ready") 213 utils.AssertEqual(t, nil, err) 214 215 return nil 216 }) 217 218 go func() { 219 time.Sleep(1000 * time.Millisecond) 220 utils.AssertEqual(t, nil, app.Shutdown()) 221 }() 222 utils.AssertEqual(t, nil, app.Listen(":9000")) 223 224 utils.AssertEqual(t, "ready", buf.String()) 225 } 226 227 func Test_Hook_OnListenPrefork(t *testing.T) { 228 t.Parallel() 229 app := New(Config{ 230 DisableStartupMessage: true, 231 Prefork: true, 232 }) 233 234 buf := bytebufferpool.Get() 235 defer bytebufferpool.Put(buf) 236 237 app.Hooks().OnListen(func() error { 238 _, err := buf.WriteString("ready") 239 utils.AssertEqual(t, nil, err) 240 241 return nil 242 }) 243 244 go func() { 245 time.Sleep(1000 * time.Millisecond) 246 utils.AssertEqual(t, nil, app.Shutdown()) 247 }() 248 utils.AssertEqual(t, nil, app.Listen(":9000")) 249 250 utils.AssertEqual(t, "ready", buf.String()) 251 } 252 253 func Test_Hook_OnHook(t *testing.T) { 254 app := New() 255 256 // Reset test var 257 testPreforkMaster = true 258 testOnPrefork = true 259 260 go func() { 261 time.Sleep(1000 * time.Millisecond) 262 utils.AssertEqual(t, nil, app.Shutdown()) 263 }() 264 265 app.Hooks().OnFork(func(pid int) error { 266 utils.AssertEqual(t, 1, pid) 267 return nil 268 }) 269 270 utils.AssertEqual(t, nil, app.prefork(NetworkTCP4, ":3000", nil)) 271 } 272 273 func Test_Hook_OnMount(t *testing.T) { 274 t.Parallel() 275 app := New() 276 app.Get("/", testSimpleHandler).Name("x") 277 278 subApp := New() 279 subApp.Get("/test", testSimpleHandler) 280 281 subApp.Hooks().OnMount(func(parent *App) error { 282 utils.AssertEqual(t, parent.mountFields.mountPath, "") 283 284 return nil 285 }) 286 287 app.Mount("/sub", subApp) 288 }