Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/util/server/recovery_test.go

44 lines
1.3 KiB

package server
import (
"context"
"net/http"
"net/http/httptest"
"testing"
"github.com/stretchr/testify/require"
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
)
func Test_onPanic(t *testing.T) {
rec := httptest.NewRecorder()
req, err := http.NewRequest(http.MethodGet, "foo", nil)
if err != nil {
t.Fatal(err)
}
RecoveryHTTPMiddleware.
Wrap(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {
panic("foo bar")
})).
ServeHTTP(rec, req)
require.Equal(t, http.StatusInternalServerError, rec.Code)
require.Error(t, RecoveryGRPCStreamInterceptor(nil, fakeStream{}, nil, grpc.StreamHandler(func(srv interface{}, stream grpc.ServerStream) error {
panic("foo")
})))
_, err = RecoveryGRPCUnaryInterceptor(context.Background(), nil, nil, grpc.UnaryHandler(func(ctx context.Context, req interface{}) (interface{}, error) {
panic("foo")
}))
require.Error(t, err)
}
type fakeStream struct{}
func (fakeStream) SetHeader(_ metadata.MD) error { return nil }
func (fakeStream) SendHeader(_ metadata.MD) error { return nil }
func (fakeStream) SetTrailer(_ metadata.MD) {}
func (fakeStream) Context() context.Context { return context.Background() }
func (fakeStream) SendMsg(m interface{}) error { return nil }
func (fakeStream) RecvMsg(m interface{}) error { return nil }