Files
fn-serverless/api/agent/resource_test.go
Tolga Ceylan 7185f8306a fn: async wait bugfix and low mem warnings (#649)
*) fix async high water mark logic
*) warning on 256 mem for async and async+sync pools
2018-01-05 10:27:26 -08:00

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")
}
}