diff --git a/scope_test.go b/scope_test.go index e64486d..8b3260d 100644 --- a/scope_test.go +++ b/scope_test.go @@ -29,6 +29,13 @@ func checkResources(t *testing.T, rc *resources, st network.ScopeStat) { } } +func checkStatus(t *testing.T, expected, status network.MemoryStatus) { + t.Helper() + if status != expected { + t.Fatalf("expected memory status %d but got %d", expected, status) + } +} + func TestResources(t *testing.T) { rc := resources{limit: &StaticLimit{ Memory: 4096, @@ -41,38 +48,70 @@ func TestResources(t *testing.T) { checkResources(t, &rc, network.ScopeStat{}) - if err := rc.checkMemory(1024); err != nil { + var status network.MemoryStatus + var err error + + if status, err = rc.checkMemory(1024); err != nil { t.Fatal(err) } - if err := rc.checkMemory(4096); err != nil { + checkStatus(t, network.MemoryStatusOK, status) + + if status, err = rc.checkMemory(2048); err != nil { t.Fatal(err) } - if err := rc.checkMemory(8192); err == nil { + checkStatus(t, network.MemoryStatusOK, status) + + if status, err = rc.checkMemory(3072); err != nil { + t.Fatal(err) + } + checkStatus(t, network.MemoryStatusCaution, status) + + if status, err = rc.checkMemory(4096); err != nil { + t.Fatal(err) + } + checkStatus(t, network.MemoryStatusCritical, status) + + if _, err := rc.checkMemory(8192); err == nil { t.Fatal("expected memory check to fail") } - if err := rc.reserveMemory(1024); err != nil { + if status, err = rc.reserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &rc, network.ScopeStat{Memory: 1024}) + checkStatus(t, network.MemoryStatusOK, status) - if err := rc.reserveMemory(1024); err != nil { + if status, err = rc.reserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &rc, network.ScopeStat{Memory: 2048}) + checkStatus(t, network.MemoryStatusOK, status) - if err := rc.reserveMemory(4096); err == nil { - t.Fatal("expected memory reservation to fail") - } - checkResources(t, &rc, network.ScopeStat{Memory: 2048}) - - rc.releaseMemory(1024) - checkResources(t, &rc, network.ScopeStat{Memory: 1024}) - - if err := rc.reserveMemory(2048); err != nil { + if status, err = rc.reserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &rc, network.ScopeStat{Memory: 3072}) + checkStatus(t, network.MemoryStatusCaution, status) + + if status, err = rc.reserveMemory(512); err != nil { + t.Fatal(err) + } + checkResources(t, &rc, network.ScopeStat{Memory: 3584}) + checkStatus(t, network.MemoryStatusCritical, status) + + if _, err := rc.reserveMemory(4096); err == nil { + t.Fatal("expected memory reservation to fail") + } + checkResources(t, &rc, network.ScopeStat{Memory: 3584}) + + rc.releaseMemory(2560) + checkResources(t, &rc, network.ScopeStat{Memory: 1024}) + + if status, err = rc.reserveMemory(2048); err != nil { + t.Fatal(err) + } + checkResources(t, &rc, network.ScopeStat{Memory: 3072}) + checkStatus(t, network.MemoryStatusCaution, status) rc.releaseMemory(3072) checkResources(t, &rc, network.ScopeStat{}) @@ -169,17 +208,34 @@ func TestResourceScopeSimple(t *testing.T) { } func testResourceScopeBasic(t *testing.T, s *resourceScope) { - if err := s.ReserveMemory(2048); err != nil { + var status network.MemoryStatus + var err error + + if status, err = s.ReserveMemory(2048); err != nil { t.Fatal(err) } checkResources(t, &s.rc, network.ScopeStat{Memory: 2048}) + checkStatus(t, network.MemoryStatusOK, status) - if err := s.ReserveMemory(2048); err != nil { + if status, err = s.ReserveMemory(1024); err != nil { + t.Fatal(err) + } + checkResources(t, &s.rc, network.ScopeStat{Memory: 3072}) + checkStatus(t, network.MemoryStatusCaution, status) + + if status, err = s.ReserveMemory(512); err != nil { + t.Fatal(err) + } + checkResources(t, &s.rc, network.ScopeStat{Memory: 3584}) + checkStatus(t, network.MemoryStatusCritical, status) + + if status, err = s.ReserveMemory(512); err != nil { t.Fatal(err) } checkResources(t, &s.rc, network.ScopeStat{Memory: 4096}) + checkStatus(t, network.MemoryStatusCritical, status) - if err := s.ReserveMemory(1024); err == nil { + if _, err := s.ReserveMemory(1024); err == nil { t.Fatal("expected ReserveMemory to fail") } checkResources(t, &s.rc, network.ScopeStat{Memory: 4096}) @@ -275,7 +331,7 @@ func TestResourceScopeTxnBasic(t *testing.T) { checkResources(t, &s.rc, network.ScopeStat{}) // check constraint propagation - if err := txn.ReserveMemory(4096); err != nil { + if _, err := txn.ReserveMemory(4096); err != nil { t.Fatal(err) } checkResources(t, &txn.(*resourceScope).rc, network.ScopeStat{Memory: 4096}) @@ -309,7 +365,7 @@ func TestResourceScopeTxnZombie(t *testing.T) { t.Fatal(err) } - if err := txn2.ReserveMemory(4096); err != nil { + if _, err := txn2.ReserveMemory(4096); err != nil { t.Fatal(err) } checkResources(t, &txn2.(*resourceScope).rc, network.ScopeStat{Memory: 4096}) @@ -318,7 +374,7 @@ func TestResourceScopeTxnZombie(t *testing.T) { txn1.Done() checkResources(t, &s.rc, network.ScopeStat{}) - if err := txn2.ReserveMemory(4096); err == nil { + if _, err := txn2.ReserveMemory(4096); err == nil { t.Fatal("expected ReserveMemory to fail") } @@ -364,14 +420,14 @@ func TestResourceScopeTxnTree(t *testing.T) { t.Fatal(err) } - if err := txn3.ReserveMemory(1024); err != nil { + if _, err := txn3.ReserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &txn3.(*resourceScope).rc, network.ScopeStat{Memory: 1024}) checkResources(t, &txn1.(*resourceScope).rc, network.ScopeStat{Memory: 1024}) checkResources(t, &s.rc, network.ScopeStat{Memory: 1024}) - if err := txn4.ReserveMemory(1024); err != nil { + if _, err := txn4.ReserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &txn4.(*resourceScope).rc, network.ScopeStat{Memory: 1024}) @@ -380,7 +436,7 @@ func TestResourceScopeTxnTree(t *testing.T) { checkResources(t, &txn1.(*resourceScope).rc, network.ScopeStat{Memory: 2048}) checkResources(t, &s.rc, network.ScopeStat{Memory: 2048}) - if err := txn5.ReserveMemory(1024); err != nil { + if _, err := txn5.ReserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &txn5.(*resourceScope).rc, network.ScopeStat{Memory: 1024}) @@ -390,7 +446,7 @@ func TestResourceScopeTxnTree(t *testing.T) { checkResources(t, &txn1.(*resourceScope).rc, network.ScopeStat{Memory: 3072}) checkResources(t, &s.rc, network.ScopeStat{Memory: 3072}) - if err := txn1.ReserveMemory(1024); err != nil { + if _, err := txn1.ReserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &txn5.(*resourceScope).rc, network.ScopeStat{Memory: 1024}) @@ -400,16 +456,16 @@ func TestResourceScopeTxnTree(t *testing.T) { checkResources(t, &txn1.(*resourceScope).rc, network.ScopeStat{Memory: 4096}) checkResources(t, &s.rc, network.ScopeStat{Memory: 4096}) - if err := txn5.ReserveMemory(1024); err == nil { + if _, err := txn5.ReserveMemory(1024); err == nil { t.Fatal("expected ReserveMemory to fail") } - if err := txn4.ReserveMemory(1024); err == nil { + if _, err := txn4.ReserveMemory(1024); err == nil { t.Fatal("expected ReserveMemory to fail") } - if err := txn3.ReserveMemory(1024); err == nil { + if _, err := txn3.ReserveMemory(1024); err == nil { t.Fatal("expected ReserveMemory to fail") } - if err := txn2.ReserveMemory(1024); err == nil { + if _, err := txn2.ReserveMemory(1024); err == nil { t.Fatal("expected ReserveMemory to fail") } checkResources(t, &txn5.(*resourceScope).rc, network.ScopeStat{Memory: 1024}) @@ -501,7 +557,7 @@ func TestResourceScopeDAG(t *testing.T) { []*resourceScope{s3, s1}, ) - if err := s4.ReserveMemory(1024); err != nil { + if _, err := s4.ReserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &s6.rc, network.ScopeStat{}) @@ -511,7 +567,7 @@ func TestResourceScopeDAG(t *testing.T) { checkResources(t, &s2.rc, network.ScopeStat{Memory: 1024}) checkResources(t, &s1.rc, network.ScopeStat{Memory: 1024}) - if err := s5.ReserveMemory(1024); err != nil { + if _, err := s5.ReserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &s6.rc, network.ScopeStat{}) @@ -521,7 +577,7 @@ func TestResourceScopeDAG(t *testing.T) { checkResources(t, &s2.rc, network.ScopeStat{Memory: 2048}) checkResources(t, &s1.rc, network.ScopeStat{Memory: 2048}) - if err := s6.ReserveMemory(1024); err != nil { + if _, err := s6.ReserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &s6.rc, network.ScopeStat{Memory: 1024}) @@ -531,13 +587,13 @@ func TestResourceScopeDAG(t *testing.T) { checkResources(t, &s2.rc, network.ScopeStat{Memory: 2048}) checkResources(t, &s1.rc, network.ScopeStat{Memory: 3072}) - if err := s4.ReserveMemory(1024); err == nil { + if _, err := s4.ReserveMemory(1024); err == nil { t.Fatal("expcted ReserveMemory to fail") } - if err := s5.ReserveMemory(1024); err == nil { + if _, err := s5.ReserveMemory(1024); err == nil { t.Fatal("expcted ReserveMemory to fail") } - if err := s6.ReserveMemory(1024); err == nil { + if _, err := s6.ReserveMemory(1024); err == nil { t.Fatal("expcted ReserveMemory to fail") } @@ -986,7 +1042,7 @@ func TestResourceScopeDAGTxn(t *testing.T) { t.Fatal(err) } - if err := txn4.ReserveMemory(1024); err != nil { + if _, err := txn4.ReserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &s4.rc, network.ScopeStat{Memory: 1024}) @@ -994,7 +1050,7 @@ func TestResourceScopeDAGTxn(t *testing.T) { checkResources(t, &s2.rc, network.ScopeStat{Memory: 1024}) checkResources(t, &s1.rc, network.ScopeStat{Memory: 1024}) - if err := txn5.ReserveMemory(1024); err != nil { + if _, err := txn5.ReserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &s5.rc, network.ScopeStat{Memory: 1024}) @@ -1003,7 +1059,7 @@ func TestResourceScopeDAGTxn(t *testing.T) { checkResources(t, &s2.rc, network.ScopeStat{Memory: 2048}) checkResources(t, &s1.rc, network.ScopeStat{Memory: 2048}) - if err := txn6.ReserveMemory(1024); err != nil { + if _, err := txn6.ReserveMemory(1024); err != nil { t.Fatal(err) } checkResources(t, &s6.rc, network.ScopeStat{Memory: 1024}) @@ -1013,7 +1069,7 @@ func TestResourceScopeDAGTxn(t *testing.T) { checkResources(t, &s2.rc, network.ScopeStat{Memory: 2048}) checkResources(t, &s1.rc, network.ScopeStat{Memory: 3072}) - if err := txn4.ReserveMemory(4096); err != nil { + if _, err := txn4.ReserveMemory(4096); err != nil { t.Fatal(err) } checkResources(t, &s6.rc, network.ScopeStat{Memory: 1024}) @@ -1023,13 +1079,13 @@ func TestResourceScopeDAGTxn(t *testing.T) { checkResources(t, &s2.rc, network.ScopeStat{Memory: 2048 + 4096}) checkResources(t, &s1.rc, network.ScopeStat{Memory: 3072 + 4096}) - if err := txn4.ReserveMemory(1024); err == nil { + if _, err := txn4.ReserveMemory(1024); err == nil { t.Fatal("expected ReserveMemory to fail") } - if err := txn5.ReserveMemory(1024); err == nil { + if _, err := txn5.ReserveMemory(1024); err == nil { t.Fatal("expected ReserveMemory to fail") } - if err := txn6.ReserveMemory(1024); err == nil { + if _, err := txn6.ReserveMemory(1024); err == nil { t.Fatal("expected ReserveMemory to fail") } checkResources(t, &s6.rc, network.ScopeStat{Memory: 1024}) @@ -1048,10 +1104,10 @@ func TestResourceScopeDAGTxn(t *testing.T) { checkResources(t, &s2.rc, network.ScopeStat{Memory: 1024}) checkResources(t, &s1.rc, network.ScopeStat{Memory: 2048}) - if err := txn5.ReserveMemory(1024); err != nil { + if _, err := txn5.ReserveMemory(1024); err != nil { t.Fatal(err) } - if err := txn6.ReserveMemory(1024); err != nil { + if _, err := txn6.ReserveMemory(1024); err != nil { t.Fatal(err) }