From 372cd7ef072034a210dd5ec909fc0eb2507f1965 Mon Sep 17 00:00:00 2001 From: Sergey Date: Sun, 19 Jan 2025 13:54:19 +0300 Subject: [PATCH] chore: removed MustJSONUnmarshal, added db tests --- pkg/database/database.go | 5 ++- pkg/database/database_test.go | 62 +++++++++++++++++++++++++++++++++++ pkg/utils/utils.go | 7 ---- pkg/utils/utils_test.go | 21 ------------ 4 files changed, 66 insertions(+), 29 deletions(-) diff --git a/pkg/database/database.go b/pkg/database/database.go index 7524f59..abf36fc 100644 --- a/pkg/database/database.go +++ b/pkg/database/database.go @@ -390,7 +390,10 @@ func (d *Database) FindLastEventsByType( } event := eventsPkg.MapEventTypesToEvent(eventType) - utils.MustJSONUnmarshal(payload, &event) + if unmarshallErr := json.Unmarshal(payload, &event); unmarshallErr != nil { + d.logger.Error().Err(unmarshallErr).Msg("Could not unmarshal event!") + return nil, unmarshallErr + } newEvent := types.HistoricalEvent{ Chain: chain, diff --git a/pkg/database/database_test.go b/pkg/database/database_test.go index 302af69..7f6b1bb 100644 --- a/pkg/database/database_test.go +++ b/pkg/database/database_test.go @@ -460,3 +460,65 @@ func TestDatabaseInitUnsupported(t *testing.T) { }) database.Init() } + +func TestDatabaseGetEventsByTypeFail(t *testing.T) { + t.Parallel() + + logger := loggerPkg.GetNopLogger() + client := NewStubDatabaseClient() + database := NewDatabase(*logger, configPkg.DatabaseConfig{}) + database.SetClient(client) + + client.Mock. + ExpectQuery("SELECT event, height, validator, payload, time FROM events"). + WillReturnError(errors.New("custom error")) + + _, err := database.FindLastEventsByType("chain", constants.GetEventNames()) + require.Error(t, err) + require.ErrorContains(t, err, "custom error") +} + +func TestDatabaseGetEventsByTypeFailToUnmarshal(t *testing.T) { + t.Parallel() + + logger := loggerPkg.GetNopLogger() + client := NewStubDatabaseClient() + database := NewDatabase(*logger, configPkg.DatabaseConfig{}) + database.SetClient(client) + + client.Mock. + ExpectQuery("SELECT event, height, validator, payload, time FROM events"). + WillReturnRows(sqlmock. + NewRows([]string{"event", "height", "validator", "payload", "time"}). + AddRow("test", 123, "test", "test", time.Now()), + ) + + _, err := database.FindLastEventsByType("chain", constants.GetEventNames()) + require.Error(t, err) + require.ErrorContains(t, err, "invalid character 'e' in literal") +} + +func TestDatabaseGetEventsByTypeOk(t *testing.T) { + t.Parallel() + + logger := loggerPkg.GetNopLogger() + client := NewStubDatabaseClient() + database := NewDatabase(*logger, configPkg.DatabaseConfig{}) + database.SetClient(client) + + client.Mock. + ExpectQuery("SELECT event, height, validator, payload, time FROM events"). + WillReturnRows(sqlmock. + NewRows([]string{"event", "height", "validator", "payload", "time"}). + AddRow( + constants.EventValidatorActive, + 123, + "validator", + utils.MustJSONMarshall(events.ValidatorActive{Validator: &types.Validator{}}), + time.Now(), + ), + ) + + _, err := database.FindLastEventsByType("chain", constants.GetEventNames()) + require.NoError(t, err) +} diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index ca20d6f..251fc6d 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -235,10 +235,3 @@ func MustJSONMarshall(v any) []byte { return bytes } - -func MustJSONUnmarshal(data []byte, v any) { - err := json.Unmarshal(data, v) - if err != nil { - panic(err) - } -} diff --git a/pkg/utils/utils_test.go b/pkg/utils/utils_test.go index bdf3120..f090991 100644 --- a/pkg/utils/utils_test.go +++ b/pkg/utils/utils_test.go @@ -296,24 +296,3 @@ func TestMustMarshallOk(t *testing.T) { bytes := MustJSONMarshall(map[string]string{"key": "value"}) require.JSONEq(t, "{\"key\":\"value\"}", string(bytes)) } - -func TestMustUnmarshallFail(t *testing.T) { - t.Parallel() - - defer func() { - if r := recover(); r == nil { - require.Fail(t, "Expected to have a panic here!") - } - }() - - out := map[string]string{} - MustJSONUnmarshal([]byte("123"), &out) -} - -func TestMustUnmarshallOk(t *testing.T) { - t.Parallel() - - out := map[string]string{} - MustJSONUnmarshal([]byte("{\"key\":\"value\"}"), &out) - require.Equal(t, map[string]string{"key": "value"}, out) -}