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 }