arblant
firefox-vpn-client / core / internal / proxy / sleep_until_test.go
sleep_until_test.go25 lines · 687 B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
package proxy

import (
	"testing"
	"time"
)

func TestSleepUntilFollowsTheWallClock(t *testing.T) {
	c := &Controller{done: make(chan struct{})}
	start := time.Now()
	if !c.sleepUntil(time.Now().Round(0).Add(-time.Minute)) || time.Since(start) > time.Second {
		t.Fatal("a time already past returns at once")
	}
	start = time.Now()
	if !c.sleepUntil(time.Now().Round(0).Add(200 * time.Millisecond)) {
		t.Fatal("not closed")
	}
	if waited := time.Since(start); waited < 150*time.Millisecond || waited > 2*time.Second {
		t.Fatalf("waited %s for 200ms", waited)
	}
	close(c.done)
	if c.sleepUntil(time.Now().Round(0).Add(time.Hour)) {
		t.Fatal("a closed controller stops waiting")
	}
}