diff --git a/errors/errors_test.go b/errors/errors_test.go index 33422869..fadc6f27 100644 --- a/errors/errors_test.go +++ b/errors/errors_test.go @@ -106,3 +106,42 @@ func TestErrorError(t *testing.T) { errStr := err.Error() assert.Equal(t, sourceErr.Error(), errStr) } + +func TestCodeFromError(t *testing.T) { + t.Parallel() + + errTest := errors.New("error") + codeNotFound := "GAME-404" + + tables := map[string]struct { + err error + code string + }{ + "test_not_error": { + err: nil, + code: "", + }, + + "test_not_pitaya_error": { + err: errTest, + code: ErrUnknownCode, + }, + + "test_nil_pitaya_error": { + err: func() *Error { var err *Error; return err }(), + code: "", + }, + + "test_pitaya_error": { + err: NewError(errTest, codeNotFound), + code: codeNotFound, + }, + } + + for name, table := range tables { + t.Run(name, func(t *testing.T) { + code := CodeFromError(table.err) + assert.Equal(t, table.code, code) + }) + } +} diff --git a/metrics/report_test.go b/metrics/report_test.go index c791d0a1..c93dc8c0 100644 --- a/metrics/report_test.go +++ b/metrics/report_test.go @@ -31,6 +31,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/topfreegames/pitaya/constants" pcontext "github.com/topfreegames/pitaya/context" + e "github.com/topfreegames/pitaya/errors" "github.com/topfreegames/pitaya/metrics/mocks" ) @@ -109,6 +110,51 @@ func TestReportTimingFromCtx(t *testing.T) { ReportTimingFromCtx(ctx, []Reporter{mockMetricsReporter}, expectedType, expectedErr) }) + + t.Run("test-failed-route-with-pitaya-error", func(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + mockMetricsReporter := mocks.NewMockReporter(ctrl) + + originalTs := time.Now().UnixNano() + expectedRoute := uuid.New().String() + expectedType := uuid.New().String() + code := "GAME-404" + expectedErr := e.NewError(errors.New("error"), code) + ctx := pcontext.AddToPropagateCtx(context.Background(), constants.StartTimeKey, originalTs) + ctx = pcontext.AddToPropagateCtx(ctx, constants.RouteKey, expectedRoute) + + mockMetricsReporter.EXPECT().ReportSummary(ResponseTime, map[string]string{ + "route": expectedRoute, + "status": "failed", + "type": expectedType, + "code": code, + }, gomock.Any()) + + ReportTimingFromCtx(ctx, []Reporter{mockMetricsReporter}, expectedType, expectedErr) + }) + + t.Run("test-failed-route", func(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + mockMetricsReporter := mocks.NewMockReporter(ctrl) + + originalTs := time.Now().UnixNano() + expectedRoute := uuid.New().String() + expectedType := uuid.New().String() + expectedErr := errors.New("error") + ctx := pcontext.AddToPropagateCtx(context.Background(), constants.StartTimeKey, originalTs) + ctx = pcontext.AddToPropagateCtx(ctx, constants.RouteKey, expectedRoute) + + mockMetricsReporter.EXPECT().ReportSummary(ResponseTime, map[string]string{ + "route": expectedRoute, + "status": "failed", + "type": expectedType, + "code": e.ErrUnknownCode, + }, gomock.Any()) + + ReportTimingFromCtx(ctx, []Reporter{mockMetricsReporter}, expectedType, expectedErr) + }) } func TestReportMessageProcessDelayFromCtx(t *testing.T) {