mirror of
https://github.com/mudler/LocalAI.git
synced 2026-02-28 20:57:39 -05:00
* WIP: migrate to echo Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * tests Signed-off-by: Ettore Di Giacinto <mudler@localai.io> --------- Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
135 lines
4.3 KiB
Go
135 lines
4.3 KiB
Go
package middleware
|
|
|
|
import (
|
|
"net/http/httptest"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("StripPathPrefix", func() {
|
|
var app *echo.Echo
|
|
var actualPath string
|
|
var appInitialized bool
|
|
|
|
BeforeEach(func() {
|
|
actualPath = ""
|
|
if !appInitialized {
|
|
app = echo.New()
|
|
app.Pre(StripPathPrefix())
|
|
|
|
app.GET("/hello/world", func(c echo.Context) error {
|
|
actualPath = c.Request().URL.Path
|
|
return nil
|
|
})
|
|
|
|
app.GET("/", func(c echo.Context) error {
|
|
actualPath = c.Request().URL.Path
|
|
return nil
|
|
})
|
|
appInitialized = true
|
|
}
|
|
})
|
|
|
|
Context("without prefix", func() {
|
|
It("should not modify path when no header is present", func() {
|
|
req := httptest.NewRequest("GET", "/hello/world", nil)
|
|
rec := httptest.NewRecorder()
|
|
app.ServeHTTP(rec, req)
|
|
|
|
Expect(rec.Code).To(Equal(200), "response status code")
|
|
Expect(actualPath).To(Equal("/hello/world"), "rewritten path")
|
|
})
|
|
|
|
It("should not modify root path when no header is present", func() {
|
|
req := httptest.NewRequest("GET", "/", nil)
|
|
rec := httptest.NewRecorder()
|
|
app.ServeHTTP(rec, req)
|
|
|
|
Expect(rec.Code).To(Equal(200), "response status code")
|
|
Expect(actualPath).To(Equal("/"), "rewritten path")
|
|
})
|
|
|
|
It("should not modify path when header does not match", func() {
|
|
req := httptest.NewRequest("GET", "/hello/world", nil)
|
|
req.Header["X-Forwarded-Prefix"] = []string{"/otherprefix/"}
|
|
rec := httptest.NewRecorder()
|
|
app.ServeHTTP(rec, req)
|
|
|
|
Expect(rec.Code).To(Equal(200), "response status code")
|
|
Expect(actualPath).To(Equal("/hello/world"), "rewritten path")
|
|
})
|
|
})
|
|
|
|
Context("with prefix", func() {
|
|
It("should return 404 when prefix does not match header", func() {
|
|
req := httptest.NewRequest("GET", "/prefix/hello/world", nil)
|
|
req.Header["X-Forwarded-Prefix"] = []string{"/otherprefix/"}
|
|
rec := httptest.NewRecorder()
|
|
app.ServeHTTP(rec, req)
|
|
|
|
Expect(rec.Code).To(Equal(404), "response status code")
|
|
})
|
|
|
|
It("should strip matching prefix from path", func() {
|
|
req := httptest.NewRequest("GET", "/myprefix/hello/world", nil)
|
|
req.Header["X-Forwarded-Prefix"] = []string{"/myprefix/"}
|
|
rec := httptest.NewRecorder()
|
|
app.ServeHTTP(rec, req)
|
|
|
|
Expect(rec.Code).To(Equal(200), "response status code")
|
|
Expect(actualPath).To(Equal("/hello/world"), "rewritten path")
|
|
})
|
|
|
|
It("should strip prefix when it matches the first header value", func() {
|
|
req := httptest.NewRequest("GET", "/myprefix/hello/world", nil)
|
|
req.Header["X-Forwarded-Prefix"] = []string{"/myprefix/", "/otherprefix/"}
|
|
rec := httptest.NewRecorder()
|
|
app.ServeHTTP(rec, req)
|
|
|
|
Expect(rec.Code).To(Equal(200), "response status code")
|
|
Expect(actualPath).To(Equal("/hello/world"), "rewritten path")
|
|
})
|
|
|
|
It("should strip prefix when it matches the second header value", func() {
|
|
req := httptest.NewRequest("GET", "/myprefix/hello/world", nil)
|
|
req.Header["X-Forwarded-Prefix"] = []string{"/otherprefix/", "/myprefix/"}
|
|
rec := httptest.NewRecorder()
|
|
app.ServeHTTP(rec, req)
|
|
|
|
Expect(rec.Code).To(Equal(200), "response status code")
|
|
Expect(actualPath).To(Equal("/hello/world"), "rewritten path")
|
|
})
|
|
|
|
It("should strip prefix when header does not end with slash", func() {
|
|
req := httptest.NewRequest("GET", "/myprefix/hello/world", nil)
|
|
req.Header["X-Forwarded-Prefix"] = []string{"/myprefix"}
|
|
rec := httptest.NewRecorder()
|
|
app.ServeHTTP(rec, req)
|
|
|
|
Expect(rec.Code).To(Equal(200), "response status code")
|
|
Expect(actualPath).To(Equal("/hello/world"), "rewritten path")
|
|
})
|
|
|
|
It("should return 404 when prefix does not match header without trailing slash", func() {
|
|
req := httptest.NewRequest("GET", "/myprefix-suffix/hello/world", nil)
|
|
req.Header["X-Forwarded-Prefix"] = []string{"/myprefix"}
|
|
rec := httptest.NewRecorder()
|
|
app.ServeHTTP(rec, req)
|
|
|
|
Expect(rec.Code).To(Equal(404), "response status code")
|
|
})
|
|
|
|
It("should redirect when prefix does not end with a slash", func() {
|
|
req := httptest.NewRequest("GET", "/myprefix", nil)
|
|
req.Header["X-Forwarded-Prefix"] = []string{"/myprefix"}
|
|
rec := httptest.NewRecorder()
|
|
app.ServeHTTP(rec, req)
|
|
|
|
Expect(rec.Code).To(Equal(302), "response status code")
|
|
Expect(rec.Header().Get("Location")).To(Equal("/myprefix/"), "redirect location")
|
|
})
|
|
})
|
|
})
|