MCPcopy Index your code
hub / github.com/labstack/echo / TestProxyErrorHandler

Function TestProxyErrorHandler

middleware/proxy_test.go:787–866  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

785}
786
787func TestProxyErrorHandler(t *testing.T) {
788
789 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
790 w.WriteHeader(http.StatusOK)
791 }))
792
793 goodURL, _ := url.Parse(server.URL)
794 defer server.Close()
795 goodTarget := &ProxyTarget{
796 Name: "Good",
797 URL: goodURL,
798 }
799
800 badURL, _ := url.Parse("http://127.0.0.1:27121")
801 badTarget := &ProxyTarget{
802 Name: "Bad",
803 URL: badURL,
804 }
805
806 transformedError := errors.New("a new error")
807
808 testCases := []struct {
809 name string
810 target *ProxyTarget
811 errorHandler func(c *echo.Context, e error) error
812 expectFinalError func(t *testing.T, err error)
813 }{
814 {
815 name: "Error handler not invoked when request success",
816 target: goodTarget,
817 errorHandler: func(c *echo.Context, e error) error {
818 assert.FailNow(t, "error handler should not be invoked")
819 return e
820 },
821 },
822 {
823 name: "Error handler invoked when request fails",
824 target: badTarget,
825 errorHandler: func(c *echo.Context, e error) error {
826 httpErr, ok := e.(*echo.HTTPError)
827 assert.True(t, ok, "expected http error to be passed to handler")
828 assert.Equal(t, http.StatusBadGateway, httpErr.Code, "expected http bad gateway error to be passed to handler")
829 return transformedError
830 },
831 expectFinalError: func(t *testing.T, err error) {
832 assert.Equal(t, transformedError, err, "transformed error not returned from proxy")
833 },
834 },
835 }
836
837 for _, tc := range testCases {
838 t.Run(tc.name, func(t *testing.T) {
839 e := echo.New()
840 e.Use(ProxyWithConfig(
841 ProxyConfig{
842 Balancer: NewRoundRobinBalancer([]*ProxyTarget{tc.target}),
843 ErrorHandler: tc.errorHandler,
844 },

Callers

nothing calls this directly

Calls 6

ProxyWithConfigFunction · 0.85
NewRoundRobinBalancerFunction · 0.85
ServeHTTPMethod · 0.80
WriteHeaderMethod · 0.45
CloseMethod · 0.45
UseMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…