gopkg.in/juju/charm.v6-unstable@v6.0.0-20171026192109-50d0c219b496/extra_bindings_test.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the LGPLv3, see LICENCE file for details. 3 4 package charm_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "gopkg.in/juju/charm.v6-unstable" 11 ) 12 13 var _ = gc.Suite(&extraBindingsSuite{}) 14 15 type extraBindingsSuite struct { 16 riakMeta charm.Meta 17 } 18 19 func (s *extraBindingsSuite) SetUpTest(c *gc.C) { 20 riakMeta, err := charm.ReadMeta(repoMeta(c, "riak")) 21 c.Assert(err, jc.ErrorIsNil) 22 s.riakMeta = *riakMeta 23 } 24 25 func (s *extraBindingsSuite) TestSchemaOkay(c *gc.C) { 26 raw := map[interface{}]interface{}{ 27 "foo": nil, 28 "bar": nil, 29 } 30 v, err := charm.ExtraBindingsSchema.Coerce(raw, nil) 31 c.Assert(err, jc.ErrorIsNil) 32 33 c.Check(v, jc.DeepEquals, map[interface{}]interface{}{ 34 "foo": nil, 35 "bar": nil, 36 }) 37 } 38 39 func (s *extraBindingsSuite) TestValidateWithEmptyNonNilMap(c *gc.C) { 40 s.riakMeta.ExtraBindings = map[string]charm.ExtraBinding{} 41 err := charm.ValidateMetaExtraBindings(s.riakMeta) 42 c.Assert(err, gc.ErrorMatches, "extra bindings cannot be empty when specified") 43 } 44 45 func (s *extraBindingsSuite) TestValidateWithEmptyName(c *gc.C) { 46 s.riakMeta.ExtraBindings = map[string]charm.ExtraBinding{ 47 "": charm.ExtraBinding{Name: ""}, 48 } 49 err := charm.ValidateMetaExtraBindings(s.riakMeta) 50 c.Assert(err, gc.ErrorMatches, "missing binding name") 51 } 52 53 func (s *extraBindingsSuite) TestValidateWithMismatchedName(c *gc.C) { 54 s.riakMeta.ExtraBindings = map[string]charm.ExtraBinding{ 55 "bar": charm.ExtraBinding{Name: "foo"}, 56 } 57 err := charm.ValidateMetaExtraBindings(s.riakMeta) 58 c.Assert(err, gc.ErrorMatches, `mismatched extra binding name: got "foo", expected "bar"`) 59 } 60 61 func (s *extraBindingsSuite) TestValidateWithRelationNamesMatchingExtraBindings(c *gc.C) { 62 s.riakMeta.ExtraBindings = map[string]charm.ExtraBinding{ 63 "admin": charm.ExtraBinding{Name: "admin"}, 64 "ring": charm.ExtraBinding{Name: "ring"}, 65 "foo": charm.ExtraBinding{Name: "foo"}, 66 } 67 err := charm.ValidateMetaExtraBindings(s.riakMeta) 68 c.Assert(err, gc.ErrorMatches, `relation names \(admin, ring\) cannot be used in extra bindings`) 69 }