github.com/gofiber/fiber/v2@v2.47.0/middleware/pprof/pprof_test.go (about) 1 package pprof 2 3 import ( 4 "bytes" 5 "io" 6 "net/http/httptest" 7 "testing" 8 9 "github.com/gofiber/fiber/v2" 10 "github.com/gofiber/fiber/v2/utils" 11 ) 12 13 func Test_Non_Pprof_Path(t *testing.T) { 14 t.Parallel() 15 app := fiber.New(fiber.Config{DisableStartupMessage: true}) 16 17 app.Use(New()) 18 19 app.Get("/", func(c *fiber.Ctx) error { 20 return c.SendString("escaped") 21 }) 22 23 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil)) 24 utils.AssertEqual(t, nil, err) 25 utils.AssertEqual(t, 200, resp.StatusCode) 26 27 b, err := io.ReadAll(resp.Body) 28 utils.AssertEqual(t, nil, err) 29 utils.AssertEqual(t, "escaped", string(b)) 30 } 31 32 func Test_Non_Pprof_Path_WithPrefix(t *testing.T) { 33 t.Parallel() 34 app := fiber.New(fiber.Config{DisableStartupMessage: true}) 35 36 app.Use(New(Config{Prefix: "/federated-fiber"})) 37 38 app.Get("/", func(c *fiber.Ctx) error { 39 return c.SendString("escaped") 40 }) 41 42 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil)) 43 utils.AssertEqual(t, nil, err) 44 utils.AssertEqual(t, 200, resp.StatusCode) 45 46 b, err := io.ReadAll(resp.Body) 47 utils.AssertEqual(t, nil, err) 48 utils.AssertEqual(t, "escaped", string(b)) 49 } 50 51 func Test_Pprof_Index(t *testing.T) { 52 t.Parallel() 53 app := fiber.New(fiber.Config{DisableStartupMessage: true}) 54 55 app.Use(New()) 56 57 app.Get("/", func(c *fiber.Ctx) error { 58 return c.SendString("escaped") 59 }) 60 61 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/debug/pprof/", nil)) 62 utils.AssertEqual(t, nil, err) 63 utils.AssertEqual(t, 200, resp.StatusCode) 64 utils.AssertEqual(t, fiber.MIMETextHTMLCharsetUTF8, resp.Header.Get(fiber.HeaderContentType)) 65 66 b, err := io.ReadAll(resp.Body) 67 utils.AssertEqual(t, nil, err) 68 utils.AssertEqual(t, true, bytes.Contains(b, []byte("<title>/debug/pprof/</title>"))) 69 } 70 71 func Test_Pprof_Index_WithPrefix(t *testing.T) { 72 t.Parallel() 73 app := fiber.New(fiber.Config{DisableStartupMessage: true}) 74 75 app.Use(New(Config{Prefix: "/federated-fiber"})) 76 77 app.Get("/", func(c *fiber.Ctx) error { 78 return c.SendString("escaped") 79 }) 80 81 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/federated-fiber/debug/pprof/", nil)) 82 utils.AssertEqual(t, nil, err) 83 utils.AssertEqual(t, 200, resp.StatusCode) 84 utils.AssertEqual(t, fiber.MIMETextHTMLCharsetUTF8, resp.Header.Get(fiber.HeaderContentType)) 85 86 b, err := io.ReadAll(resp.Body) 87 utils.AssertEqual(t, nil, err) 88 utils.AssertEqual(t, true, bytes.Contains(b, []byte("<title>/debug/pprof/</title>"))) 89 } 90 91 func Test_Pprof_Subs(t *testing.T) { 92 t.Parallel() 93 app := fiber.New(fiber.Config{DisableStartupMessage: true}) 94 95 app.Use(New()) 96 97 app.Get("/", func(c *fiber.Ctx) error { 98 return c.SendString("escaped") 99 }) 100 101 subs := []string{ 102 "cmdline", "profile", "symbol", "trace", "allocs", "block", 103 "goroutine", "heap", "mutex", "threadcreate", 104 } 105 106 for _, sub := range subs { 107 t.Run(sub, func(t *testing.T) { 108 t.Parallel() 109 target := "/debug/pprof/" + sub 110 if sub == "profile" { 111 target += "?seconds=1" 112 } 113 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, target, nil), 5000) 114 utils.AssertEqual(t, nil, err) 115 utils.AssertEqual(t, 200, resp.StatusCode) 116 }) 117 } 118 } 119 120 func Test_Pprof_Subs_WithPrefix(t *testing.T) { 121 t.Parallel() 122 app := fiber.New(fiber.Config{DisableStartupMessage: true}) 123 124 app.Use(New(Config{Prefix: "/federated-fiber"})) 125 126 app.Get("/", func(c *fiber.Ctx) error { 127 return c.SendString("escaped") 128 }) 129 130 subs := []string{ 131 "cmdline", "profile", "symbol", "trace", "allocs", "block", 132 "goroutine", "heap", "mutex", "threadcreate", 133 } 134 135 for _, sub := range subs { 136 t.Run(sub, func(t *testing.T) { 137 t.Parallel() 138 target := "/federated-fiber/debug/pprof/" + sub 139 if sub == "profile" { 140 target += "?seconds=1" 141 } 142 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, target, nil), 5000) 143 utils.AssertEqual(t, nil, err) 144 utils.AssertEqual(t, 200, resp.StatusCode) 145 }) 146 } 147 } 148 149 func Test_Pprof_Other(t *testing.T) { 150 t.Parallel() 151 app := fiber.New(fiber.Config{DisableStartupMessage: true}) 152 153 app.Use(New()) 154 155 app.Get("/", func(c *fiber.Ctx) error { 156 return c.SendString("escaped") 157 }) 158 159 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/debug/pprof/302", nil)) 160 utils.AssertEqual(t, nil, err) 161 utils.AssertEqual(t, 302, resp.StatusCode) 162 } 163 164 func Test_Pprof_Other_WithPrefix(t *testing.T) { 165 t.Parallel() 166 app := fiber.New(fiber.Config{DisableStartupMessage: true}) 167 168 app.Use(New(Config{Prefix: "/federated-fiber"})) 169 170 app.Get("/", func(c *fiber.Ctx) error { 171 return c.SendString("escaped") 172 }) 173 174 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/federated-fiber/debug/pprof/302", nil)) 175 utils.AssertEqual(t, nil, err) 176 utils.AssertEqual(t, 302, resp.StatusCode) 177 } 178 179 // go test -run Test_Pprof_Next 180 func Test_Pprof_Next(t *testing.T) { 181 t.Parallel() 182 app := fiber.New() 183 184 app.Use(New(Config{ 185 Next: func(_ *fiber.Ctx) bool { 186 return true 187 }, 188 })) 189 190 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/debug/pprof/", nil)) 191 utils.AssertEqual(t, nil, err) 192 utils.AssertEqual(t, 404, resp.StatusCode) 193 } 194 195 // go test -run Test_Pprof_Next_WithPrefix 196 func Test_Pprof_Next_WithPrefix(t *testing.T) { 197 t.Parallel() 198 app := fiber.New() 199 200 app.Use(New(Config{ 201 Next: func(_ *fiber.Ctx) bool { 202 return true 203 }, 204 Prefix: "/federated-fiber", 205 })) 206 207 resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/federated-fiber/debug/pprof/", nil)) 208 utils.AssertEqual(t, nil, err) 209 utils.AssertEqual(t, 404, resp.StatusCode) 210 }