From 2ad54fb48007b17cc12eed3230f95e348bd5a0f0 Mon Sep 17 00:00:00 2001 From: rkapka Date: Mon, 4 Mar 2024 16:39:39 +0100 Subject: [PATCH] tests --- beacon-chain/rpc/eth/rewards/BUILD.bazel | 7 ++- beacon-chain/rpc/eth/rewards/handlers_test.go | 26 +++++++++-- beacon-chain/rpc/eth/rewards/service_test.go | 46 +++++++++++++++++++ 3 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 beacon-chain/rpc/eth/rewards/service_test.go diff --git a/beacon-chain/rpc/eth/rewards/BUILD.bazel b/beacon-chain/rpc/eth/rewards/BUILD.bazel index 3c91939390c7..a41bb4e7d562 100644 --- a/beacon-chain/rpc/eth/rewards/BUILD.bazel +++ b/beacon-chain/rpc/eth/rewards/BUILD.bazel @@ -37,7 +37,10 @@ go_library( go_test( name = "go_default_test", - srcs = ["handlers_test.go"], + srcs = [ + "handlers_test.go", + "service_test.go", + ], embed = [":go_default_library"], deps = [ "//api/server/structs:go_default_library", @@ -45,6 +48,8 @@ go_test( "//beacon-chain/core/altair:go_default_library", "//beacon-chain/core/helpers:go_default_library", "//beacon-chain/core/signing:go_default_library", + "//beacon-chain/core/transition:go_default_library", + "//beacon-chain/db/testing:go_default_library", "//beacon-chain/rpc/testutil:go_default_library", "//beacon-chain/state:go_default_library", "//beacon-chain/state/stategen/mock:go_default_library", diff --git a/beacon-chain/rpc/eth/rewards/handlers_test.go b/beacon-chain/rpc/eth/rewards/handlers_test.go index c94a1ec0307c..aa41b308a5b6 100644 --- a/beacon-chain/rpc/eth/rewards/handlers_test.go +++ b/beacon-chain/rpc/eth/rewards/handlers_test.go @@ -18,6 +18,7 @@ import ( "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/altair" "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/helpers" "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/signing" + dbutil "github.com/prysmaticlabs/prysm/v5/beacon-chain/db/testing" "github.com/prysmaticlabs/prysm/v5/beacon-chain/rpc/testutil" "github.com/prysmaticlabs/prysm/v5/beacon-chain/state" mockstategen "github.com/prysmaticlabs/prysm/v5/beacon-chain/state/stategen/mock" @@ -192,6 +193,7 @@ func BlockRewardTestSetup(t *testing.T, forkName string) (state.BeaconState, int } func TestBlockRewards(t *testing.T) { + db := dbutil.SetupDB(t) phase0block, err := blocks.NewSignedBeaconBlock(util.NewBeaconBlock()) require.NoError(t, err) t.Run("phase 0", func(t *testing.T) { @@ -227,7 +229,10 @@ func TestBlockRewards(t *testing.T) { }}, OptimisticModeFetcher: mockChainService, FinalizationFetcher: mockChainService, - BlockRewardFetcher: &BlockRewardService{Replayer: mockstategen.NewReplayerBuilder(mockstategen.WithMockState(st))}, + BlockRewardFetcher: &BlockRewardService{ + Replayer: mockstategen.NewReplayerBuilder(mockstategen.WithMockState(st)), + DB: db, + }, } url := "http://only.the.slot.number.at.the.end.is.important/2" @@ -260,7 +265,10 @@ func TestBlockRewards(t *testing.T) { }}, OptimisticModeFetcher: mockChainService, FinalizationFetcher: mockChainService, - BlockRewardFetcher: &BlockRewardService{Replayer: mockstategen.NewReplayerBuilder(mockstategen.WithMockState(st))}, + BlockRewardFetcher: &BlockRewardService{ + Replayer: mockstategen.NewReplayerBuilder(mockstategen.WithMockState(st)), + DB: db, + }, } url := "http://only.the.slot.number.at.the.end.is.important/2" @@ -293,7 +301,10 @@ func TestBlockRewards(t *testing.T) { }}, OptimisticModeFetcher: mockChainService, FinalizationFetcher: mockChainService, - BlockRewardFetcher: &BlockRewardService{Replayer: mockstategen.NewReplayerBuilder(mockstategen.WithMockState(st))}, + BlockRewardFetcher: &BlockRewardService{ + Replayer: mockstategen.NewReplayerBuilder(mockstategen.WithMockState(st)), + DB: db, + }, } url := "http://only.the.slot.number.at.the.end.is.important/2" @@ -326,7 +337,10 @@ func TestBlockRewards(t *testing.T) { }}, OptimisticModeFetcher: mockChainService, FinalizationFetcher: mockChainService, - BlockRewardFetcher: &BlockRewardService{Replayer: mockstategen.NewReplayerBuilder(mockstategen.WithMockState(st))}, + BlockRewardFetcher: &BlockRewardService{ + Replayer: mockstategen.NewReplayerBuilder(mockstategen.WithMockState(st)), + DB: db, + }, } url := "http://only.the.slot.number.at.the.end.is.important/2" @@ -715,7 +729,9 @@ func TestSyncCommiteeRewards(t *testing.T) { }}, OptimisticModeFetcher: mockChainService, FinalizationFetcher: mockChainService, - BlockRewardFetcher: &BlockRewardService{Replayer: mockstategen.NewReplayerBuilder(mockstategen.WithMockState(st))}, + BlockRewardFetcher: &BlockRewardService{ + Replayer: mockstategen.NewReplayerBuilder(mockstategen.WithMockState(st)), + DB: dbutil.SetupDB(t)}, } t.Run("ok - filtered vals", func(t *testing.T) { diff --git a/beacon-chain/rpc/eth/rewards/service_test.go b/beacon-chain/rpc/eth/rewards/service_test.go new file mode 100644 index 000000000000..e7202d49a376 --- /dev/null +++ b/beacon-chain/rpc/eth/rewards/service_test.go @@ -0,0 +1,46 @@ +package rewards + +import ( + "context" + "testing" + + "github.com/prysmaticlabs/prysm/v5/beacon-chain/core/transition" + dbutil "github.com/prysmaticlabs/prysm/v5/beacon-chain/db/testing" + "github.com/prysmaticlabs/prysm/v5/consensus-types/blocks" + "github.com/prysmaticlabs/prysm/v5/testing/assert" + "github.com/prysmaticlabs/prysm/v5/testing/require" + "github.com/prysmaticlabs/prysm/v5/testing/util" +) + +func TestGetStateForRewards_NextSlotCacheHit(t *testing.T) { + ctx := context.Background() + db := dbutil.SetupDB(t) + + st, err := util.NewBeaconStateDeneb() + require.NoError(t, err) + b := util.HydrateSignedBeaconBlockDeneb(util.NewBeaconBlockDeneb()) + parent, err := blocks.NewSignedBeaconBlock(b) + require.NoError(t, err) + require.NoError(t, db.SaveBlock(ctx, parent)) + + r, err := parent.Block().HashTreeRoot() + require.NoError(t, err) + require.NoError(t, transition.UpdateNextSlotCache(ctx, r[:], st)) + + s := &BlockRewardService{ + Replayer: nil, // setting to nil because replayer must not be invoked + DB: db, + } + b = util.HydrateSignedBeaconBlockDeneb(util.NewBeaconBlockDeneb()) + sbb, err := blocks.NewSignedBeaconBlock(b) + require.NoError(t, err) + sbb.SetSlot(parent.Block().Slot() + 1) + result, err := s.GetStateForRewards(ctx, sbb.Block()) + require.NoError(t, err) + _, lcs := transition.LastCachedState() + expected, err := lcs.HashTreeRoot(ctx) + require.NoError(t, err) + actual, err := result.HashTreeRoot(ctx) + require.NoError(t, err) + assert.DeepEqual(t, expected, actual) +}