@ -9,6 +9,9 @@ import (
"net/http/httptest"
"testing"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"github.com/prometheus/prometheus/promql"
"github.com/stretchr/testify/require"
"github.com/weaveworks/common/httpgrpc"
@ -29,9 +32,18 @@ func Test_writeError(t *testing.T) {
} {
{ "cancelled" , context . Canceled , ErrClientCanceled , StatusClientClosedRequest } ,
{ "cancelled multi" , util . MultiError { context . Canceled , context . Canceled } , ErrClientCanceled , StatusClientClosedRequest } ,
{ "rpc cancelled" , status . New ( codes . Canceled , context . Canceled . Error ( ) ) . Err ( ) , ErrClientCanceled , StatusClientClosedRequest } ,
{ "rpc cancelled multi" , util . MultiError { status . New ( codes . Canceled , context . Canceled . Error ( ) ) . Err ( ) , status . New ( codes . Canceled , context . Canceled . Error ( ) ) . Err ( ) } , ErrClientCanceled , StatusClientClosedRequest } ,
{ "mixed context and rpc cancelled" , util . MultiError { context . Canceled , status . New ( codes . Canceled , context . Canceled . Error ( ) ) . Err ( ) } , ErrClientCanceled , StatusClientClosedRequest } ,
{ "mixed context, rpc cancelled and another" , util . MultiError { errors . New ( "standard error" ) , context . Canceled , status . New ( codes . Canceled , context . Canceled . Error ( ) ) . Err ( ) } , "3 errors: standard error; context canceled; rpc error: code = Canceled desc = context canceled" , http . StatusInternalServerError } ,
{ "cancelled storage" , promql . ErrStorage { Err : context . Canceled } , ErrClientCanceled , StatusClientClosedRequest } ,
{ "orgid" , user . ErrNoOrgID , user . ErrNoOrgID . Error ( ) , http . StatusBadRequest } ,
{ "deadline" , context . DeadlineExceeded , ErrDeadlineExceeded , http . StatusGatewayTimeout } ,
{ "deadline multi" , util . MultiError { context . DeadlineExceeded , context . DeadlineExceeded } , ErrDeadlineExceeded , http . StatusGatewayTimeout } ,
{ "rpc deadline" , status . New ( codes . DeadlineExceeded , context . DeadlineExceeded . Error ( ) ) . Err ( ) , ErrDeadlineExceeded , http . StatusGatewayTimeout } ,
{ "rpc deadline multi" , util . MultiError { status . New ( codes . DeadlineExceeded , context . DeadlineExceeded . Error ( ) ) . Err ( ) , status . New ( codes . DeadlineExceeded , context . DeadlineExceeded . Error ( ) ) . Err ( ) } , ErrDeadlineExceeded , http . StatusGatewayTimeout } ,
{ "mixed context and rpc deadline" , util . MultiError { context . DeadlineExceeded , status . New ( codes . DeadlineExceeded , context . DeadlineExceeded . Error ( ) ) . Err ( ) } , ErrDeadlineExceeded , http . StatusGatewayTimeout } ,
{ "mixed context, rpc deadline and another" , util . MultiError { errors . New ( "standard error" ) , context . DeadlineExceeded , status . New ( codes . DeadlineExceeded , context . DeadlineExceeded . Error ( ) ) . Err ( ) } , "3 errors: standard error; context deadline exceeded; rpc error: code = DeadlineExceeded desc = context deadline exceeded" , http . StatusInternalServerError } ,
{ "parse error" , logqlmodel . ParseError { } , "parse error : " , http . StatusBadRequest } ,
{ "httpgrpc" , httpgrpc . Errorf ( http . StatusBadRequest , errors . New ( "foo" ) . Error ( ) ) , "foo" , http . StatusBadRequest } ,
{ "internal" , errors . New ( "foo" ) , "foo" , http . StatusInternalServerError } ,