X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/91dc5f1d7f5ad9eb2640f6089e2d0476cbf87c8e..2c6557f613fcf6cdcebb08c321a5d061aeb780c6:/services/keepstore/bufferpool_test.go diff --git a/services/keepstore/bufferpool_test.go b/services/keepstore/bufferpool_test.go index bce82377b5..8ecc833228 100644 --- a/services/keepstore/bufferpool_test.go +++ b/services/keepstore/bufferpool_test.go @@ -1,52 +1,58 @@ -package main +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +package keepstore import ( - . "gopkg.in/check.v1" "time" + + "git.arvados.org/arvados.git/sdk/go/ctxlog" + "github.com/prometheus/client_golang/prometheus" + . "gopkg.in/check.v1" ) var _ = Suite(&BufferPoolSuite{}) +var bufferPoolTestSize = 10 + type BufferPoolSuite struct{} -// Initialize a default-sized buffer pool for the benefit of test -// suites that don't run main(). -func init() { - bufs = newBufferPool(theConfig.MaxBuffers, BlockSize) +func (s *BufferPoolSuite) SetUpTest(c *C) { + bufferPoolBlockSize = bufferPoolTestSize } -// Restore sane default after bufferpool's own tests func (s *BufferPoolSuite) TearDownTest(c *C) { - bufs = newBufferPool(theConfig.MaxBuffers, BlockSize) + bufferPoolBlockSize = BlockSize } func (s *BufferPoolSuite) TestBufferPoolBufSize(c *C) { - bufs := newBufferPool(2, 10) - b1 := bufs.Get(1) - bufs.Get(2) + bufs := newBufferPool(ctxlog.TestLogger(c), 2, prometheus.NewRegistry()) + b1 := bufs.Get() + bufs.Get() bufs.Put(b1) - b3 := bufs.Get(3) - c.Check(len(b3), Equals, 3) + b3 := bufs.Get() + c.Check(len(b3), Equals, bufferPoolTestSize) } func (s *BufferPoolSuite) TestBufferPoolUnderLimit(c *C) { - bufs := newBufferPool(3, 10) - b1 := bufs.Get(10) - bufs.Get(10) + bufs := newBufferPool(ctxlog.TestLogger(c), 3, prometheus.NewRegistry()) + b1 := bufs.Get() + bufs.Get() testBufferPoolRace(c, bufs, b1, "Get") } func (s *BufferPoolSuite) TestBufferPoolAtLimit(c *C) { - bufs := newBufferPool(2, 10) - b1 := bufs.Get(10) - bufs.Get(10) + bufs := newBufferPool(ctxlog.TestLogger(c), 2, prometheus.NewRegistry()) + b1 := bufs.Get() + bufs.Get() testBufferPoolRace(c, bufs, b1, "Put") } func testBufferPoolRace(c *C, bufs *bufferPool, unused []byte, expectWin string) { race := make(chan string) go func() { - bufs.Get(10) + bufs.Get() time.Sleep(time.Millisecond) race <- "Get" }() @@ -61,9 +67,9 @@ func testBufferPoolRace(c *C, bufs *bufferPool, unused []byte, expectWin string) } func (s *BufferPoolSuite) TestBufferPoolReuse(c *C) { - bufs := newBufferPool(2, 10) - bufs.Get(10) - last := bufs.Get(10) + bufs := newBufferPool(ctxlog.TestLogger(c), 2, prometheus.NewRegistry()) + bufs.Get() + last := bufs.Get() // The buffer pool is allowed to throw away unused buffers // (e.g., during sync.Pool's garbage collection hook, in the // the current implementation). However, if unused buffers are @@ -74,7 +80,7 @@ func (s *BufferPoolSuite) TestBufferPoolReuse(c *C) { reuses := 0 for i := 0; i < allocs; i++ { bufs.Put(last) - next := bufs.Get(10) + next := bufs.Get() copy(last, []byte("last")) copy(next, []byte("next")) if last[0] == 'n' {