Skip to content

Commit cc7fa2d

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

File tree

1 file changed

+194
-129
lines changed

1 file changed

+194
-129
lines changed

ledger/common/common_test.go

Lines changed: 194 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -744,136 +744,151 @@ func TestBlake2b224_ToPlutusData(t *testing.T) {
744744
}
745745
}
746746

747+
var certificateTypeTests = []struct {
748+
name string
749+
cert Certificate
750+
expected uint
751+
}{
752+
{
753+
"StakeRegistration",
754+
&StakeRegistrationCertificate{
755+
CertType: uint(CertificateTypeStakeRegistration),
756+
},
757+
uint(CertificateTypeStakeRegistration),
758+
},
759+
{
760+
"StakeDeregistration",
761+
&StakeDeregistrationCertificate{
762+
CertType: uint(CertificateTypeStakeDeregistration),
763+
},
764+
uint(CertificateTypeStakeDeregistration),
765+
},
766+
{
767+
"StakeDelegation",
768+
&StakeDelegationCertificate{
769+
CertType: uint(CertificateTypeStakeDelegation),
770+
},
771+
uint(CertificateTypeStakeDelegation),
772+
},
773+
{
774+
"PoolRegistration",
775+
&PoolRegistrationCertificate{
776+
CertType: uint(CertificateTypePoolRegistration),
777+
},
778+
uint(CertificateTypePoolRegistration),
779+
},
780+
{
781+
"PoolRetirement",
782+
&PoolRetirementCertificate{
783+
CertType: uint(CertificateTypePoolRetirement),
784+
},
785+
uint(CertificateTypePoolRetirement),
786+
},
787+
{
788+
"GenesisKeyDelegation",
789+
&GenesisKeyDelegationCertificate{
790+
CertType: uint(CertificateTypeGenesisKeyDelegation),
791+
},
792+
uint(CertificateTypeGenesisKeyDelegation),
793+
},
794+
{
795+
"MoveInstantaneousRewards",
796+
&MoveInstantaneousRewardsCertificate{
797+
CertType: uint(CertificateTypeMoveInstantaneousRewards),
798+
},
799+
uint(CertificateTypeMoveInstantaneousRewards),
800+
},
801+
{
802+
"Registration",
803+
&RegistrationCertificate{
804+
CertType: uint(CertificateTypeRegistration),
805+
},
806+
uint(CertificateTypeRegistration),
807+
},
808+
{
809+
"Deregistration",
810+
&DeregistrationCertificate{
811+
CertType: uint(CertificateTypeDeregistration),
812+
},
813+
uint(CertificateTypeDeregistration),
814+
},
815+
{
816+
"VoteDelegation",
817+
&VoteDelegationCertificate{
818+
CertType: uint(CertificateTypeVoteDelegation),
819+
},
820+
uint(CertificateTypeVoteDelegation),
821+
},
822+
{
823+
"StakeVoteDelegation",
824+
&StakeVoteDelegationCertificate{
825+
CertType: uint(CertificateTypeStakeVoteDelegation),
826+
},
827+
uint(CertificateTypeStakeVoteDelegation),
828+
},
829+
{
830+
"StakeRegistrationDelegation",
831+
&StakeRegistrationDelegationCertificate{
832+
CertType: uint(CertificateTypeStakeRegistrationDelegation),
833+
},
834+
uint(CertificateTypeStakeRegistrationDelegation),
835+
},
836+
{
837+
"VoteRegistrationDelegation",
838+
&VoteRegistrationDelegationCertificate{
839+
CertType: uint(CertificateTypeVoteRegistrationDelegation),
840+
},
841+
uint(CertificateTypeVoteRegistrationDelegation),
842+
},
843+
{
844+
"StakeVoteRegistrationDelegation",
845+
&StakeVoteRegistrationDelegationCertificate{
846+
CertType: uint(CertificateTypeStakeVoteRegistrationDelegation),
847+
},
848+
uint(CertificateTypeStakeVoteRegistrationDelegation),
849+
},
850+
{
851+
"AuthCommitteeHot",
852+
&AuthCommitteeHotCertificate{
853+
CertType: uint(CertificateTypeAuthCommitteeHot),
854+
},
855+
uint(CertificateTypeAuthCommitteeHot),
856+
},
857+
{
858+
"ResignCommitteeCold",
859+
&ResignCommitteeColdCertificate{
860+
CertType: uint(CertificateTypeResignCommitteeCold),
861+
},
862+
uint(CertificateTypeResignCommitteeCold),
863+
},
864+
{
865+
"RegistrationDrep",
866+
&RegistrationDrepCertificate{
867+
CertType: uint(CertificateTypeRegistrationDrep),
868+
},
869+
uint(CertificateTypeRegistrationDrep),
870+
},
871+
{
872+
"DeregistrationDrep",
873+
&DeregistrationDrepCertificate{
874+
CertType: uint(CertificateTypeDeregistrationDrep),
875+
},
876+
uint(CertificateTypeDeregistrationDrep),
877+
},
878+
{
879+
"UpdateDrep",
880+
&UpdateDrepCertificate{CertType: uint(CertificateTypeUpdateDrep)},
881+
uint(CertificateTypeUpdateDrep),
882+
},
883+
{
884+
"LeiosEb",
885+
&LeiosEbCertificate{},
886+
uint(CertificateTypeLeiosEb),
887+
},
888+
}
889+
747890
func TestCertificateTypeMethods(t *testing.T) {
748-
tests := []struct {
749-
name string
750-
cert Certificate
751-
expected uint
752-
}{
753-
{
754-
"StakeRegistration",
755-
&StakeRegistrationCertificate{
756-
CertType: uint(CertificateTypeStakeRegistration),
757-
},
758-
uint(CertificateTypeStakeRegistration),
759-
},
760-
{
761-
"StakeDeregistration",
762-
&StakeDeregistrationCertificate{
763-
CertType: uint(CertificateTypeStakeDeregistration),
764-
},
765-
uint(CertificateTypeStakeDeregistration),
766-
},
767-
{
768-
"StakeDelegation",
769-
&StakeDelegationCertificate{
770-
CertType: uint(CertificateTypeStakeDelegation),
771-
},
772-
uint(CertificateTypeStakeDelegation),
773-
},
774-
{
775-
"PoolRegistration",
776-
&PoolRegistrationCertificate{
777-
CertType: uint(CertificateTypePoolRegistration),
778-
},
779-
uint(CertificateTypePoolRegistration),
780-
},
781-
{
782-
"PoolRetirement",
783-
&PoolRetirementCertificate{CertType: uint(CertificateTypePoolRetirement)},
784-
uint(CertificateTypePoolRetirement),
785-
},
786-
{
787-
"GenesisKeyDelegation",
788-
&GenesisKeyDelegationCertificate{
789-
CertType: uint(CertificateTypeGenesisKeyDelegation),
790-
},
791-
uint(CertificateTypeGenesisKeyDelegation),
792-
},
793-
{
794-
"MoveInstantaneousRewards",
795-
&MoveInstantaneousRewardsCertificate{
796-
CertType: uint(CertificateTypeMoveInstantaneousRewards),
797-
},
798-
uint(CertificateTypeMoveInstantaneousRewards),
799-
},
800-
{
801-
"Registration",
802-
&RegistrationCertificate{CertType: uint(CertificateTypeRegistration)},
803-
uint(CertificateTypeRegistration),
804-
},
805-
{
806-
"Deregistration",
807-
&DeregistrationCertificate{CertType: uint(CertificateTypeDeregistration)},
808-
uint(CertificateTypeDeregistration),
809-
},
810-
{
811-
"VoteDelegation",
812-
&VoteDelegationCertificate{CertType: uint(CertificateTypeVoteDelegation)},
813-
uint(CertificateTypeVoteDelegation),
814-
},
815-
{
816-
"StakeVoteDelegation",
817-
&StakeVoteDelegationCertificate{
818-
CertType: uint(CertificateTypeStakeVoteDelegation),
819-
},
820-
uint(CertificateTypeStakeVoteDelegation),
821-
},
822-
{
823-
"StakeRegistrationDelegation",
824-
&StakeRegistrationDelegationCertificate{
825-
CertType: uint(CertificateTypeStakeRegistrationDelegation),
826-
},
827-
uint(CertificateTypeStakeRegistrationDelegation),
828-
},
829-
{
830-
"VoteRegistrationDelegation",
831-
&VoteRegistrationDelegationCertificate{
832-
CertType: uint(CertificateTypeVoteRegistrationDelegation),
833-
},
834-
uint(CertificateTypeVoteRegistrationDelegation),
835-
},
836-
{
837-
"StakeVoteRegistrationDelegation",
838-
&StakeVoteRegistrationDelegationCertificate{
839-
CertType: uint(CertificateTypeStakeVoteRegistrationDelegation),
840-
},
841-
uint(CertificateTypeStakeVoteRegistrationDelegation),
842-
},
843-
{
844-
"AuthCommitteeHot",
845-
&AuthCommitteeHotCertificate{
846-
CertType: uint(CertificateTypeAuthCommitteeHot),
847-
},
848-
uint(CertificateTypeAuthCommitteeHot),
849-
},
850-
{
851-
"ResignCommitteeCold",
852-
&ResignCommitteeColdCertificate{
853-
CertType: uint(CertificateTypeResignCommitteeCold),
854-
},
855-
uint(CertificateTypeResignCommitteeCold),
856-
},
857-
{
858-
"RegistrationDrep",
859-
&RegistrationDrepCertificate{
860-
CertType: uint(CertificateTypeRegistrationDrep),
861-
},
862-
uint(CertificateTypeRegistrationDrep),
863-
},
864-
{
865-
"DeregistrationDrep",
866-
&DeregistrationDrepCertificate{
867-
CertType: uint(CertificateTypeDeregistrationDrep),
868-
},
869-
uint(CertificateTypeDeregistrationDrep),
870-
},
871-
{
872-
"UpdateDrep",
873-
&UpdateDrepCertificate{CertType: uint(CertificateTypeUpdateDrep)},
874-
uint(CertificateTypeUpdateDrep),
875-
},
876-
}
891+
tests := certificateTypeTests
877892

878893
for _, tt := range tests {
879894
t.Run(tt.name, func(t *testing.T) {
@@ -889,3 +904,53 @@ func TestCertificateTypeMethods(t *testing.T) {
889904
})
890905
}
891906
}
907+
908+
// TestCertificateTypeCoverage ensures all CertificateType constants are tested
909+
func TestCertificateTypeCoverage(t *testing.T) {
910+
// Get all CertificateType constants via reflection
911+
certTypeType := reflect.TypeOf(CertificateTypeStakeRegistration)
912+
if certTypeType.Kind() != reflect.Uint {
913+
t.Fatalf("CertificateType is not uint, got %s", certTypeType.Kind())
914+
}
915+
916+
// Collect all constants from the test table
917+
testedTypes := make(map[uint]bool)
918+
for _, tt := range certificateTypeTests {
919+
testedTypes[tt.expected] = true
920+
}
921+
922+
// Check that we have at least one test for each known certificate type constant
923+
// This is a best-effort check - if new constants are added, this test will need updating
924+
expectedTypes := map[uint]string{
925+
uint(CertificateTypeStakeRegistration): "CertificateTypeStakeRegistration",
926+
uint(CertificateTypeStakeDeregistration): "CertificateTypeStakeDeregistration",
927+
uint(CertificateTypeStakeDelegation): "CertificateTypeStakeDelegation",
928+
uint(CertificateTypePoolRegistration): "CertificateTypePoolRegistration",
929+
uint(CertificateTypePoolRetirement): "CertificateTypePoolRetirement",
930+
uint(CertificateTypeGenesisKeyDelegation): "CertificateTypeGenesisKeyDelegation",
931+
uint(CertificateTypeMoveInstantaneousRewards): "CertificateTypeMoveInstantaneousRewards",
932+
uint(CertificateTypeRegistration): "CertificateTypeRegistration",
933+
uint(CertificateTypeDeregistration): "CertificateTypeDeregistration",
934+
uint(CertificateTypeVoteDelegation): "CertificateTypeVoteDelegation",
935+
uint(CertificateTypeStakeVoteDelegation): "CertificateTypeStakeVoteDelegation",
936+
uint(CertificateTypeStakeRegistrationDelegation): "CertificateTypeStakeRegistrationDelegation",
937+
uint(CertificateTypeVoteRegistrationDelegation): "CertificateTypeVoteRegistrationDelegation",
938+
uint(CertificateTypeStakeVoteRegistrationDelegation): "CertificateTypeStakeVoteRegistrationDelegation",
939+
uint(CertificateTypeAuthCommitteeHot): "CertificateTypeAuthCommitteeHot",
940+
uint(CertificateTypeResignCommitteeCold): "CertificateTypeResignCommitteeCold",
941+
uint(CertificateTypeRegistrationDrep): "CertificateTypeRegistrationDrep",
942+
uint(CertificateTypeDeregistrationDrep): "CertificateTypeDeregistrationDrep",
943+
uint(CertificateTypeUpdateDrep): "CertificateTypeUpdateDrep",
944+
uint(CertificateTypeLeiosEb): "CertificateTypeLeiosEb",
945+
}
946+
947+
for certType, name := range expectedTypes {
948+
if !testedTypes[certType] {
949+
t.Errorf(
950+
"Certificate type %s (value %d) is not covered by TestCertificateTypeMethods",
951+
name,
952+
certType,
953+
)
954+
}
955+
}
956+
}

0 commit comments

Comments
 (0)