93 lines
2.2 KiB
Go
93 lines
2.2 KiB
Go
package common
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/benbjohnson/clock"
|
|
wt "github.com/weaveworks/weave/testing"
|
|
)
|
|
|
|
// Ensure we can add new calls while forwarding the clock
|
|
func TestSchedCallsBasic(t *testing.T) {
|
|
InitDefaultLogging(testing.Verbose())
|
|
Info.Println("TestSchedCallsBasic starting")
|
|
|
|
const testSecs = 1000
|
|
clk := clock.NewMock()
|
|
schedQueue := NewSchedQueue(clk)
|
|
schedQueue.Start()
|
|
defer schedQueue.Stop()
|
|
|
|
c := func() time.Time {
|
|
return clk.Now().Add(time.Second)
|
|
}
|
|
|
|
schedQueue.Add(c, clk.Now().Add(time.Second))
|
|
schedQueue.Flush()
|
|
for i := 0; i < testSecs; i++ {
|
|
clk.Add(time.Second)
|
|
schedQueue.Flush()
|
|
}
|
|
|
|
t.Logf("Now: %s - calls: %d", clk.Now(), schedQueue.Count())
|
|
wt.AssertEqualInt(t, (int)(schedQueue.Count()), testSecs, "Number of calls")
|
|
}
|
|
|
|
// Ensure we can create a 100 seconds gap in the middle of the time travel
|
|
func TestSchedCallsGap(t *testing.T) {
|
|
InitDefaultLogging(testing.Verbose())
|
|
Info.Println("TestSchedCallsGap starting")
|
|
|
|
const testSecs = 1000
|
|
clk := clock.NewMock()
|
|
schedQueue := NewSchedQueue(clk)
|
|
schedQueue.Start()
|
|
defer schedQueue.Stop()
|
|
|
|
c2 := func() time.Time {
|
|
if schedQueue.Count() == testSecs/2 {
|
|
return clk.Now().Add(time.Duration(100) * time.Second)
|
|
}
|
|
return clk.Now().Add(time.Second)
|
|
}
|
|
|
|
schedQueue.Add(c2, clk.Now().Add(time.Second))
|
|
schedQueue.Flush()
|
|
for i := 0; i < testSecs; i++ {
|
|
clk.Add(time.Second)
|
|
schedQueue.Flush()
|
|
}
|
|
|
|
t.Logf("Now: %s - calls: %d", clk.Now(), schedQueue.Count())
|
|
wt.AssertEqualInt(t, (int)(schedQueue.Count()), testSecs-100+1, "Number of calls")
|
|
}
|
|
|
|
func TestSchedCallsStop(t *testing.T) {
|
|
InitDefaultLogging(testing.Verbose())
|
|
Info.Println("TestSchedCallsStop starting")
|
|
|
|
const testSecs = 1000
|
|
clk := clock.NewMock()
|
|
schedQueue := NewSchedQueue(clk)
|
|
schedQueue.Start()
|
|
defer schedQueue.Stop()
|
|
|
|
c2 := func() time.Time {
|
|
if schedQueue.Count() == testSecs/2 {
|
|
return time.Time{}
|
|
}
|
|
return clk.Now().Add(time.Second)
|
|
}
|
|
|
|
schedQueue.Add(c2, clk.Now().Add(time.Second))
|
|
schedQueue.Flush()
|
|
for i := 0; i < testSecs; i++ {
|
|
clk.Add(time.Second)
|
|
schedQueue.Flush()
|
|
}
|
|
|
|
t.Logf("Now: %s - calls: %d", clk.Now(), schedQueue.Count())
|
|
wt.AssertEqualInt(t, (int)(schedQueue.Count()), testSecs/2, "Number of calls")
|
|
}
|