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  }