github.com/gofiber/fiber/v2@v2.47.0/middleware/envvar/envvar_test.go (about) 1 //nolint:bodyclose // Much easier to just ignore memory leaks in tests 2 package envvar 3 4 import ( 5 "context" 6 "encoding/json" 7 "io" 8 "net/http" 9 "os" 10 "testing" 11 12 "github.com/gofiber/fiber/v2" 13 "github.com/gofiber/fiber/v2/utils" 14 ) 15 16 func TestEnvVarStructWithExportVarsExcludeVars(t *testing.T) { 17 err := os.Setenv("testKey", "testEnvValue") 18 utils.AssertEqual(t, nil, err) 19 err = os.Setenv("anotherEnvKey", "anotherEnvVal") 20 utils.AssertEqual(t, nil, err) 21 err = os.Setenv("excludeKey", "excludeEnvValue") 22 utils.AssertEqual(t, nil, err) 23 defer func() { 24 err := os.Unsetenv("testKey") 25 utils.AssertEqual(t, nil, err) 26 err = os.Unsetenv("anotherEnvKey") 27 utils.AssertEqual(t, nil, err) 28 err = os.Unsetenv("excludeKey") 29 utils.AssertEqual(t, nil, err) 30 }() 31 32 vars := newEnvVar(Config{ 33 ExportVars: map[string]string{"testKey": "", "testDefaultKey": "testDefaultVal"}, 34 ExcludeVars: map[string]string{"excludeKey": ""}, 35 }) 36 37 utils.AssertEqual(t, vars.Vars["testKey"], "testEnvValue") 38 utils.AssertEqual(t, vars.Vars["testDefaultKey"], "testDefaultVal") 39 utils.AssertEqual(t, vars.Vars["excludeKey"], "") 40 utils.AssertEqual(t, vars.Vars["anotherEnvKey"], "") 41 } 42 43 func TestEnvVarHandler(t *testing.T) { 44 err := os.Setenv("testKey", "testVal") 45 utils.AssertEqual(t, nil, err) 46 defer func() { 47 err := os.Unsetenv("testKey") 48 utils.AssertEqual(t, nil, err) 49 }() 50 51 expectedEnvVarResponse, err := json.Marshal( 52 struct { 53 Vars map[string]string `json:"vars"` 54 }{ 55 map[string]string{"testKey": "testVal"}, 56 }) 57 utils.AssertEqual(t, nil, err) 58 59 app := fiber.New() 60 app.Use("/envvars", New(Config{ 61 ExportVars: map[string]string{"testKey": ""}, 62 })) 63 64 req, err := http.NewRequestWithContext(context.Background(), fiber.MethodGet, "http://localhost/envvars", nil) 65 utils.AssertEqual(t, nil, err) 66 resp, err := app.Test(req) 67 utils.AssertEqual(t, nil, err) 68 69 respBody, err := io.ReadAll(resp.Body) 70 utils.AssertEqual(t, nil, err) 71 72 utils.AssertEqual(t, expectedEnvVarResponse, respBody) 73 } 74 75 func TestEnvVarHandlerNotMatched(t *testing.T) { 76 app := fiber.New() 77 app.Use("/envvars", New(Config{ 78 ExportVars: map[string]string{"testKey": ""}, 79 })) 80 81 app.Get("/another-path", func(ctx *fiber.Ctx) error { 82 utils.AssertEqual(t, nil, ctx.SendString("OK")) 83 return nil 84 }) 85 86 req, err := http.NewRequestWithContext(context.Background(), fiber.MethodGet, "http://localhost/another-path", nil) 87 utils.AssertEqual(t, nil, err) 88 resp, err := app.Test(req) 89 utils.AssertEqual(t, nil, err) 90 91 respBody, err := io.ReadAll(resp.Body) 92 utils.AssertEqual(t, nil, err) 93 94 utils.AssertEqual(t, []byte("OK"), respBody) 95 } 96 97 func TestEnvVarHandlerDefaultConfig(t *testing.T) { 98 err := os.Setenv("testEnvKey", "testEnvVal") 99 utils.AssertEqual(t, nil, err) 100 defer func() { 101 err := os.Unsetenv("testEnvKey") 102 utils.AssertEqual(t, nil, err) 103 }() 104 105 app := fiber.New() 106 app.Use("/envvars", New()) 107 108 req, err := http.NewRequestWithContext(context.Background(), fiber.MethodGet, "http://localhost/envvars", nil) 109 utils.AssertEqual(t, nil, err) 110 resp, err := app.Test(req) 111 utils.AssertEqual(t, nil, err) 112 113 respBody, err := io.ReadAll(resp.Body) 114 utils.AssertEqual(t, nil, err) 115 116 var envVars EnvVar 117 utils.AssertEqual(t, nil, json.Unmarshal(respBody, &envVars)) 118 val := envVars.Vars["testEnvKey"] 119 utils.AssertEqual(t, "testEnvVal", val) 120 } 121 122 func TestEnvVarHandlerMethod(t *testing.T) { 123 app := fiber.New() 124 app.Use("/envvars", New()) 125 126 req, err := http.NewRequestWithContext(context.Background(), fiber.MethodPost, "http://localhost/envvars", nil) 127 utils.AssertEqual(t, nil, err) 128 resp, err := app.Test(req) 129 utils.AssertEqual(t, nil, err) 130 utils.AssertEqual(t, fiber.StatusMethodNotAllowed, resp.StatusCode) 131 } 132 133 func TestEnvVarHandlerSpecialValue(t *testing.T) { 134 testEnvKey := "testEnvKey" 135 fakeBase64 := "testBase64:TQ==" 136 err := os.Setenv(testEnvKey, fakeBase64) 137 utils.AssertEqual(t, nil, err) 138 defer func() { 139 err := os.Unsetenv(testEnvKey) 140 utils.AssertEqual(t, nil, err) 141 }() 142 143 app := fiber.New() 144 app.Use("/envvars", New()) 145 app.Use("/envvars/export", New(Config{ExportVars: map[string]string{testEnvKey: ""}})) 146 147 req, err := http.NewRequestWithContext(context.Background(), fiber.MethodGet, "http://localhost/envvars", nil) 148 utils.AssertEqual(t, nil, err) 149 resp, err := app.Test(req) 150 utils.AssertEqual(t, nil, err) 151 152 respBody, err := io.ReadAll(resp.Body) 153 utils.AssertEqual(t, nil, err) 154 155 var envVars EnvVar 156 utils.AssertEqual(t, nil, json.Unmarshal(respBody, &envVars)) 157 val := envVars.Vars[testEnvKey] 158 utils.AssertEqual(t, fakeBase64, val) 159 160 req, err = http.NewRequestWithContext(context.Background(), fiber.MethodGet, "http://localhost/envvars/export", nil) 161 utils.AssertEqual(t, nil, err) 162 resp, err = app.Test(req) 163 utils.AssertEqual(t, nil, err) 164 165 respBody, err = io.ReadAll(resp.Body) 166 utils.AssertEqual(t, nil, err) 167 168 var envVarsExport EnvVar 169 utils.AssertEqual(t, nil, json.Unmarshal(respBody, &envVarsExport)) 170 val = envVarsExport.Vars[testEnvKey] 171 utils.AssertEqual(t, fakeBase64, val) 172 }