go-watchdog/watermarks_test.go

55 lines
1.6 KiB
Go

package watchdog
import (
"testing"
"github.com/raulk/clock"
"github.com/stretchr/testify/require"
)
var (
watermarks = []float64{0.50, 0.75, 0.80}
thresholds = func() []uint64 {
var ret []uint64
for _, w := range watermarks {
ret = append(ret, uint64(float64(limit64MiB)*w))
}
return ret
}()
)
func TestProgressiveWatermarks(t *testing.T) {
clk := clock.NewMock()
Clock = clk
p, err := NewWatermarkPolicy(watermarks...)(limit64MiB)
require.NoError(t, err)
// at zero
next := p.Evaluate(UtilizationSystem, uint64(0))
require.EqualValues(t, thresholds[0], next)
// before the watermark.
next = p.Evaluate(UtilizationSystem, uint64(float64(limit64MiB)*watermarks[0])-1)
require.EqualValues(t, thresholds[0], next)
// exactly at the watermark; gives us the next watermark, as the watchdodg would've
// taken care of triggering the first watermark.
next = p.Evaluate(UtilizationSystem, uint64(float64(limit64MiB)*watermarks[0]))
require.EqualValues(t, thresholds[1], next)
// after the watermark gives us the next watermark.
next = p.Evaluate(UtilizationSystem, uint64(float64(limit64MiB)*watermarks[0])+1)
require.EqualValues(t, thresholds[1], next)
// last watermark; disable the policy.
next = p.Evaluate(UtilizationSystem, uint64(float64(limit64MiB)*watermarks[2]))
require.EqualValues(t, PolicyTempDisabled, next)
next = p.Evaluate(UtilizationSystem, uint64(float64(limit64MiB)*watermarks[2]+1))
require.EqualValues(t, PolicyTempDisabled, next)
next = p.Evaluate(UtilizationSystem, limit64MiB)
require.EqualValues(t, PolicyTempDisabled, next)
}