@@ -15,7 +15,7 @@ import (
1515func makeValidators (n int , votingPower int64 ) ([]* core.Validator , []ed25519.PrivKey ) {
1616 validators := make ([]* core.Validator , n )
1717 privKeys := make ([]ed25519.PrivKey , n )
18- for i := 0 ; i < n ; i ++ {
18+ for i := range n {
1919 privKeys [i ] = ed25519 .GenPrivKey ()
2020 validators [i ] = core .NewValidator (privKeys [i ].PubKey (), votingPower )
2121 }
@@ -59,37 +59,67 @@ func TestSignatureSet(t *testing.T) {
5959 // 2/3 of 50 = 33 requiredVotingPower
6060 // 2/3 of 5 = 3 requiredCount
6161 // Add 3 signatures (30 voting power, meets count threshold of 3 but not voting power threshold of 33)
62- for i := 0 ; i < 3 ; i ++ {
62+ for i := range 3 {
6363 signature , err := s .privKeys [i ].Sign (s .signBytes )
6464 require .NoError (t , err )
6565 require .NoError (t , s .sigSet .Add (s .validators [i ], signature ))
6666 }
6767
68+ // Check that Done() is NOT closed when thresholds are not met
69+ select {
70+ case <- s .sigSet .Done ():
71+ t .Fatal ("Done() should not be closed when thresholds are not met" )
72+ default :
73+ }
74+
6875 sigs , err := s .sigSet .Signatures ()
69- require .ErrorIs (t , err , validator .ErrNotEnoughVotingPower )
7076 require .Nil (t , sigs )
77+ require .Error (t , err )
78+
79+ var sigErr * validator.NotEnoughSignaturesError
80+ require .ErrorAs (t , err , & sigErr )
81+ require .Len (t , sigErr .Collected , 3 )
82+ require .Equal (t , int64 (30 ), sigErr .CollectedPower )
83+ require .Equal (t , int64 (33 ), sigErr .RequiredPower )
84+ require .Equal (t , 3 , sigErr .RequiredCount )
85+ require .Contains (t , err .Error (), "not enough voting power" )
7186 })
7287
7388 t .Run ("NotEnoughSignatures" , func (t * testing.T ) {
7489 s := setupSignatureSet (5 , 10 , twoThirds , twoThirds )
7590
7691 // Add only 2 signatures (requiredCount = 3)
77- for i := 0 ; i < 2 ; i ++ {
92+ for i := range 2 {
7893 signature , err := s .privKeys [i ].Sign (s .signBytes )
7994 require .NoError (t , err )
8095 require .NoError (t , s .sigSet .Add (s .validators [i ], signature ))
8196 }
8297
98+ // Check that Done() is NOT closed when thresholds are not met
99+ select {
100+ case <- s .sigSet .Done ():
101+ t .Fatal ("Done() should not be closed when thresholds are not met" )
102+ default :
103+ }
104+
83105 sigs , err := s .sigSet .Signatures ()
84- require .ErrorIs (t , err , validator .ErrNotEnoughSignatures )
85106 require .Nil (t , sigs )
107+ require .Error (t , err )
108+
109+ var sigErr * validator.NotEnoughSignaturesError
110+ require .ErrorAs (t , err , & sigErr )
111+ require .Len (t , sigErr .Collected , 2 )
112+ require .Equal (t , 3 , sigErr .RequiredCount )
113+ require .Equal (t , int64 (20 ), sigErr .CollectedPower )
114+ require .Equal (t , int64 (33 ), sigErr .RequiredPower )
115+ require .Contains (t , err .Error (), "not enough signatures" )
86116 })
87117
88118 t .Run ("SuccessSequential" , func (t * testing.T ) {
89119 s := setupSignatureSet (5 , 10 , twoThirds , twoThirds )
90120
91121 // Add 4 signatures (40 voting power, meets both thresholds)
92- for i := 0 ; i < 4 ; i ++ {
122+ for i := range 4 {
93123 signature , err := s .privKeys [i ].Sign (s .signBytes )
94124 require .NoError (t , err )
95125 require .NoError (t , s .sigSet .Add (s .validators [i ], signature ))
@@ -111,7 +141,7 @@ func TestSignatureSet(t *testing.T) {
111141 s := setupSignatureSet (10 , 10 , twoThirds , twoThirds )
112142
113143 var wg sync.WaitGroup
114- for i := 0 ; i < 10 ; i ++ {
144+ for i := range 10 {
115145 wg .Add (1 )
116146 go func (idx int ) {
117147 defer wg .Done ()
@@ -150,7 +180,7 @@ func TestSignatureSet(t *testing.T) {
150180 s := setupSignatureSet (5 , 10 , half , half )
151181
152182 // Add 3 valid signatures (30 voting power, meets threshold of 25)
153- for i := 0 ; i < 3 ; i ++ {
183+ for i := range 3 {
154184 signature , err := s .privKeys [i ].Sign (s .signBytes )
155185 require .NoError (t , err )
156186 require .NoError (t , s .sigSet .Add (s .validators [i ], signature ))
0 commit comments