github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/core/quota/multichecker_test.go (about)

     1  // Copyright 2020 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package quota_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/core/quota"
    12  )
    13  
    14  var _ = gc.Suite(&MultiCheckerSuite{})
    15  
    16  type MultiCheckerSuite struct {
    17  }
    18  
    19  func (s *MultiCheckerSuite) TestSuccessfulCheck(c *gc.C) {
    20  	chk := quota.NewMultiChecker(
    21  		quota.NewMapKeyValueSizeChecker(5, 10),
    22  		quota.NewBSONTotalSizeChecker(50),
    23  	)
    24  	chk.Check(map[string]string{
    25  		"key0": "0123456789",
    26  		"key":  "0123456789",
    27  	})
    28  
    29  	err := chk.Outcome()
    30  	c.Assert(err, jc.ErrorIsNil)
    31  }
    32  
    33  func (s *MultiCheckerSuite) TestExceedMaxSize(c *gc.C) {
    34  	chk := quota.NewMultiChecker(
    35  		quota.NewMapKeyValueSizeChecker(5, 10),
    36  		quota.NewBSONTotalSizeChecker(24),
    37  	)
    38  	chk.Check(map[string]string{
    39  		"key0": "0123456789",
    40  		"key":  "0123456789",
    41  		"moar": "data", // passes key/value check but fails total size check
    42  	})
    43  
    44  	err := chk.Outcome()
    45  	c.Assert(err, jc.Satisfies, errors.IsQuotaLimitExceeded)
    46  }