github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/pkg/util/server/recovery_test.go (about)

     1  package server
     2  
     3  import (
     4  	"context"
     5  	"net/http"
     6  	"net/http/httptest"
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  	"google.golang.org/grpc"
    11  	"google.golang.org/grpc/metadata"
    12  )
    13  
    14  func Test_onPanic(t *testing.T) {
    15  	rec := httptest.NewRecorder()
    16  	req, err := http.NewRequest(http.MethodGet, "foo", nil)
    17  	if err != nil {
    18  		t.Fatal(err)
    19  	}
    20  	RecoveryHTTPMiddleware.
    21  		Wrap(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {
    22  			panic("foo bar")
    23  		})).
    24  		ServeHTTP(rec, req)
    25  	require.Equal(t, http.StatusInternalServerError, rec.Code)
    26  
    27  	require.Error(t, RecoveryGRPCStreamInterceptor(nil, fakeStream{}, nil, grpc.StreamHandler(func(srv interface{}, stream grpc.ServerStream) error {
    28  		panic("foo")
    29  	})))
    30  
    31  	_, err = RecoveryGRPCUnaryInterceptor(context.Background(), nil, nil, grpc.UnaryHandler(func(ctx context.Context, req interface{}) (interface{}, error) {
    32  		panic("foo")
    33  	}))
    34  	require.Error(t, err)
    35  }
    36  
    37  type fakeStream struct{}
    38  
    39  func (fakeStream) SetHeader(_ metadata.MD) error  { return nil }
    40  func (fakeStream) SendHeader(_ metadata.MD) error { return nil }
    41  func (fakeStream) SetTrailer(_ metadata.MD)       {}
    42  func (fakeStream) Context() context.Context       { return context.Background() }
    43  func (fakeStream) SendMsg(m interface{}) error    { return nil }
    44  func (fakeStream) RecvMsg(m interface{}) error    { return nil }