Skip to content

Commit 889d75d

Browse files
committed
test(ledger): verify all cert types
Signed-off-by: Chris Gianelloni <wolf31o2@blinklabs.io>
1 parent 910b0da commit 889d75d

File tree

1 file changed

+87
-4
lines changed

1 file changed

+87
-4
lines changed

ledger/common/common_test.go

Lines changed: 87 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -780,7 +780,9 @@ func TestCertificateTypeMethods(t *testing.T) {
780780
},
781781
{
782782
"PoolRetirement",
783-
&PoolRetirementCertificate{CertType: uint(CertificateTypePoolRetirement)},
783+
&PoolRetirementCertificate{
784+
CertType: uint(CertificateTypePoolRetirement),
785+
},
784786
uint(CertificateTypePoolRetirement),
785787
},
786788
{
@@ -799,17 +801,23 @@ func TestCertificateTypeMethods(t *testing.T) {
799801
},
800802
{
801803
"Registration",
802-
&RegistrationCertificate{CertType: uint(CertificateTypeRegistration)},
804+
&RegistrationCertificate{
805+
CertType: uint(CertificateTypeRegistration),
806+
},
803807
uint(CertificateTypeRegistration),
804808
},
805809
{
806810
"Deregistration",
807-
&DeregistrationCertificate{CertType: uint(CertificateTypeDeregistration)},
811+
&DeregistrationCertificate{
812+
CertType: uint(CertificateTypeDeregistration),
813+
},
808814
uint(CertificateTypeDeregistration),
809815
},
810816
{
811817
"VoteDelegation",
812-
&VoteDelegationCertificate{CertType: uint(CertificateTypeVoteDelegation)},
818+
&VoteDelegationCertificate{
819+
CertType: uint(CertificateTypeVoteDelegation),
820+
},
813821
uint(CertificateTypeVoteDelegation),
814822
},
815823
{
@@ -889,3 +897,78 @@ func TestCertificateTypeMethods(t *testing.T) {
889897
})
890898
}
891899
}
900+
901+
// TestCertificateTypeCoverage ensures all CertificateType constants are tested
902+
func TestCertificateTypeCoverage(t *testing.T) {
903+
// Get all CertificateType constants via reflection
904+
certTypeType := reflect.TypeOf(CertificateTypeStakeRegistration)
905+
if certTypeType.Kind() != reflect.Uint {
906+
t.Fatalf("CertificateType is not uint, got %s", certTypeType.Kind())
907+
}
908+
909+
// Collect all constants from the test table
910+
testedTypes := make(map[uint]bool)
911+
for _, tt := range []struct {
912+
name string
913+
cert Certificate
914+
expected uint
915+
}{
916+
{"StakeRegistration", &StakeRegistrationCertificate{CertType: uint(CertificateTypeStakeRegistration)}, uint(CertificateTypeStakeRegistration)},
917+
{"StakeDeregistration", &StakeDeregistrationCertificate{CertType: uint(CertificateTypeStakeDeregistration)}, uint(CertificateTypeStakeDeregistration)},
918+
{"StakeDelegation", &StakeDelegationCertificate{CertType: uint(CertificateTypeStakeDelegation)}, uint(CertificateTypeStakeDelegation)},
919+
{"PoolRegistration", &PoolRegistrationCertificate{CertType: uint(CertificateTypePoolRegistration)}, uint(CertificateTypePoolRegistration)},
920+
{"PoolRetirement", &PoolRetirementCertificate{CertType: uint(CertificateTypePoolRetirement)}, uint(CertificateTypePoolRetirement)},
921+
{"GenesisKeyDelegation", &GenesisKeyDelegationCertificate{CertType: uint(CertificateTypeGenesisKeyDelegation)}, uint(CertificateTypeGenesisKeyDelegation)},
922+
{"MoveInstantaneousRewards", &MoveInstantaneousRewardsCertificate{CertType: uint(CertificateTypeMoveInstantaneousRewards)}, uint(CertificateTypeMoveInstantaneousRewards)},
923+
{"Registration", &RegistrationCertificate{CertType: uint(CertificateTypeRegistration)}, uint(CertificateTypeRegistration)},
924+
{"Deregistration", &DeregistrationCertificate{CertType: uint(CertificateTypeDeregistration)}, uint(CertificateTypeDeregistration)},
925+
{"VoteDelegation", &VoteDelegationCertificate{CertType: uint(CertificateTypeVoteDelegation)}, uint(CertificateTypeVoteDelegation)},
926+
{"StakeVoteDelegation", &StakeVoteDelegationCertificate{CertType: uint(CertificateTypeStakeVoteDelegation)}, uint(CertificateTypeStakeVoteDelegation)},
927+
{"StakeRegistrationDelegation", &StakeRegistrationDelegationCertificate{CertType: uint(CertificateTypeStakeRegistrationDelegation)}, uint(CertificateTypeStakeRegistrationDelegation)},
928+
{"VoteRegistrationDelegation", &VoteRegistrationDelegationCertificate{CertType: uint(CertificateTypeVoteRegistrationDelegation)}, uint(CertificateTypeVoteRegistrationDelegation)},
929+
{"StakeVoteRegistrationDelegation", &StakeVoteRegistrationDelegationCertificate{CertType: uint(CertificateTypeStakeVoteRegistrationDelegation)}, uint(CertificateTypeStakeVoteRegistrationDelegation)},
930+
{"AuthCommitteeHot", &AuthCommitteeHotCertificate{CertType: uint(CertificateTypeAuthCommitteeHot)}, uint(CertificateTypeAuthCommitteeHot)},
931+
{"ResignCommitteeCold", &ResignCommitteeColdCertificate{CertType: uint(CertificateTypeResignCommitteeCold)}, uint(CertificateTypeResignCommitteeCold)},
932+
{"RegistrationDrep", &RegistrationDrepCertificate{CertType: uint(CertificateTypeRegistrationDrep)}, uint(CertificateTypeRegistrationDrep)},
933+
{"DeregistrationDrep", &DeregistrationDrepCertificate{CertType: uint(CertificateTypeDeregistrationDrep)}, uint(CertificateTypeDeregistrationDrep)},
934+
{"UpdateDrep", &UpdateDrepCertificate{CertType: uint(CertificateTypeUpdateDrep)}, uint(CertificateTypeUpdateDrep)},
935+
{"LeiosEb", &LeiosEbCertificate{}, uint(CertificateTypeLeiosEb)},
936+
} {
937+
testedTypes[tt.expected] = true
938+
}
939+
940+
// Check that we have at least one test for each known certificate type constant
941+
// This is a best-effort check - if new constants are added, this test will need updating
942+
expectedTypes := map[uint]string{
943+
uint(CertificateTypeStakeRegistration): "CertificateTypeStakeRegistration",
944+
uint(CertificateTypeStakeDeregistration): "CertificateTypeStakeDeregistration",
945+
uint(CertificateTypeStakeDelegation): "CertificateTypeStakeDelegation",
946+
uint(CertificateTypePoolRegistration): "CertificateTypePoolRegistration",
947+
uint(CertificateTypePoolRetirement): "CertificateTypePoolRetirement",
948+
uint(CertificateTypeGenesisKeyDelegation): "CertificateTypeGenesisKeyDelegation",
949+
uint(CertificateTypeMoveInstantaneousRewards): "CertificateTypeMoveInstantaneousRewards",
950+
uint(CertificateTypeRegistration): "CertificateTypeRegistration",
951+
uint(CertificateTypeDeregistration): "CertificateTypeDeregistration",
952+
uint(CertificateTypeVoteDelegation): "CertificateTypeVoteDelegation",
953+
uint(CertificateTypeStakeVoteDelegation): "CertificateTypeStakeVoteDelegation",
954+
uint(CertificateTypeStakeRegistrationDelegation): "CertificateTypeStakeRegistrationDelegation",
955+
uint(CertificateTypeVoteRegistrationDelegation): "CertificateTypeVoteRegistrationDelegation",
956+
uint(CertificateTypeStakeVoteRegistrationDelegation): "CertificateTypeStakeVoteRegistrationDelegation",
957+
uint(CertificateTypeAuthCommitteeHot): "CertificateTypeAuthCommitteeHot",
958+
uint(CertificateTypeResignCommitteeCold): "CertificateTypeResignCommitteeCold",
959+
uint(CertificateTypeRegistrationDrep): "CertificateTypeRegistrationDrep",
960+
uint(CertificateTypeDeregistrationDrep): "CertificateTypeDeregistrationDrep",
961+
uint(CertificateTypeUpdateDrep): "CertificateTypeUpdateDrep",
962+
uint(CertificateTypeLeiosEb): "CertificateTypeLeiosEb",
963+
}
964+
965+
for certType, name := range expectedTypes {
966+
if !testedTypes[certType] {
967+
t.Errorf(
968+
"Certificate type %s (value %d) is not covered by TestCertificateTypeMethods",
969+
name,
970+
certType,
971+
)
972+
}
973+
}
974+
}

0 commit comments

Comments
 (0)