Skip to content

Commit f458045

Browse files
author
Dan Laine
authored
Fix flaky TestFindNextKeyRandom test (ava-labs#1624)
1 parent 689aec6 commit f458045

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

x/sync/sync_test.go

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,7 @@ func TestFindNextKeyRandom(t *testing.T) {
531531
key := make([]byte, rand.Intn(maxKeyLen))
532532
_, _ = rand.Read(key)
533533
val := make([]byte, rand.Intn(maxValLen))
534+
_, _ = rand.Read(val)
534535
require.NoError(db.Put(key, val))
535536
}
536537
}
@@ -543,6 +544,7 @@ func TestFindNextKeyRandom(t *testing.T) {
543544
rangeStart []byte
544545
rangeEnd []byte
545546
)
547+
// Generate a valid range start and end
546548
for rangeStart == nil || bytes.Compare(rangeStart, rangeEnd) == 1 {
547549
rangeStart = make([]byte, rand.Intn(maxRangeStartLen)+1)
548550
_, _ = rand.Read(rangeStart)
@@ -582,9 +584,8 @@ func TestFindNextKeyRandom(t *testing.T) {
582584
id ids.ID
583585
}
584586

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.
586588
remoteKeyIDs := []keyAndID{}
587-
588589
for _, node := range remoteProof.EndProof {
589590
for childIdx, childID := range node.Children {
590591
remoteKeyIDs = append(remoteKeyIDs, keyAndID{
@@ -622,7 +623,7 @@ func TestFindNextKeyRandom(t *testing.T) {
622623
firstIdxOutOfRange = len(keyIDs)
623624
)
624625
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 {
626627
firstIdxInRange = i
627628
firstIdxInRangeFound = true
628629
continue
@@ -635,14 +636,14 @@ func TestFindNextKeyRandom(t *testing.T) {
635636
return firstIdxInRange, firstIdxOutOfRange
636637
}
637638

638-
remoteFirstIdxInRange, remoteFirstIdxOutOfRange := findBounds(remoteKeyIDs)
639-
remoteKeyIDs = remoteKeyIDs[remoteFirstIdxInRange:remoteFirstIdxOutOfRange]
639+
remoteFirstIdxAfterLastReceived, remoteFirstIdxAfterEnd := findBounds(remoteKeyIDs)
640+
remoteKeyIDs = remoteKeyIDs[remoteFirstIdxAfterLastReceived:remoteFirstIdxAfterEnd]
640641

641-
localFirstIdxInRange, localFirstIdxOutOfRange := findBounds(localKeyIDs)
642-
localKeyIDs = localKeyIDs[localFirstIdxInRange:localFirstIdxOutOfRange]
642+
localFirstIdxAfterLastReceived, localFirstIdxAfterEnd := findBounds(localKeyIDs)
643+
localKeyIDs = localKeyIDs[localFirstIdxAfterLastReceived:localFirstIdxAfterEnd]
643644

644645
// 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.
646647
var (
647648
smallestDiffKey merkledb.SerializedPath
648649
foundDiff bool
@@ -654,19 +655,15 @@ func TestFindNextKeyRandom(t *testing.T) {
654655
smaller, bigger = localKeyIDs[i], remoteKeyIDs[i]
655656
}
656657

657-
if !smaller.key.Equal(bigger.key) {
658+
if !smaller.key.Equal(bigger.key) || smaller.id != bigger.id {
658659
smallestDiffKey = smaller.key
659660
foundDiff = true
660661
break
661662
}
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-
}
668663
}
669664
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.)
670667
if len(remoteKeyIDs) < len(localKeyIDs) {
671668
smallestDiffKey = localKeyIDs[len(remoteKeyIDs)].key
672669
} else if len(remoteKeyIDs) > len(localKeyIDs) {
@@ -693,6 +690,8 @@ func TestFindNextKeyRandom(t *testing.T) {
693690
require.NoError(err)
694691

695692
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.
696695
require.Nil(gotFirstDiff)
697696
} else {
698697
require.Equal(smallestDiffKey.Value, gotFirstDiff)

0 commit comments

Comments
 (0)