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  }