github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/core/quota/kv_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  	"time"
     8  
     9  	"github.com/juju/errors"
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/core/quota"
    14  )
    15  
    16  var _ = gc.Suite(&MapKeyValueCheckerSuite{})
    17  
    18  type MapKeyValueCheckerSuite struct {
    19  }
    20  
    21  func (s *MapKeyValueCheckerSuite) TestNonMapValue(c *gc.C) {
    22  	chk := quota.NewMapKeyValueSizeChecker(24, 42)
    23  	chk.Check("not-a-map")
    24  
    25  	err := chk.Outcome()
    26  	c.Assert(err, jc.Satisfies, errors.IsNotImplemented)
    27  }
    28  
    29  func (s *MapKeyValueCheckerSuite) TestMapWithMixedValueTypes(c *gc.C) {
    30  	chk := quota.NewMapKeyValueSizeChecker(10, 30)
    31  	chk.Check(map[string]interface{}{
    32  		"key": map[string]string{
    33  			"hello": "world",
    34  		},
    35  		"got-time?": time.Now(),
    36  	})
    37  
    38  	err := chk.Outcome()
    39  	c.Assert(err, jc.ErrorIsNil)
    40  }
    41  
    42  func (s *MapKeyValueCheckerSuite) TestMapWithStringKeyValues(c *gc.C) {
    43  	chk := quota.NewMapKeyValueSizeChecker(5, 3)
    44  	chk.Check(map[string]string{
    45  		"key":  "val",
    46  		"foof": "bar",
    47  	})
    48  
    49  	err := chk.Outcome()
    50  	c.Assert(err, jc.ErrorIsNil)
    51  }
    52  
    53  func (s *MapKeyValueCheckerSuite) TestQuotaBypass(c *gc.C) {
    54  	chk := quota.NewMapKeyValueSizeChecker(0, 0)
    55  	chk.Check(map[string]string{
    56  		"key":  "val",
    57  		"foof": "bar",
    58  	})
    59  
    60  	err := chk.Outcome()
    61  	c.Assert(err, jc.ErrorIsNil)
    62  }
    63  
    64  func (s *MapKeyValueCheckerSuite) TestExceedMaxKeySize(c *gc.C) {
    65  	chk := quota.NewMapKeyValueSizeChecker(5, 3)
    66  	chk.Check(map[string]string{
    67  		"a long key": "bar",
    68  		"key":        "val",
    69  	})
    70  
    71  	err := chk.Outcome()
    72  	c.Assert(err, jc.Satisfies, errors.IsQuotaLimitExceeded)
    73  	c.Assert(err, gc.ErrorMatches, "max allowed key length.*", gc.Commentf("expected error about exceeding max key length"))
    74  }
    75  
    76  func (s *MapKeyValueCheckerSuite) TestExceedMaxValueSize(c *gc.C) {
    77  	chk := quota.NewMapKeyValueSizeChecker(5, 3)
    78  	chk.Check(map[string]string{
    79  		"key1": "val",
    80  		"key2": "a long value",
    81  	})
    82  
    83  	err := chk.Outcome()
    84  	c.Assert(err, jc.Satisfies, errors.IsQuotaLimitExceeded)
    85  	c.Assert(err, gc.ErrorMatches, "max allowed value length.*", gc.Commentf("expected error about exceeding max value length"))
    86  }