Skip to content

Commit

Permalink
More tests.
Browse files Browse the repository at this point in the history
Signed-off-by: Cody Littley <cody@eigenlabs.org>
  • Loading branch information
cody-littley committed Sep 3, 2024
1 parent a52844a commit 8697492
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 18 deletions.
5 changes: 5 additions & 0 deletions common/testutils/test_utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,8 @@ func ExecuteWithTimeout(f func(), duration time.Duration, debugInfo ...any) {
func RandomTime() time.Time {
return time.Unix(int64(rand.Int31()), int64(rand.Intn(int(time.Second))))
}

// RandomTimeInRange returns a random time within a given range.
func RandomTimeInRange(start time.Time, end time.Time) time.Time {
return start.Add(time.Duration(rand.Int63n(int64(end.Sub(start)))))
}
11 changes: 10 additions & 1 deletion lightnode/chunkgroup/map.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,16 @@ func (m *Map) GetRandomNode(
for key := range assignments {
assignment := assignments[key]
notYetPresent := qualifiedAssignments[key.lightNodeID] == nil
meetsTimeRequirement := minimumTimeInGroup == 0 || now.Sub(assignment.startOfEpoch) >= minimumTimeInGroup

var joinTime time.Time
if assignment.startOfEpoch.After(assignment.registration.RegistrationTime()) {
joinTime = assignment.startOfEpoch
} else {
joinTime = assignment.registration.RegistrationTime()
}
timeInGroup := now.Sub(joinTime)

meetsTimeRequirement := minimumTimeInGroup == 0 || timeInGroup >= minimumTimeInGroup
if notYetPresent && meetsTimeRequirement {
qualifiedAssignments[key.lightNodeID] = assignment
}
Expand Down
60 changes: 43 additions & 17 deletions lightnode/chunkgroup/map_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,11 @@ import (
"time"
)

func randomRegistration() *lightnode.Registration {
return lightnode.NewRegistration(rand.Uint64(), rand.Uint64(), tu.RandomTime())
func randomRegistration(startTime time.Time, lastRegistration time.Time) *lightnode.Registration {
return lightnode.NewRegistration(
rand.Uint64(),
rand.Uint64(),
tu.RandomTimeInRange(startTime, lastRegistration))
}

// TODO test that deletes things and ensures there is no garbage left in maps
Expand All @@ -23,6 +26,7 @@ func TestAddRemoveGetOneAssignment(t *testing.T) {
chunkGroupCount := uint32(rand.Intn(100) + 1)
startTime := tu.RandomTime()
shufflePeriod := time.Second * time.Duration(rand.Intn(10)+1)
lastRegistrationTime := startTime.Add(shufflePeriod * time.Duration(5))
assignmentCount := uint32(1)

cgMap := NewMap(chunkGroupCount, assignmentCount, shufflePeriod)
Expand All @@ -33,7 +37,7 @@ func TestAddRemoveGetOneAssignment(t *testing.T) {
// Add elements
elementsToAdd := 1_000
for i := 0; i < elementsToAdd; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration

assert.Nil(t, cgMap.Get(registration.ID()))
Expand Down Expand Up @@ -82,6 +86,7 @@ func TestAddRemoveGetMultipleAssignments(t *testing.T) {
chunkGroupCount := uint32(rand.Intn(100) + 1)
startTime := tu.RandomTime()
shufflePeriod := time.Second * time.Duration(rand.Intn(10)+1)
lastRegistrationTime := startTime.Add(shufflePeriod * time.Duration(5))
assignmentCount := uint32(rand.Intn(3) + 2)

cgMap := NewMap(chunkGroupCount, assignmentCount, shufflePeriod)
Expand All @@ -92,7 +97,7 @@ func TestAddRemoveGetMultipleAssignments(t *testing.T) {
// Add elements
elementsToAdd := 1_000
for i := 0; i < elementsToAdd; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration

assert.Nil(t, cgMap.Get(registration.ID()))
Expand Down Expand Up @@ -141,6 +146,7 @@ func TestChunkGroupCalculationsSingleAssignment(t *testing.T) {
chunkGroupCount := uint32(rand.Intn(100) + 1)
startTime := tu.RandomTime()
shufflePeriod := time.Second * time.Duration(rand.Intn(10)+1)
lastRegistrationTime := startTime.Add(shufflePeriod * time.Duration(5))
assignmentCount := uint32(1)

cgMap := NewMap(chunkGroupCount, assignmentCount, shufflePeriod)
Expand All @@ -151,7 +157,7 @@ func TestChunkGroupCalculationsSingleAssignment(t *testing.T) {
// Add elements
count := 1_000
for i := 0; i < count; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration
cgMap.Add(startTime, registration)
}
Expand All @@ -174,7 +180,7 @@ func TestChunkGroupCalculationsSingleAssignment(t *testing.T) {
numberToAdd := rand.Intn(10)
count += numberToAdd
for i := 0; i < numberToAdd; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration
cgMap.Add(now, registration)
}
Expand Down Expand Up @@ -232,8 +238,8 @@ func TestChunkGroupCalculationsMultipleAssignments(t *testing.T) {
chunkGroupCount := uint32(rand.Intn(100) + 1)
startTime := tu.RandomTime()
shufflePeriod := time.Second * time.Duration(rand.Intn(10)+1)
lastRegistrationTime := startTime.Add(shufflePeriod * time.Duration(5))
assignmentCount := uint32(rand.Intn(3) + 2)
//assignmentCount := uint32(rand.Intn(3) + 2)

cgMap := NewMap(chunkGroupCount, assignmentCount, shufflePeriod)
assert.Equal(t, uint32(0), cgMap.Size())
Expand All @@ -243,7 +249,7 @@ func TestChunkGroupCalculationsMultipleAssignments(t *testing.T) {
// Add elements
count := 1_000
for i := 0; i < count; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration
cgMap.Add(startTime, registration)
}
Expand All @@ -266,7 +272,7 @@ func TestChunkGroupCalculationsMultipleAssignments(t *testing.T) {
numberToAdd := rand.Intn(10)
count += numberToAdd
for i := 0; i < numberToAdd; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration
cgMap.Add(now, registration)
}
Expand Down Expand Up @@ -350,6 +356,7 @@ func TestGetRandomNodeSingleAssignment(t *testing.T) {
chunkGroupCount := uint32(rand.Intn(100) + 1)
startTime := tu.RandomTime()
shufflePeriod := time.Second * time.Duration(rand.Intn(10)+1)
lastRegistrationTime := startTime.Add(shufflePeriod * time.Duration(5))
assignmentCount := uint32(1)

cgMap := NewMap(chunkGroupCount, assignmentCount, shufflePeriod)
Expand All @@ -360,7 +367,7 @@ func TestGetRandomNodeSingleAssignment(t *testing.T) {
// Add elements
elementsToAdd := 1_000
for i := 0; i < elementsToAdd; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration

assert.Nil(t, cgMap.Get(registration.ID()))
Expand Down Expand Up @@ -404,7 +411,15 @@ func TestGetRandomNodeSingleAssignment(t *testing.T) {
offset := ComputeShuffleOffset(registration.Seed(), 0, shufflePeriod)
epoch := ComputeShuffleEpoch(shufflePeriod, offset, startTime)
epochBeginning := ComputeStartOfShuffleEpoch(shufflePeriod, offset, epoch)
timeInGroup := now.Sub(epochBeginning)

var joinTime time.Time
if epochBeginning.After(registration.RegistrationTime()) {
joinTime = epochBeginning
} else {
joinTime = registration.RegistrationTime()
}

timeInGroup := now.Sub(joinTime)
assert.True(t, timeInGroup >= minimumTimeInGroup)
}
}
Expand All @@ -418,6 +433,7 @@ func TestGetRandomNodeMultipleAssignments(t *testing.T) {
chunkGroupCount := uint32(rand.Intn(100) + 1)
startTime := tu.RandomTime()
shufflePeriod := time.Second * time.Duration(rand.Intn(10)+1)
lastRegistrationTime := startTime.Add(shufflePeriod * time.Duration(5))
assignmentCount := uint32(rand.Intn(3) + 2)

cgMap := NewMap(chunkGroupCount, assignmentCount, shufflePeriod)
Expand All @@ -428,7 +444,7 @@ func TestGetRandomNodeMultipleAssignments(t *testing.T) {
// Add elements
elementsToAdd := 1_000
for i := 0; i < elementsToAdd; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration

assert.Nil(t, cgMap.Get(registration.ID()))
Expand Down Expand Up @@ -480,7 +496,15 @@ func TestGetRandomNodeMultipleAssignments(t *testing.T) {
}

epochBeginning := ComputeStartOfShuffleEpoch(shufflePeriod, offset, epoch)
timeInGroup := now.Sub(epochBeginning)

var joinTime time.Time
if epochBeginning.After(registration.RegistrationTime()) {
joinTime = epochBeginning
} else {
joinTime = registration.RegistrationTime()
}

timeInGroup := now.Sub(joinTime)
assert.True(t, timeInGroup >= minimumTimeInGroup)
}
}
Expand All @@ -495,6 +519,7 @@ func TestSingleChunkGroupSingleAssignment(t *testing.T) {
chunkGroupCount := uint32(1)
startTime := tu.RandomTime()
shufflePeriod := time.Second * time.Duration(rand.Intn(10)+1)
lastRegistrationTime := startTime.Add(shufflePeriod * time.Duration(5))
assignmentCount := uint32(1)

cgMap := NewMap(chunkGroupCount, assignmentCount, shufflePeriod)
Expand All @@ -505,7 +530,7 @@ func TestSingleChunkGroupSingleAssignment(t *testing.T) {
// Add elements
count := 1_000
for i := 0; i < count; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration
cgMap.Add(startTime, registration)
}
Expand All @@ -528,7 +553,7 @@ func TestSingleChunkGroupSingleAssignment(t *testing.T) {
numberToAdd := rand.Intn(10)
count += numberToAdd
for i := 0; i < numberToAdd; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration
cgMap.Add(now, registration)
}
Expand Down Expand Up @@ -585,6 +610,7 @@ func TestSingleChunkGroupMultipleAssignments(t *testing.T) {
chunkGroupCount := uint32(1)
startTime := tu.RandomTime()
shufflePeriod := time.Second * time.Duration(rand.Intn(10)+1)
lastRegistrationTime := startTime.Add(shufflePeriod * time.Duration(5))
assignmentCount := uint32(rand.Intn(3) + 2)

cgMap := NewMap(chunkGroupCount, assignmentCount, shufflePeriod)
Expand All @@ -595,7 +621,7 @@ func TestSingleChunkGroupMultipleAssignments(t *testing.T) {
// Add elements
count := 1_000
for i := 0; i < count; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration
cgMap.Add(startTime, registration)
}
Expand All @@ -618,7 +644,7 @@ func TestSingleChunkGroupMultipleAssignments(t *testing.T) {
numberToAdd := rand.Intn(10)
count += numberToAdd
for i := 0; i < numberToAdd; i++ {
registration := randomRegistration()
registration := randomRegistration(startTime, lastRegistrationTime)
expectedRegistrations[registration.ID()] = registration
cgMap.Add(now, registration)
}
Expand Down

0 comments on commit 8697492

Please sign in to comment.