@@ -531,6 +531,7 @@ func TestFindNextKeyRandom(t *testing.T) {
531
531
key := make ([]byte , rand .Intn (maxKeyLen ))
532
532
_ , _ = rand .Read (key )
533
533
val := make ([]byte , rand .Intn (maxValLen ))
534
+ _ , _ = rand .Read (val )
534
535
require .NoError (db .Put (key , val ))
535
536
}
536
537
}
@@ -543,6 +544,7 @@ func TestFindNextKeyRandom(t *testing.T) {
543
544
rangeStart []byte
544
545
rangeEnd []byte
545
546
)
547
+ // Generate a valid range start and end
546
548
for rangeStart == nil || bytes .Compare (rangeStart , rangeEnd ) == 1 {
547
549
rangeStart = make ([]byte , rand .Intn (maxRangeStartLen )+ 1 )
548
550
_ , _ = rand .Read (rangeStart )
@@ -582,9 +584,8 @@ func TestFindNextKeyRandom(t *testing.T) {
582
584
id ids.ID
583
585
}
584
586
585
- // Set of key prefix/ID pairs proven by the remote database's proof.
587
+ // Set of key prefix/ID pairs proven by the remote database's end proof.
586
588
remoteKeyIDs := []keyAndID {}
587
-
588
589
for _ , node := range remoteProof .EndProof {
589
590
for childIdx , childID := range node .Children {
590
591
remoteKeyIDs = append (remoteKeyIDs , keyAndID {
@@ -622,7 +623,7 @@ func TestFindNextKeyRandom(t *testing.T) {
622
623
firstIdxOutOfRange = len (keyIDs )
623
624
)
624
625
for i , keyID := range keyIDs {
625
- if ! firstIdxInRangeFound && bytes .Compare (keyID .key .Value , lastReceivedKey ) >= 0 {
626
+ if ! firstIdxInRangeFound && bytes .Compare (keyID .key .Value , lastReceivedKey ) > 0 {
626
627
firstIdxInRange = i
627
628
firstIdxInRangeFound = true
628
629
continue
@@ -635,14 +636,14 @@ func TestFindNextKeyRandom(t *testing.T) {
635
636
return firstIdxInRange , firstIdxOutOfRange
636
637
}
637
638
638
- remoteFirstIdxInRange , remoteFirstIdxOutOfRange := findBounds (remoteKeyIDs )
639
- remoteKeyIDs = remoteKeyIDs [remoteFirstIdxInRange : remoteFirstIdxOutOfRange ]
639
+ remoteFirstIdxAfterLastReceived , remoteFirstIdxAfterEnd := findBounds (remoteKeyIDs )
640
+ remoteKeyIDs = remoteKeyIDs [remoteFirstIdxAfterLastReceived : remoteFirstIdxAfterEnd ]
640
641
641
- localFirstIdxInRange , localFirstIdxOutOfRange := findBounds (localKeyIDs )
642
- localKeyIDs = localKeyIDs [localFirstIdxInRange : localFirstIdxOutOfRange ]
642
+ localFirstIdxAfterLastReceived , localFirstIdxAfterEnd := findBounds (localKeyIDs )
643
+ localKeyIDs = localKeyIDs [localFirstIdxAfterLastReceived : localFirstIdxAfterEnd ]
643
644
644
645
// Find smallest difference between the set of key/ID pairs proven by
645
- // the remote/local proofs.
646
+ // the remote/local proofs for key/ID pairs after the last received key .
646
647
var (
647
648
smallestDiffKey merkledb.SerializedPath
648
649
foundDiff bool
@@ -654,19 +655,15 @@ func TestFindNextKeyRandom(t *testing.T) {
654
655
smaller , bigger = localKeyIDs [i ], remoteKeyIDs [i ]
655
656
}
656
657
657
- if ! smaller .key .Equal (bigger .key ) {
658
+ if ! smaller .key .Equal (bigger .key ) || smaller . id != bigger . id {
658
659
smallestDiffKey = smaller .key
659
660
foundDiff = true
660
661
break
661
662
}
662
- // The keys are the same. See if the IDs are different.
663
- if smaller .id != bigger .id {
664
- smallestDiffKey = smaller .key // Keys are same so either is fine
665
- foundDiff = true
666
- break
667
- }
668
663
}
669
664
if ! foundDiff {
665
+ // All the keys were equal. The smallest diff is the next key
666
+ // in the longer of the lists (if they're not same length.)
670
667
if len (remoteKeyIDs ) < len (localKeyIDs ) {
671
668
smallestDiffKey = localKeyIDs [len (remoteKeyIDs )].key
672
669
} else if len (remoteKeyIDs ) > len (localKeyIDs ) {
@@ -693,6 +690,8 @@ func TestFindNextKeyRandom(t *testing.T) {
693
690
require .NoError (err )
694
691
695
692
if bytes .Compare (smallestDiffKey .Value , rangeEnd ) >= 0 {
693
+ // The smallest key which differs is after the range end so the
694
+ // next key to get should be nil because we're done fetching the range.
696
695
require .Nil (gotFirstDiff )
697
696
} else {
698
697
require .Equal (smallestDiffKey .Value , gotFirstDiff )
0 commit comments