github.com/juju/charm/v11@v11.2.0/bundle_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the LGPLv3, see LICENCE file for details. 3 4 package charm_test 5 6 import ( 7 "github.com/juju/testing" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 "github.com/juju/charm/v11" 12 ) 13 14 var _ = gc.Suite(&BundleSuite{}) 15 16 type BundleSuite struct { 17 testing.IsolationSuite 18 } 19 20 func (*BundleSuite) TestReadBundleDir(c *gc.C) { 21 path := bundleDirPath(c, "wordpress-simple") 22 b, err := charm.ReadBundle(path) 23 c.Assert(err, gc.IsNil) 24 c.Assert(b.ContainsOverlays(), jc.IsFalse) 25 c.Assert(b, gc.FitsTypeOf, (*charm.BundleDir)(nil)) 26 checkWordpressBundle(c, b, path) 27 } 28 29 func (*BundleSuite) TestReadMultiDocBundleDir(c *gc.C) { 30 path := bundleDirPath(c, "wordpress-simple-multidoc") 31 b, err := charm.ReadBundle(path) 32 c.Assert(err, gc.IsNil) 33 c.Assert(b.ContainsOverlays(), jc.IsTrue) 34 c.Assert(b, gc.FitsTypeOf, (*charm.BundleDir)(nil)) 35 checkWordpressBundle(c, b, path) 36 } 37 38 func (*BundleSuite) TestReadBundleArchive(c *gc.C) { 39 path := bundleDirPath(c, "wordpress-simple") 40 b, err := charm.ReadBundle(path) 41 c.Assert(err, gc.IsNil) 42 c.Assert(b.ContainsOverlays(), jc.IsFalse) 43 c.Assert(b, gc.FitsTypeOf, (*charm.BundleDir)(nil)) 44 checkWordpressBundle(c, b, path) 45 } 46 47 func (*BundleSuite) TestReadMultiDocBundleArchive(c *gc.C) { 48 path := bundleDirPath(c, "wordpress-simple-multidoc") 49 b, err := charm.ReadBundle(path) 50 c.Assert(err, gc.IsNil) 51 c.Assert(b.ContainsOverlays(), jc.IsTrue) 52 c.Assert(b, gc.FitsTypeOf, (*charm.BundleDir)(nil)) 53 checkWordpressBundle(c, b, path) 54 } 55 56 func checkWordpressBundle(c *gc.C, b charm.Bundle, path string) { 57 // Load the charms required by the bundle. 58 wordpressCharm := readCharmDir(c, "wordpress") 59 mysqlCharm := readCharmDir(c, "mysql") 60 61 bd := b.Data() 62 c.Assert(bd.RequiredCharms(), jc.DeepEquals, []string{"ch:mysql", "ch:wordpress"}) 63 64 charms := map[string]charm.Charm{ 65 "ch:wordpress": wordpressCharm, 66 "ch:mysql": mysqlCharm, 67 } 68 err := bd.VerifyWithCharms(verifyOk, nil, nil, charms) 69 c.Assert(err, gc.IsNil) 70 71 c.Assert(bd.Applications, jc.DeepEquals, map[string]*charm.ApplicationSpec{ 72 "wordpress": { 73 Charm: "ch:wordpress", 74 }, 75 "mysql": { 76 Charm: "ch:mysql", 77 NumUnits: 1, 78 }, 79 }) 80 c.Assert(bd.Relations, jc.DeepEquals, [][]string{ 81 {"wordpress:db", "mysql:server"}, 82 }) 83 c.Assert(b.ReadMe(), gc.Equals, "A dummy bundle\n") 84 switch b := b.(type) { 85 case *charm.BundleArchive: 86 c.Assert(b.Path, gc.Equals, path) 87 case *charm.BundleDir: 88 c.Assert(b.Path, gc.Equals, path) 89 } 90 } 91 92 func verifyOk(string) error { 93 return nil 94 }