1
0
mirror of https://github.com/gofiber/fiber.git synced 2025-02-24 00:04:08 +00:00
fiber/middleware/proxy/proxy_test.go

220 lines
5.2 KiB
Go
Raw Normal View History

2020-09-13 11:20:11 +02:00
package proxy
import (
"io/ioutil"
"net"
"net/http/httptest"
"strings"
"testing"
"time"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/utils"
)
// go test -run Test_Proxy_Empty_Host
func Test_Proxy_Empty_Upstream_Servers(t *testing.T) {
t.Parallel()
2020-10-15 13:03:06 +02:00
defer func() {
if r := recover(); r != nil {
utils.AssertEqual(t, "Servers cannot be empty", r)
}
}()
app := fiber.New()
2020-10-15 13:03:06 +02:00
app.Use(Balancer(Config{Servers: []string{}}))
}
2020-09-27 18:24:05 +02:00
2020-10-15 13:15:59 +03:00
// go test -run Test_Proxy_Next
func Test_Proxy_Next(t *testing.T) {
t.Parallel()
app := fiber.New()
2020-10-21 23:42:03 +02:00
app.Use(Balancer(Config{
2020-10-15 16:23:13 +03:00
Servers: []string{"127.0.0.1"},
Next: func(_ *fiber.Ctx) bool {
return true
},
}))
resp, err := app.Test(httptest.NewRequest("GET", "/", nil))
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusNotFound, resp.StatusCode)
}
2020-09-27 18:24:05 +02:00
2020-10-15 13:15:59 +03:00
// go test -run Test_Proxy
func Test_Proxy(t *testing.T) {
t.Parallel()
target := fiber.New(fiber.Config{DisableStartupMessage: true})
target.Get("/", func(c *fiber.Ctx) error {
return c.SendStatus(fiber.StatusTeapot)
})
ln, err := net.Listen(fiber.NetworkTCP4, "127.0.0.1:0")
utils.AssertEqual(t, nil, err)
go func() {
utils.AssertEqual(t, nil, target.Listener(ln))
}()
2020-11-06 02:02:02 +01:00
time.Sleep(2 * time.Second)
addr := ln.Addr().String()
resp, err := target.Test(httptest.NewRequest("GET", "/", nil), 2000)
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusTeapot, resp.StatusCode)
app := fiber.New(fiber.Config{DisableStartupMessage: true})
app.Use(Balancer(Config{Servers: []string{addr}}))
req := httptest.NewRequest("GET", "/", nil)
req.Host = addr
resp, err = app.Test(req)
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusTeapot, resp.StatusCode)
}
func Test_Proxy_Forward(t *testing.T) {
t.Parallel()
app := fiber.New()
target := fiber.New(fiber.Config{DisableStartupMessage: true})
target.Get("/", func(c *fiber.Ctx) error {
return c.SendString("forwarded")
})
ln, err := net.Listen(fiber.NetworkTCP4, "127.0.0.1:0")
utils.AssertEqual(t, nil, err)
2020-10-22 12:16:04 +02:00
go func() {
utils.AssertEqual(t, nil, target.Listener(ln))
2020-10-22 12:16:04 +02:00
}()
2020-11-06 02:02:02 +01:00
time.Sleep(2 * time.Second)
addr := ln.Addr().String()
app.Use(Forward("http://" + addr))
resp, err := app.Test(httptest.NewRequest("GET", "/", nil))
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
b, err := ioutil.ReadAll(resp.Body)
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, "forwarded", string(b))
}
func Test_Proxy_Modify_Response(t *testing.T) {
t.Parallel()
target := fiber.New(fiber.Config{DisableStartupMessage: true})
2020-10-22 12:16:04 +02:00
target.Get("/", func(c *fiber.Ctx) error {
return c.Status(500).SendString("not modified")
})
ln, err := net.Listen(fiber.NetworkTCP4, "127.0.0.1:0")
utils.AssertEqual(t, nil, err)
go func() {
utils.AssertEqual(t, nil, target.Listener(ln))
}()
2020-11-06 02:02:02 +01:00
time.Sleep(2 * time.Second)
addr := ln.Addr().String()
app := fiber.New()
app.Use(Balancer(Config{
Servers: []string{addr},
ModifyResponse: func(c *fiber.Ctx) error {
c.Response().SetStatusCode(fiber.StatusOK)
return c.SendString("modified response")
},
}))
resp, err := app.Test(httptest.NewRequest("GET", "/", nil))
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
b, err := ioutil.ReadAll(resp.Body)
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, "modified response", string(b))
}
func Test_Proxy_Modify_Request(t *testing.T) {
t.Parallel()
target := fiber.New(fiber.Config{DisableStartupMessage: true})
2020-10-22 12:16:04 +02:00
target.Get("/", func(c *fiber.Ctx) error {
b := c.Request().Body()
return c.SendString(string(b))
})
ln, err := net.Listen(fiber.NetworkTCP4, "127.0.0.1:0")
utils.AssertEqual(t, nil, err)
go func() {
utils.AssertEqual(t, nil, target.Listener(ln))
}()
2020-11-06 02:02:02 +01:00
time.Sleep(2 * time.Second)
addr := ln.Addr().String()
app := fiber.New()
app.Use(Balancer(Config{
Servers: []string{addr},
ModifyRequest: func(c *fiber.Ctx) error {
c.Request().SetBody([]byte("modified request"))
return nil
},
}))
resp, err := app.Test(httptest.NewRequest("GET", "/", nil))
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
b, err := ioutil.ReadAll(resp.Body)
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, "modified request", string(b))
}
func Test_Proxy_Buffer_Size_Response(t *testing.T) {
t.Parallel()
target := fiber.New(fiber.Config{DisableStartupMessage: true})
target.Get("/", func(c *fiber.Ctx) error {
long := strings.Join(make([]string, 5000), "-")
c.Response().Header.Set("Very-Long-Header", long)
return c.SendString("ok")
})
ln, err := net.Listen(fiber.NetworkTCP4, "127.0.0.1:0")
utils.AssertEqual(t, nil, err)
go func() {
utils.AssertEqual(t, nil, target.Listener(ln))
}()
time.Sleep(2 * time.Second)
addr := ln.Addr().String()
app := fiber.New()
app.Use(Balancer(Config{Servers: []string{addr}}))
resp, err := app.Test(httptest.NewRequest("GET", "/", nil))
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusInternalServerError, resp.StatusCode)
app = fiber.New()
app.Use(Balancer(Config{
Servers: []string{addr},
ReadBufferSize: 1024 * 8,
}))
resp, err = app.Test(httptest.NewRequest("GET", "/", nil))
utils.AssertEqual(t, nil, err)
utils.AssertEqual(t, fiber.StatusOK, resp.StatusCode)
}