mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-25 12:57:18 +00:00
ba07ccb484
* slasher/beaconclient tests * slasher/db/kv tests * Merge branch 'master' into apply-testutils-assertions-to-slasher * fix build * slasher/detection tests * rest of the tests * misc tests * tools tests * Merge refs/heads/master into apply-testutils-assertions-misc * Merge branch 'master' into apply-testutils-assertions-misc * agg tests * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge branch 'master' into apply-testutils-assertions-misc * Merge branch 'apply-testutils-assertions-misc' of github.com:prysmaticlabs/prysm into apply-testutils-assertions-misc * updates aggregated_test * beacon-chain/operations/attestations/kv/* tests updated * beacon-chain/operations/attestations tests updated * beacon-chain/operations/slashings tests updated * Merge branch 'master' into apply-testutils-assertions-misc * gazelle * beacon-chain/core tests updated * fixes test * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * Merge branch 'apply-testutils-assertions-misc' of github.com:prysmaticlabs/prysm into apply-testutils-assertions-misc * beacon-chain/rpc tests updated * beacon-chain/sync/initial-sync tests * misc tests * optimizes error message parsing in testutils * Merge branch 'assertutils-optimize-processing' into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * endtoend tests * Merge branch 'apply-testutils-assertions-misc' of github.com:prysmaticlabs/prysm into apply-testutils-assertions-misc * gazelle * Merge refs/heads/master into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * beacon-chain/blockchain tests updated * Merge branch 'apply-testutils-assertions-misc' of github.com:prysmaticlabs/prysm into apply-testutils-assertions-misc * beacon-chain/state/stategen tests updated * beacon-chain all left-over tests are done * Merge refs/heads/master into apply-testutils-assertions-misc * validator tests updated * slasher tests * Merge branch 'master' into apply-testutils-assertions-misc * gofmt * gazelle * Merge refs/heads/master into apply-testutils-assertions-misc * shared upd * end2end tests deps fixed * Merge branch 'apply-testutils-assertions-misc' of github.com:prysmaticlabs/prysm into apply-testutils-assertions-misc * Merge refs/heads/master into apply-testutils-assertions-misc * misc * all tests are updated * Merge branch 'apply-testutils-assertions-misc' of github.com:prysmaticlabs/prysm into apply-testutils-assertions-misc
142 lines
5.0 KiB
Go
142 lines
5.0 KiB
Go
package kv
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
slashpb "github.com/prysmaticlabs/prysm/proto/slashing"
|
|
"github.com/prysmaticlabs/prysm/shared/params"
|
|
"github.com/prysmaticlabs/prysm/shared/testutil/require"
|
|
)
|
|
|
|
func TestAttestationHistoryForPubKeys_EmptyVals(t *testing.T) {
|
|
pubkeys := [][48]byte{{30}, {25}, {20}}
|
|
db := setupDB(t, pubkeys)
|
|
|
|
historyForPubKeys, err := db.AttestationHistoryForPubKeys(context.Background(), pubkeys)
|
|
require.NoError(t, err)
|
|
|
|
newMap := make(map[uint64]uint64)
|
|
newMap[0] = params.BeaconConfig().FarFutureEpoch
|
|
clean := &slashpb.AttestationHistory{
|
|
TargetToSource: newMap,
|
|
}
|
|
cleanAttHistoryForPubKeys := make(map[[48]byte]*slashpb.AttestationHistory)
|
|
for _, pubKey := range pubkeys {
|
|
cleanAttHistoryForPubKeys[pubKey] = clean
|
|
}
|
|
|
|
require.DeepEqual(t, cleanAttHistoryForPubKeys, historyForPubKeys, "Expected attestation history epoch bits to be empty")
|
|
}
|
|
|
|
func TestSaveAttestationHistory_OK(t *testing.T) {
|
|
pubKeys := [][48]byte{{3}, {4}}
|
|
db := setupDB(t, pubKeys)
|
|
|
|
farFuture := params.BeaconConfig().FarFutureEpoch
|
|
newMap := make(map[uint64]uint64)
|
|
// The validator attested at target epoch 2 but had no attestations for target epochs 0 and 1.
|
|
newMap[0] = farFuture
|
|
newMap[1] = farFuture
|
|
newMap[2] = 1
|
|
history := &slashpb.AttestationHistory{
|
|
TargetToSource: newMap,
|
|
LatestEpochWritten: 2,
|
|
}
|
|
|
|
newMap2 := make(map[uint64]uint64)
|
|
// The validator attested at target epoch 1 and 3 but had no attestations for target epochs 0 and 2.
|
|
newMap2[0] = farFuture
|
|
newMap2[1] = 0
|
|
newMap2[2] = farFuture
|
|
newMap2[3] = 2
|
|
history2 := &slashpb.AttestationHistory{
|
|
TargetToSource: newMap2,
|
|
LatestEpochWritten: 3,
|
|
}
|
|
|
|
attestationHistory := make(map[[48]byte]*slashpb.AttestationHistory)
|
|
attestationHistory[pubKeys[0]] = history
|
|
attestationHistory[pubKeys[1]] = history2
|
|
|
|
require.NoError(t, db.SaveAttestationHistoryForPubKeys(context.Background(), attestationHistory), "Saving attestation history failed")
|
|
savedHistories, err := db.AttestationHistoryForPubKeys(context.Background(), pubKeys)
|
|
require.NoError(t, err, "Failed to get attestation history")
|
|
|
|
require.NotNil(t, savedHistories)
|
|
require.DeepEqual(t, attestationHistory, savedHistories, "Expected DB to keep object the same, received: %v", history)
|
|
|
|
savedHistory := savedHistories[pubKeys[0]]
|
|
require.Equal(t, newMap[2], savedHistory.TargetToSource[2], "Expected target epoch %d to have the same marked source epoch", 2)
|
|
require.Equal(t, newMap[1], savedHistory.TargetToSource[1], "Expected target epoch %d to have the same marked source epoch", 1)
|
|
require.Equal(t, newMap[0], savedHistory.TargetToSource[0], "Expected target epoch %d to have the same marked source epoch", 0)
|
|
|
|
savedHistory = savedHistories[pubKeys[1]]
|
|
require.Equal(t, newMap2[3], savedHistory.TargetToSource[3], "Expected target epoch %d to have the same marked source epoch", 3)
|
|
require.Equal(t, newMap2[2], savedHistory.TargetToSource[2], "Expected target epoch %d to have the same marked source epoch", 2)
|
|
require.Equal(t, newMap2[1], savedHistory.TargetToSource[1], "Expected target epoch %d to have the same marked source epoch", 1)
|
|
}
|
|
|
|
func TestSaveAttestationHistory_Overwrites(t *testing.T) {
|
|
db := setupDB(t, [][48]byte{})
|
|
farFuture := params.BeaconConfig().FarFutureEpoch
|
|
newMap1 := make(map[uint64]uint64)
|
|
newMap1[0] = farFuture
|
|
newMap1[1] = 0
|
|
newMap2 := make(map[uint64]uint64)
|
|
newMap2[0] = farFuture
|
|
newMap2[1] = farFuture
|
|
newMap2[2] = 1
|
|
newMap3 := make(map[uint64]uint64)
|
|
newMap3[0] = farFuture
|
|
newMap3[1] = farFuture
|
|
newMap3[2] = farFuture
|
|
newMap3[3] = 2
|
|
tests := []struct {
|
|
pubkey [48]byte
|
|
epoch uint64
|
|
history *slashpb.AttestationHistory
|
|
}{
|
|
{
|
|
pubkey: [48]byte{0},
|
|
epoch: uint64(1),
|
|
history: &slashpb.AttestationHistory{
|
|
TargetToSource: newMap1,
|
|
LatestEpochWritten: 1,
|
|
},
|
|
},
|
|
{
|
|
pubkey: [48]byte{0},
|
|
epoch: uint64(2),
|
|
history: &slashpb.AttestationHistory{
|
|
TargetToSource: newMap2,
|
|
LatestEpochWritten: 2,
|
|
},
|
|
},
|
|
{
|
|
pubkey: [48]byte{0},
|
|
epoch: uint64(3),
|
|
history: &slashpb.AttestationHistory{
|
|
TargetToSource: newMap3,
|
|
LatestEpochWritten: 3,
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
attHistory := make(map[[48]byte]*slashpb.AttestationHistory)
|
|
attHistory[tt.pubkey] = tt.history
|
|
require.NoError(t, db.SaveAttestationHistoryForPubKeys(context.Background(), attHistory), "Saving attestation history failed")
|
|
histories, err := db.AttestationHistoryForPubKeys(context.Background(), [][48]byte{tt.pubkey})
|
|
require.NoError(t, err, "Failed to get attestation history")
|
|
|
|
history := histories[tt.pubkey]
|
|
require.NotNil(t, history)
|
|
require.DeepEqual(t, tt.history, history, "Expected DB to keep object the same")
|
|
require.Equal(t, tt.epoch-1, history.TargetToSource[tt.epoch],
|
|
"Expected target epoch %d to be marked with correct source epoch %d", tt.epoch, history.TargetToSource[tt.epoch])
|
|
require.Equal(t, farFuture, history.TargetToSource[tt.epoch-1],
|
|
"Expected target epoch %d to not be marked as attested for, received %d", tt.epoch-1, history.TargetToSource[tt.epoch-1])
|
|
}
|
|
}
|