Merge pull request #546 from ryanbreen/master
Add a randomized start before running CheckMonitors.
This commit is contained in:
commit
acdd13c3c8
|
@ -93,7 +93,10 @@ func (c *CheckMonitor) Stop() {
|
|||
|
||||
// run is invoked by a goroutine to run until Stop() is called
|
||||
func (c *CheckMonitor) run() {
|
||||
next := time.After(0)
|
||||
// Get the randomized initial pause time
|
||||
initialPauseTime := randomStagger(c.Interval)
|
||||
c.Logger.Printf("[DEBUG] agent: pausing %v before first invocation of %s", initialPauseTime, c.Script)
|
||||
next := time.After(initialPauseTime)
|
||||
for {
|
||||
select {
|
||||
case <-next:
|
||||
|
|
|
@ -65,6 +65,34 @@ func TestCheckMonitor_BadCmd(t *testing.T) {
|
|||
expectStatus(t, "foobarbaz", structs.HealthCritical)
|
||||
}
|
||||
|
||||
func TestCheckMonitor_RandomStagger(t *testing.T) {
|
||||
mock := &MockNotify{
|
||||
state: make(map[string]string),
|
||||
updates: make(map[string]int),
|
||||
output: make(map[string]string),
|
||||
}
|
||||
check := &CheckMonitor{
|
||||
Notify: mock,
|
||||
CheckID: "foo",
|
||||
Script: "exit 0",
|
||||
Interval: 25 * time.Millisecond,
|
||||
Logger: log.New(os.Stderr, "", log.LstdFlags),
|
||||
}
|
||||
check.Start()
|
||||
defer check.Stop()
|
||||
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
|
||||
// Should have at least 1 update
|
||||
if mock.updates["foo"] < 1 {
|
||||
t.Fatalf("should have 1 or more updates %v", mock.updates)
|
||||
}
|
||||
|
||||
if mock.state["foo"] != structs.HealthPassing {
|
||||
t.Fatalf("should be %v %v", structs.HealthPassing, mock.state)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckMonitor_LimitOutput(t *testing.T) {
|
||||
mock := &MockNotify{
|
||||
state: make(map[string]string),
|
||||
|
|
Loading…
Reference in New Issue