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  }