Skip to content

Commit

Permalink
Tests - Fix test entropy (#523)
Browse files Browse the repository at this point in the history
* fix: loop sorted validator indexes

* generate JSON tests

* use generic sorting function
  • Loading branch information
MatheusFranco99 authored Feb 20, 2025
1 parent 3a9cb8e commit 3d6c3ac
Show file tree
Hide file tree
Showing 12 changed files with 1,870 additions and 1,852 deletions.
904 changes: 452 additions & 452 deletions ssv/spectest/generate/tests/committee.MultiCommitteeSpecTest_decided.json

Large diffs are not rendered by default.

2,050 changes: 1,025 additions & 1,025 deletions ssv/spectest/generate/tests/committee.MultiCommitteeSpecTest_happy_flow.json

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
"DutySlot": "12",
"Input": "AQIDBAUGBwgJCgECAwQFBgcICQoBAgMEBQYHCAkKAQIAAAAAAAAAAAECAwQFBgcICQoBAgMEBQYHCAkKAQIDBAUGBwgJCgECAQAAAAAAAAABAgMEBQYHCAkKAQIDBAUGBwgJCgECAwQFBgcICQoBAg==",
"SlashableSlots": {
"42409cb09fa945fa6a168cf8b0861045d6e562f211a70c4a1cdbcf0417898763": [
"5f4711a796c1116b5118ec35279fb64d551d9b38813d2939954dd2df5160d3d9": [
"12"
]
},
"omitempty": [
"QkCcsJ+pRfpqFoz4sIYQRdblYvIRpwxKHNvPBBeJh2M=",
"X0cRp5bBEWtRGOw1J5+2TVUdmziBPSk5lU3S31Fg09k=",
"SOTAo46Q+TUtHQlIlEZEPr0XsZBPTwAC/olMLD9iRXo=",
"Zdx8F59oNHzxL4bhxR5U6K7u1XnUxxUIK7igOCwagVM="
"Zdx8F59oNHzxL4bhxR5U6K7u1XnUxxUIK7igOCwagVM=",
"QkCcsJ+pRfpqFoz4sIYQRdblYvIRpwxKHNvPBBeJh2M="
],
"ExpectedError": "slashable attestation",
"AnyError": false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ func MajoritySlashable() tests.SpecTest {
keySet := testingutils.Testing4SharesSet()
sharesPKBytes := make([]types.ShareValidatorPK, 0)
sharesPKString := make([]string, 0)
for _, shareKey := range keySet.Shares {
shareBytes := shareKey.Serialize()
for _, opShare := range testingutils.SortedMapKeys(keySet.Shares) {
shareBytes := opShare.Value.Serialize()
sharesPKBytes = append(sharesPKBytes, shareBytes)
sharesPKString = append(sharesPKString, hex.EncodeToString(shareBytes))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ func MinoritySlashable() tests.SpecTest {
keySet := testingutils.Testing4SharesSet()
sharesPKBytes := make([]types.ShareValidatorPK, 0)
sharesPKString := make([]string, 0)
for _, shareKey := range keySet.Shares {
shareBytes := shareKey.Serialize()
for _, opShare := range testingutils.SortedMapKeys(keySet.Shares) {
shareBytes := opShare.Value.Serialize()
sharesPKBytes = append(sharesPKBytes, shareBytes)
sharesPKString = append(sharesPKString, hex.EncodeToString(shareBytes))
}
Expand Down
12 changes: 8 additions & 4 deletions types/testingutils/beacon_node_attestation.go
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,8 @@ var TestingAttestationResponseBeaconObjectForDuty = func(ks *TestKeySet, version

var TestingSignedAttestationSSZRootForKeyMap = func(ksMap map[phase0.ValidatorIndex]*TestKeySet) []string {
ret := make([]string, 0)
for _, ks := range ksMap {
for _, valKs := range SortedMapKeys(ksMap) {
ks := valKs.Value
duty := TestingAttesterDuty(spec.DataVersionPhase0).ValidatorDuties[0]
aggregationBitfield := bitfield.NewBitlist(duty.CommitteeLength)
aggregationBitfield.SetBitAt(duty.ValidatorCommitteeIndex, true)
Expand All @@ -440,8 +441,9 @@ var TestingSignedAttestationSSZRootForKeyMap = func(ksMap map[phase0.ValidatorIn

var TestingElectraAttestationSSZRootForKeyMap = func(ksMap map[phase0.ValidatorIndex]*TestKeySet) []string {
ret := make([]string, 0)
for valIdx, ks := range ksMap {

for _, valKs := range SortedMapKeys(ksMap) {
ks := valKs.Value
valIdx := valKs.Key
committeeDuty := TestingAttesterDutyForValidator(spec.DataVersionElectra, valIdx)
duty := committeeDuty.ValidatorDuties[0]

Expand All @@ -467,8 +469,10 @@ var TestingElectraAttestationSSZRootForKeyMap = func(ksMap map[phase0.ValidatorI

var TestingElectraSingleAttestationSSZRootForKeyMap = func(ksMap map[phase0.ValidatorIndex]*TestKeySet) []string {
ret := make([]string, 0)
for valIdx, ks := range ksMap {

for _, valKs := range SortedMapKeys(ksMap) {
ks := valKs.Value
valIdx := valKs.Key
committeeDuty := TestingAttesterDutyForValidator(spec.DataVersionElectra, valIdx)
duty := committeeDuty.ValidatorDuties[0]

Expand Down
4 changes: 3 additions & 1 deletion types/testingutils/beacon_node_sync_committee.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ var TestingSignedSyncCommitteeBlockRootForValidatorIndex = func(ks *TestKeySet,

var TestingSignedSyncCommitteeBlockRootSSZRootForKeyMap = func(ksMap map[phase0.ValidatorIndex]*TestKeySet, version spec.DataVersion) []string {
ret := make([]string, 0)
for valIdx, ks := range ksMap {
for _, valKs := range SortedMapKeys(ksMap) {
ks := valKs.Value
valIdx := valKs.Key
ret = append(ret, GetSSZRootNoError(&altair.SyncCommitteeMessage{
Slot: TestingDutySlotV(version),
BeaconBlockRoot: TestingBlockRoot,
Expand Down
65 changes: 21 additions & 44 deletions types/testingutils/ssv_msgs_committee_duty.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package testingutils

import (
"fmt"
"sort"

"github.com/attestantio/go-eth2-client/spec"
"github.com/attestantio/go-eth2-client/spec/phase0"
Expand Down Expand Up @@ -77,7 +76,9 @@ var PostConsensusAttestationMsgForKeySetWithSlot = func(keySetMap map[phase0.Val

var ret *types.PartialSignatureMessages
// Get post consensus for attestations for each validator in shares
for valIdx, ks := range keySetMap {
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key
pSigMsgs := postConsensusAttestationMsg(ks.Shares[id], id, slot, false, false, valIdx)
if ret == nil {
ret = pSigMsgs
Expand All @@ -103,19 +104,9 @@ var PostConsensusPartiallyWrongAttestationMsgForKeySet = func(keySetMap map[phas

var ret *types.PartialSignatureMessages

validatorIndexes := make([]phase0.ValidatorIndex, 0)
for valIdx := range keySetMap {
validatorIndexes = append(validatorIndexes, valIdx)
}
sort.Slice(validatorIndexes, func(i, j int) bool {
return validatorIndexes[i] < validatorIndexes[j]
})

for _, valIdx := range validatorIndexes {
ks, ok := keySetMap[valIdx]
if !ok {
panic("validator index not in key set map")
}
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key

invalidMsgFlag := (msgIndex < numValid)

Expand Down Expand Up @@ -279,7 +270,9 @@ var PostConsensusAttestationAndSyncCommitteeMsgForKeySetWithSlot = func(keySetMa

var ret *types.PartialSignatureMessages
// Get post consensus for attestations for each validator in shares
for valIdx, ks := range keySetMap {
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key
pSigMsgs := postConsensusAttestationMsg(ks.Shares[id], id, slot, false, false, valIdx)
if ret == nil {
ret = pSigMsgs
Expand All @@ -288,7 +281,9 @@ var PostConsensusAttestationAndSyncCommitteeMsgForKeySetWithSlot = func(keySetMa
}
}
// Get post consensus for sync committees for each validator in shares
for valIdx, ks := range keySetMap {
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key
pSigMsgs := postConsensusSyncCommitteeMsg(ks.Shares[id], id, slot, false, false, valIdx)
if ret == nil {
ret = pSigMsgs
Expand All @@ -314,19 +309,9 @@ var PostConsensusPartiallyWrongAttestationAndSyncCommitteeMsgForKeySet = func(ke

var ret *types.PartialSignatureMessages

validatorIndexes := make([]phase0.ValidatorIndex, 0)
for valIdx := range keySetMap {
validatorIndexes = append(validatorIndexes, valIdx)
}
sort.Slice(validatorIndexes, func(i, j int) bool {
return validatorIndexes[i] < validatorIndexes[j]
})

for _, valIdx := range validatorIndexes {
ks, ok := keySetMap[valIdx]
if !ok {
panic("validator index not in key set map")
}
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key

invalidMsgFlag := (msgIndex < numValid)

Expand Down Expand Up @@ -454,7 +439,9 @@ var PostConsensusSyncCommitteeMsgForKeySetWithSlot = func(keySetMap map[phase0.V

var ret *types.PartialSignatureMessages
// Get post consensus for sync committees for each validator in shares
for valIdx, ks := range keySetMap {
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key
pSigMsgs := postConsensusSyncCommitteeMsg(ks.Shares[id], id, slot, false, false, valIdx)
if ret == nil {
ret = pSigMsgs
Expand All @@ -480,19 +467,9 @@ var PostConsensusPartiallyWrongSyncCommitteeMsgForKeySet = func(keySetMap map[ph

var ret *types.PartialSignatureMessages

validatorIndexes := make([]phase0.ValidatorIndex, 0)
for valIdx := range keySetMap {
validatorIndexes = append(validatorIndexes, valIdx)
}
sort.Slice(validatorIndexes, func(i, j int) bool {
return validatorIndexes[i] < validatorIndexes[j]
})

for _, valIdx := range validatorIndexes {
ks, ok := keySetMap[valIdx]
if !ok {
panic("validator index not in key set map")
}
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key

invalidMsgFlag := (msgIndex < numValid)

Expand Down
35 changes: 35 additions & 0 deletions types/testingutils/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package testingutils

import (
"sort"

"golang.org/x/exp/constraints"
)

// SortMapByKey sorts a map by its keys and returns a sorted slice of key-value pairs.
func SortedMapKeys[K constraints.Ordered, V any](m map[K]V) []struct {
Key K
Value V
} {
// Extract and sort keys
keys := make([]K, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Slice(keys, func(i, j int) bool { return keys[i] < keys[j] })

// Create sorted key-value pairs
pairs := make([]struct {
Key K
Value V
}, len(keys))

for i, k := range keys {
pairs[i] = struct {
Key K
Value V
}{k, m[k]}
}

return pairs
}

0 comments on commit 3d6c3ac

Please sign in to comment.