Added test classes for the scheduler
This commit is contained in:
76
scheduled/scheduled_test.go
Normal file
76
scheduled/scheduled_test.go
Normal file
@@ -0,0 +1,76 @@
|
||||
package scheduled
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestImmediateScheduler(t *testing.T) {
|
||||
now := time.Now().UnixNano()
|
||||
|
||||
c := make(chan bool)
|
||||
|
||||
go ExecuteImmediatelyAndSchedule(func() (string, time.Duration) {
|
||||
c <- true
|
||||
return "", time.Second
|
||||
})
|
||||
|
||||
<-c
|
||||
|
||||
firstDuration := time.Duration.Nanoseconds(time.Millisecond)
|
||||
elapsed := time.Now().UnixNano() - now
|
||||
if elapsed > firstDuration {
|
||||
t.Errorf("did not immediately execute within %v, took %v", firstDuration, elapsed)
|
||||
}
|
||||
|
||||
<-c
|
||||
|
||||
secondDuration := elapsed + time.Duration.Nanoseconds(time.Second) + firstDuration
|
||||
elapsed = time.Now().UnixNano() - now
|
||||
if elapsed > secondDuration {
|
||||
t.Errorf("did not schedule second execute within %v nanoseconds, took %v", secondDuration, elapsed)
|
||||
}
|
||||
|
||||
<-c
|
||||
|
||||
thirdDuration := elapsed + time.Duration.Nanoseconds(time.Second) + firstDuration
|
||||
elapsed = time.Now().UnixNano() - now
|
||||
if elapsed > thirdDuration {
|
||||
t.Errorf("did not schedule third execute within %v nanoseconds, took %v", thirdDuration, elapsed)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDelayedScheduler(t *testing.T) {
|
||||
now := time.Now().UnixNano()
|
||||
|
||||
c := make(chan bool)
|
||||
|
||||
go ExecuteWithDelayAndSchedule(func() (string, time.Duration) {
|
||||
c <- true
|
||||
return "", time.Second
|
||||
}, time.Millisecond*500)
|
||||
|
||||
<-c
|
||||
|
||||
firstDuration := time.Duration.Nanoseconds(time.Millisecond * 502)
|
||||
elapsed := time.Now().UnixNano() - now
|
||||
if elapsed > firstDuration {
|
||||
t.Errorf("did not immediately execute within %v, took %v", firstDuration, elapsed)
|
||||
}
|
||||
|
||||
<-c
|
||||
|
||||
secondDuration := elapsed + time.Duration.Nanoseconds(time.Second) + firstDuration
|
||||
elapsed = time.Now().UnixNano() - now
|
||||
if elapsed > secondDuration {
|
||||
t.Errorf("did not schedule second execute within %v nanoseconds, took %v", secondDuration, elapsed)
|
||||
}
|
||||
|
||||
<-c
|
||||
|
||||
thirdDuration := elapsed + time.Duration.Nanoseconds(time.Second) + firstDuration
|
||||
elapsed = time.Now().UnixNano() - now
|
||||
if elapsed > thirdDuration {
|
||||
t.Errorf("did not schedule third execute within %v nanoseconds, took %v", thirdDuration, elapsed)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user