From e33821dae47431c5cdc57389bfb752d152f58152 Mon Sep 17 00:00:00 2001 From: vyzo Date: Mon, 27 Dec 2021 22:47:38 +0200 Subject: [PATCH] basic resource scope tests --- scope_test.go | 189 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) diff --git a/scope_test.go b/scope_test.go index 725b936..d486a77 100644 --- a/scope_test.go +++ b/scope_test.go @@ -179,3 +179,192 @@ func TestResources(t *testing.T) { rc.removeFD(1) checkResources(t, rc, network.ScopeStat{}) } + +func TestResourceScopeBasic(t *testing.T) { + s := NewResourceScope( + &StaticLimit{ + Memory: 4096, + StreamsInbound: 1, + StreamsOutbound: 1, + ConnsInbound: 1, + ConnsOutbound: 1, + FD: 1, + }, + nil, + ) + + s.IncRef() + if s.refCnt != 1 { + t.Fatal("expected refcnt of 1") + } + s.DecRef() + if s.refCnt != 0 { + t.Fatal("expected refcnt of 0") + } + + if err := s.ReserveMemory(2048); err != nil { + t.Fatal(err) + } + checkResources(t, s.rc, network.ScopeStat{Memory: 2048}) + + if err := s.ReserveMemory(2048); err != nil { + t.Fatal(err) + } + checkResources(t, s.rc, network.ScopeStat{Memory: 4096}) + + if err := s.ReserveMemory(1024); err == nil { + t.Fatal("expected ReserveMemory to fail") + } + checkResources(t, s.rc, network.ScopeStat{Memory: 4096}) + + s.ReleaseMemory(4096) + checkResources(t, s.rc, network.ScopeStat{}) + + if err := s.AddStream(network.DirInbound); err != nil { + t.Fatal(err) + } + checkResources(t, s.rc, network.ScopeStat{NumStreamsInbound: 1}) + + if err := s.AddStream(network.DirInbound); err == nil { + t.Fatal("expected AddStream to fail") + } + checkResources(t, s.rc, network.ScopeStat{NumStreamsInbound: 1}) + + s.RemoveStream(network.DirInbound) + checkResources(t, s.rc, network.ScopeStat{}) + + if err := s.AddStream(network.DirOutbound); err != nil { + t.Fatal(err) + } + checkResources(t, s.rc, network.ScopeStat{NumStreamsOutbound: 1}) + + if err := s.AddStream(network.DirOutbound); err == nil { + t.Fatal("expected AddStream to fail") + } + checkResources(t, s.rc, network.ScopeStat{NumStreamsOutbound: 1}) + + s.RemoveStream(network.DirOutbound) + checkResources(t, s.rc, network.ScopeStat{}) + + if err := s.AddConn(network.DirInbound); err != nil { + t.Fatal(err) + } + checkResources(t, s.rc, network.ScopeStat{NumConnsInbound: 1}) + + if err := s.AddConn(network.DirInbound); err == nil { + t.Fatal("expected AddConn to fail") + } + checkResources(t, s.rc, network.ScopeStat{NumConnsInbound: 1}) + + s.RemoveConn(network.DirInbound) + checkResources(t, s.rc, network.ScopeStat{}) + + if err := s.AddConn(network.DirOutbound); err != nil { + t.Fatal(err) + } + checkResources(t, s.rc, network.ScopeStat{NumConnsOutbound: 1}) + + if err := s.AddConn(network.DirOutbound); err == nil { + t.Fatal("expected AddConn to fail") + } + checkResources(t, s.rc, network.ScopeStat{NumConnsOutbound: 1}) + + s.RemoveConn(network.DirOutbound) + checkResources(t, s.rc, network.ScopeStat{}) + + if err := s.AddFD(1); err != nil { + t.Fatal(err) + } + checkResources(t, s.rc, network.ScopeStat{NumFD: 1}) + + if err := s.AddFD(1); err == nil { + t.Fatal("expected AddFD to fail") + } + checkResources(t, s.rc, network.ScopeStat{NumFD: 1}) + + s.RemoveFD(1) + checkResources(t, s.rc, network.ScopeStat{}) +} + +func TestResourceScopeBuffer(t *testing.T) { + s := NewResourceScope( + &StaticLimit{ + Memory: 4096, + StreamsInbound: 1, + StreamsOutbound: 1, + ConnsInbound: 1, + ConnsOutbound: 1, + FD: 1, + }, + nil, + ) + + buf, err := s.GetBuffer(2048) + if err != nil { + t.Fatal(err) + } + if len(buf.Data()) != 2048 { + t.Fatalf("expected buffer of length %d but got %d", 2048, len(buf.Data())) + } + if len(s.rc.buffers) != 1 { + t.Fatalf("expected %d buffers to be tracked but got %d", 1, len(s.rc.buffers)) + } + + if err = buf.Grow(4096); err != nil { + t.Fatal(err) + } + if len(buf.Data()) != 4096 { + t.Fatalf("expected buffer of length %d but got %d", 4096, len(buf.Data())) + } + if len(s.rc.buffers) != 1 { + t.Fatalf("expected %d buffers to be tracked but got %d", 1, len(s.rc.buffers)) + } + + if err = buf.Grow(8192); err == nil { + t.Fatal("expected grow to fail") + } + if len(buf.Data()) != 4096 { + t.Fatalf("expected buffer of length %d but got %d", 4096, len(buf.Data())) + } + if len(s.rc.buffers) != 1 { + t.Fatalf("expected %d buffers to be tracked but got %d", 1, len(s.rc.buffers)) + } + + buf.Release() + if len(buf.Data()) != 0 { + t.Fatalf("expected buffer of length %d but got %d", 0, len(buf.Data())) + } + if len(s.rc.buffers) != 0 { + t.Fatalf("expected %d buffers to be tracked but got %d", 0, len(s.rc.buffers)) + } + + buf1, err := s.GetBuffer(2048) + if err != nil { + t.Fatal(err) + } + buf2, err := s.GetBuffer(2048) + if err != nil { + t.Fatal(err) + } + if _, err := s.GetBuffer(2048); err == nil { + t.Fatal("expected GetBuffer to fail") + } + if len(s.rc.buffers) != 2 { + t.Fatalf("expected %d buffers to be tracked but got %d", 2, len(s.rc.buffers)) + } + + buf1.Release() + buf3, err := s.GetBuffer(2048) + if err != nil { + t.Fatal(err) + } + if len(s.rc.buffers) != 2 { + t.Fatalf("expected %d buffers to be tracked but got %d", 2, len(s.rc.buffers)) + } + + buf2.Release() + buf3.Release() + if len(s.rc.buffers) != 0 { + t.Fatalf("expected %d buffers to be tracked but got %d", 0, len(s.rc.buffers)) + } +}