github.com/boomhut/fiber/v2@v2.0.0-20230603160335-b65c856e57d3/hooks_test.go (about) 1 package fiber 2 3 import ( 4 "errors" 5 "fmt" 6 "testing" 7 "time" 8 9 "github.com/boomhut/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 app.Hooks().OnGroupName(func(g Group) error { 143 _, err := buf.WriteString(g.name) 144 utils.AssertEqual(t, nil, err) 145 146 return nil 147 }) 148 149 grp := app.Group("/x").Name("x.") 150 grp.Get("/test", testSimpleHandler) 151 grp.Get("/test2", testSimpleHandler) 152 153 utils.AssertEqual(t, "x.", buf.String()) 154 } 155 156 func Test_Hook_OnGroupName_Error(t *testing.T) { 157 t.Parallel() 158 app := New() 159 defer func() { 160 if err := recover(); err != nil { 161 utils.AssertEqual(t, "unknown error", fmt.Sprintf("%v", err)) 162 } 163 }() 164 165 app.Hooks().OnGroupName(func(g Group) error { 166 return errors.New("unknown error") 167 }) 168 169 grp := app.Group("/x").Name("x.") 170 grp.Get("/test", testSimpleHandler) 171 } 172 173 func Test_Hook_OnShutdown(t *testing.T) { 174 t.Parallel() 175 app := New() 176 177 buf := bytebufferpool.Get() 178 defer bytebufferpool.Put(buf) 179 180 app.Hooks().OnShutdown(func() error { 181 _, err := buf.WriteString("shutdowning") 182 utils.AssertEqual(t, nil, err) 183 184 return nil 185 }) 186 187 utils.AssertEqual(t, nil, app.Shutdown()) 188 utils.AssertEqual(t, "shutdowning", buf.String()) 189 } 190 191 func Test_Hook_OnListen(t *testing.T) { 192 t.Parallel() 193 app := New(Config{ 194 DisableStartupMessage: true, 195 }) 196 197 buf := bytebufferpool.Get() 198 defer bytebufferpool.Put(buf) 199 200 app.Hooks().OnListen(func() error { 201 _, err := buf.WriteString("ready") 202 utils.AssertEqual(t, nil, err) 203 204 return nil 205 }) 206 207 go func() { 208 time.Sleep(1000 * time.Millisecond) 209 utils.AssertEqual(t, nil, app.Shutdown()) 210 }() 211 utils.AssertEqual(t, nil, app.Listen(":9000")) 212 213 utils.AssertEqual(t, "ready", buf.String()) 214 } 215 216 func Test_Hook_OnHook(t *testing.T) { 217 app := New() 218 219 // Reset test var 220 testPreforkMaster = true 221 testOnPrefork = true 222 223 go func() { 224 time.Sleep(1000 * time.Millisecond) 225 utils.AssertEqual(t, nil, app.Shutdown()) 226 }() 227 228 app.Hooks().OnFork(func(pid int) error { 229 utils.AssertEqual(t, 1, pid) 230 return nil 231 }) 232 233 utils.AssertEqual(t, nil, app.prefork(NetworkTCP4, ":3000", nil)) 234 } 235 236 func Test_Hook_OnMount(t *testing.T) { 237 t.Parallel() 238 app := New() 239 app.Get("/", testSimpleHandler).Name("x") 240 241 subApp := New() 242 subApp.Get("/test", testSimpleHandler) 243 244 subApp.Hooks().OnMount(func(parent *App) error { 245 utils.AssertEqual(t, parent.mountFields.mountPath, "") 246 247 return nil 248 }) 249 250 app.Mount("/sub", subApp) 251 }