mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
84 lines
1.5 KiB
Go
84 lines
1.5 KiB
Go
package agent
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func setTrackerTestVals(tr *resourceTracker, vals *trackerVals) {
|
|
tr.cond.L.Lock()
|
|
|
|
tr.ramSyncTotal = vals.st
|
|
tr.ramSyncUsed = vals.su
|
|
tr.ramAsyncTotal = vals.at
|
|
tr.ramAsyncUsed = vals.au
|
|
tr.ramAsyncHWMark = vals.am
|
|
|
|
tr.cond.L.Unlock()
|
|
tr.cond.Broadcast()
|
|
}
|
|
|
|
func getTrackerTestVals(tr *resourceTracker, vals *trackerVals) {
|
|
|
|
tr.cond.L.Lock()
|
|
|
|
vals.st = tr.ramSyncTotal
|
|
vals.su = tr.ramSyncUsed
|
|
vals.at = tr.ramAsyncTotal
|
|
vals.au = tr.ramAsyncUsed
|
|
vals.am = tr.ramAsyncHWMark
|
|
|
|
tr.cond.L.Unlock()
|
|
}
|
|
|
|
type trackerVals struct {
|
|
st uint64
|
|
su uint64
|
|
at uint64
|
|
au uint64
|
|
am uint64
|
|
}
|
|
|
|
func TestResourceAsyncMem(t *testing.T) {
|
|
|
|
var vals trackerVals
|
|
|
|
trI := NewResourceTracker()
|
|
|
|
tr := trI.(*resourceTracker)
|
|
|
|
getTrackerTestVals(tr, &vals)
|
|
if vals.st <= 0 || vals.su != 0 || vals.at <= 0 || vals.au != 0 || vals.am <= 0 {
|
|
t.Fatalf("faulty init %#v", vals)
|
|
}
|
|
|
|
// set set these to known vals
|
|
vals.st = 1 * 1024 * 1024
|
|
vals.su = 0
|
|
vals.at = 2 * 1024 * 1024
|
|
vals.au = 0
|
|
vals.am = 1 * 1024 * 1024
|
|
|
|
// should block & wait
|
|
vals.au = vals.am
|
|
setTrackerTestVals(tr, &vals)
|
|
ch := tr.WaitAsyncResource()
|
|
|
|
select {
|
|
case <-ch:
|
|
t.Fatal("high water mark over, should not trigger")
|
|
case <-time.After(time.Duration(500) * time.Millisecond):
|
|
}
|
|
|
|
// should not block & wait
|
|
vals.au = 0
|
|
setTrackerTestVals(tr, &vals)
|
|
|
|
select {
|
|
case <-ch:
|
|
case <-time.After(time.Duration(500) * time.Millisecond):
|
|
t.Fatal("high water mark not over, should trigger")
|
|
}
|
|
|
|
}
|