@@ -697,6 +697,17 @@ func TestContractStakingIndexerVotes(t *testing.T) {
697697 r .EqualValues (50 , indexer .CandidateVotes (delegate1 ).Uint64 ())
698698 r .EqualValues (20 , indexer .CandidateVotes (delegate2 ).Uint64 ())
699699
700+ // create & merge bucket 8, 9, 10
701+ height ++
702+ handler = newContractStakingEventHandler (indexer .cache )
703+ stake (r , handler , owner , delegate1 , 8 , 20 , 20 , height )
704+ stake (r , handler , owner , delegate2 , 9 , 20 , 20 , height )
705+ stake (r , handler , owner , delegate2 , 10 , 20 , 20 , height )
706+ mergeBuckets (r , handler , []int64 {8 , 9 , 10 }, 60 , 20 )
707+ r .NoError (indexer .commit (handler , height ))
708+ r .EqualValues (110 , indexer .CandidateVotes (delegate1 ).Uint64 ())
709+ r .EqualValues (20 , indexer .CandidateVotes (delegate2 ).Uint64 ())
710+
700711 t .Run ("Height" , func (t * testing.T ) {
701712 h , err := indexer .Height ()
702713 r .NoError (err )
@@ -723,7 +734,7 @@ func TestContractStakingIndexerVotes(t *testing.T) {
723734 t .Run ("Buckets" , func (t * testing.T ) {
724735 bts , err := indexer .Buckets ()
725736 r .NoError (err )
726- r .Len (bts , 5 )
737+ r .Len (bts , 6 )
727738 slices .SortFunc (bts , func (i , j * staking.VoteBucket ) bool {
728739 return i .Index < j .Index
729740 })
@@ -732,46 +743,55 @@ func TestContractStakingIndexerVotes(t *testing.T) {
732743 r .EqualValues (3 , bts [2 ].Index )
733744 r .EqualValues (4 , bts [3 ].Index )
734745 r .EqualValues (5 , bts [4 ].Index )
746+ r .EqualValues (8 , bts [5 ].Index )
735747 r .EqualValues (10 , bts [0 ].StakedDurationBlockNumber )
736748 r .EqualValues (20 , bts [1 ].StakedDurationBlockNumber )
737749 r .EqualValues (20 , bts [2 ].StakedDurationBlockNumber )
738750 r .EqualValues (20 , bts [3 ].StakedDurationBlockNumber )
739751 r .EqualValues (20 , bts [4 ].StakedDurationBlockNumber )
752+ r .EqualValues (20 , bts [5 ].StakedDurationBlockNumber )
740753 r .EqualValues (10 , bts [0 ].StakedAmount .Int64 ())
741754 r .EqualValues (30 , bts [1 ].StakedAmount .Int64 ())
742755 r .EqualValues (20 , bts [2 ].StakedAmount .Int64 ())
743756 r .EqualValues (20 , bts [3 ].StakedAmount .Int64 ())
744757 r .EqualValues (60 , bts [4 ].StakedAmount .Int64 ())
758+ r .EqualValues (60 , bts [5 ].StakedAmount .Int64 ())
745759 r .EqualValues (delegate1 .String (), bts [0 ].Candidate .String ())
746760 r .EqualValues (delegate1 .String (), bts [1 ].Candidate .String ())
747761 r .EqualValues (delegate1 .String (), bts [2 ].Candidate .String ())
748762 r .EqualValues (delegate2 .String (), bts [3 ].Candidate .String ())
749763 r .EqualValues (delegate2 .String (), bts [4 ].Candidate .String ())
764+ r .EqualValues (delegate1 .String (), bts [5 ].Candidate .String ())
750765 r .EqualValues (owner .String (), bts [0 ].Owner .String ())
751766 r .EqualValues (owner .String (), bts [1 ].Owner .String ())
752767 r .EqualValues (owner .String (), bts [2 ].Owner .String ())
753768 r .EqualValues (delegate2 .String (), bts [3 ].Owner .String ())
754769 r .EqualValues (owner .String (), bts [4 ].Owner .String ())
770+ r .EqualValues (owner .String (), bts [5 ].Owner .String ())
755771 r .False (bts [0 ].AutoStake )
756772 r .True (bts [1 ].AutoStake )
757773 r .True (bts [2 ].AutoStake )
758774 r .True (bts [3 ].AutoStake )
759775 r .False (bts [4 ].AutoStake )
776+ r .True (bts [5 ].AutoStake )
760777 r .EqualValues (1 , bts [0 ].CreateBlockHeight )
761778 r .EqualValues (1 , bts [1 ].CreateBlockHeight )
762779 r .EqualValues (1 , bts [2 ].CreateBlockHeight )
763780 r .EqualValues (1 , bts [3 ].CreateBlockHeight )
764781 r .EqualValues (7 , bts [4 ].CreateBlockHeight )
782+ r .EqualValues (10 , bts [5 ].CreateBlockHeight )
765783 r .EqualValues (3 , bts [0 ].StakeStartBlockHeight )
766784 r .EqualValues (1 , bts [1 ].StakeStartBlockHeight )
767785 r .EqualValues (1 , bts [2 ].StakeStartBlockHeight )
768786 r .EqualValues (1 , bts [3 ].StakeStartBlockHeight )
769787 r .EqualValues (9 , bts [4 ].StakeStartBlockHeight )
788+ r .EqualValues (10 , bts [5 ].StakeStartBlockHeight )
770789 r .EqualValues (4 , bts [0 ].UnstakeStartBlockHeight )
771790 r .EqualValues (maxBlockNumber , bts [1 ].UnstakeStartBlockHeight )
772791 r .EqualValues (maxBlockNumber , bts [2 ].UnstakeStartBlockHeight )
773792 r .EqualValues (maxBlockNumber , bts [3 ].UnstakeStartBlockHeight )
774793 r .EqualValues (9 , bts [4 ].UnstakeStartBlockHeight )
794+ r .EqualValues (maxBlockNumber , bts [5 ].UnstakeStartBlockHeight )
775795 for _ , b := range bts {
776796 r .EqualValues (0 , b .StakedDuration )
777797 r .EqualValues (time.Time {}, b .CreateTime )
@@ -784,13 +804,14 @@ func TestContractStakingIndexerVotes(t *testing.T) {
784804 t .Run ("BucketsByCandidate" , func (t * testing.T ) {
785805 d1Bts , err := indexer .BucketsByCandidate (delegate1 )
786806 r .NoError (err )
787- r .Len (d1Bts , 3 )
807+ r .Len (d1Bts , 4 )
788808 slices .SortFunc (d1Bts , func (i , j * staking.VoteBucket ) bool {
789809 return i .Index < j .Index
790810 })
791811 r .EqualValues (1 , d1Bts [0 ].Index )
792812 r .EqualValues (2 , d1Bts [1 ].Index )
793813 r .EqualValues (3 , d1Bts [2 ].Index )
814+ r .EqualValues (8 , d1Bts [3 ].Index )
794815 d2Bts , err := indexer .BucketsByCandidate (delegate2 )
795816 r .NoError (err )
796817 r .Len (d2Bts , 2 )
@@ -802,9 +823,9 @@ func TestContractStakingIndexerVotes(t *testing.T) {
802823 })
803824
804825 t .Run ("BucketsByIndices" , func (t * testing.T ) {
805- bts , err := indexer .BucketsByIndices ([]uint64 {1 , 2 , 3 , 4 , 5 })
826+ bts , err := indexer .BucketsByIndices ([]uint64 {1 , 2 , 3 , 4 , 5 , 8 })
806827 r .NoError (err )
807- r .Len (bts , 5 )
828+ r .Len (bts , 6 )
808829 })
809830}
810831
@@ -817,17 +838,19 @@ func TestIndexer_PutBlock(t *testing.T) {
817838 startHeight uint64
818839 blockHeight uint64
819840 expectedHeight uint64
841+ errMsg string
820842 }{
821- {"block < height < start" , 10 , 20 , 9 , 10 },
822- {"block = height < start" , 10 , 20 , 10 , 10 },
823- {"height < block < start" , 10 , 20 , 11 , 10 },
824- {"height < block = start" , 10 , 20 , 20 , 20 },
825- {"height < start < block" , 10 , 20 , 21 , 21 },
826- {"block < start < height" , 20 , 10 , 9 , 20 },
827- {"block = start < height" , 20 , 10 , 10 , 20 },
828- {"start < block < height" , 20 , 10 , 11 , 20 },
829- {"start < block = height" , 20 , 10 , 20 , 20 },
830- {"start < height < block" , 20 , 10 , 21 , 21 },
843+ {"block < height < start" , 10 , 20 , 9 , 10 , "" },
844+ {"block = height < start" , 10 , 20 , 10 , 10 , "" },
845+ {"height < block < start" , 10 , 20 , 11 , 10 , "" },
846+ {"height < block = start" , 10 , 20 , 20 , 20 , "" },
847+ {"height < start < block" , 10 , 20 , 21 , 10 , "invalid block height 21, expect 20" },
848+ {"block < start < height" , 20 , 10 , 9 , 20 , "" },
849+ {"block = start < height" , 20 , 10 , 10 , 20 , "" },
850+ {"start < block < height" , 20 , 10 , 11 , 20 , "" },
851+ {"start < block = height" , 20 , 10 , 20 , 20 , "" },
852+ {"start < height < block" , 20 , 10 , 21 , 21 , "" },
853+ {"start < height < block+" , 20 , 10 , 22 , 20 , "invalid block height 22, expect 21" },
831854 }
832855
833856 for _ , c := range cases {
@@ -854,7 +877,11 @@ func TestIndexer_PutBlock(t *testing.T) {
854877 r .NoError (err )
855878 // Put the block
856879 err = indexer .PutBlock (context .Background (), & blk )
857- r .NoError (err )
880+ if c .errMsg != "" {
881+ r .ErrorContains (err , c .errMsg )
882+ } else {
883+ r .NoError (err )
884+ }
858885 // Check the block height
859886 r .EqualValues (c .expectedHeight , indexer .cache .Height ())
860887 })
0 commit comments