github.com/gofiber/fiber/v2@v2.47.0/middleware/expvar/expvar_test.go (about)

     1  package expvar
     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_Expvar_Path(t *testing.T) {
    14  	t.Parallel()
    15  	app := fiber.New()
    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_Expvar_Index(t *testing.T) {
    33  	t.Parallel()
    34  	app := fiber.New()
    35  
    36  	app.Use(New())
    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, "/debug/vars", nil))
    43  	utils.AssertEqual(t, nil, err)
    44  	utils.AssertEqual(t, 200, resp.StatusCode)
    45  	utils.AssertEqual(t, fiber.MIMEApplicationJSONCharsetUTF8, resp.Header.Get(fiber.HeaderContentType))
    46  
    47  	b, err := io.ReadAll(resp.Body)
    48  	utils.AssertEqual(t, nil, err)
    49  	utils.AssertEqual(t, true, bytes.Contains(b, []byte("cmdline")))
    50  	utils.AssertEqual(t, true, bytes.Contains(b, []byte("memstat")))
    51  }
    52  
    53  func Test_Expvar_Filter(t *testing.T) {
    54  	t.Parallel()
    55  	app := fiber.New()
    56  
    57  	app.Use(New())
    58  
    59  	app.Get("/", func(c *fiber.Ctx) error {
    60  		return c.SendString("escaped")
    61  	})
    62  
    63  	resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/debug/vars?r=cmd", nil))
    64  	utils.AssertEqual(t, nil, err)
    65  	utils.AssertEqual(t, 200, resp.StatusCode)
    66  	utils.AssertEqual(t, fiber.MIMEApplicationJSONCharsetUTF8, resp.Header.Get(fiber.HeaderContentType))
    67  
    68  	b, err := io.ReadAll(resp.Body)
    69  	utils.AssertEqual(t, nil, err)
    70  	utils.AssertEqual(t, true, bytes.Contains(b, []byte("cmdline")))
    71  	utils.AssertEqual(t, false, bytes.Contains(b, []byte("memstat")))
    72  }
    73  
    74  func Test_Expvar_Other_Path(t *testing.T) {
    75  	t.Parallel()
    76  	app := fiber.New()
    77  
    78  	app.Use(New())
    79  
    80  	app.Get("/", func(c *fiber.Ctx) error {
    81  		return c.SendString("escaped")
    82  	})
    83  
    84  	resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/debug/vars/302", nil))
    85  	utils.AssertEqual(t, nil, err)
    86  	utils.AssertEqual(t, 302, resp.StatusCode)
    87  }
    88  
    89  // go test -run Test_Expvar_Next
    90  func Test_Expvar_Next(t *testing.T) {
    91  	t.Parallel()
    92  	app := fiber.New()
    93  
    94  	app.Use(New(Config{
    95  		Next: func(_ *fiber.Ctx) bool {
    96  			return true
    97  		},
    98  	}))
    99  
   100  	resp, err := app.Test(httptest.NewRequest(fiber.MethodGet, "/debug/vars", nil))
   101  	utils.AssertEqual(t, nil, err)
   102  	utils.AssertEqual(t, 404, resp.StatusCode)
   103  }