gopkg.in/juju/charm.v6-unstable@v6.0.0-20171026192109-50d0c219b496/bundlearchive_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  	"fmt"
     8  	"io/ioutil"
     9  	"os"
    10  	"path/filepath"
    11  
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"gopkg.in/juju/charm.v6-unstable"
    15  )
    16  
    17  var _ = gc.Suite(&BundleArchiveSuite{})
    18  
    19  type BundleArchiveSuite struct {
    20  	archivePath string
    21  }
    22  
    23  func (s *BundleArchiveSuite) SetUpSuite(c *gc.C) {
    24  	s.archivePath = archivePath(c, readBundleDir(c, "wordpress-simple"))
    25  }
    26  
    27  func (s *BundleArchiveSuite) TestReadBundleArchive(c *gc.C) {
    28  	archive, err := charm.ReadBundleArchive(s.archivePath)
    29  	c.Assert(err, gc.IsNil)
    30  	checkWordpressBundle(c, archive, s.archivePath)
    31  }
    32  
    33  func (s *BundleArchiveSuite) TestReadBundleArchiveBytes(c *gc.C) {
    34  	data, err := ioutil.ReadFile(s.archivePath)
    35  	c.Assert(err, gc.IsNil)
    36  
    37  	archive, err := charm.ReadBundleArchiveBytes(data)
    38  	c.Assert(err, gc.IsNil)
    39  	checkWordpressBundle(c, archive, "")
    40  }
    41  
    42  func (s *BundleArchiveSuite) TestReadBundleArchiveFromReader(c *gc.C) {
    43  	f, err := os.Open(s.archivePath)
    44  	c.Assert(err, gc.IsNil)
    45  	defer f.Close()
    46  	info, err := f.Stat()
    47  	c.Assert(err, gc.IsNil)
    48  
    49  	archive, err := charm.ReadBundleArchiveFromReader(f, info.Size())
    50  	c.Assert(err, gc.IsNil)
    51  	checkWordpressBundle(c, archive, "")
    52  }
    53  
    54  func (s *BundleArchiveSuite) TestReadBundleArchiveWithoutBundleYAML(c *gc.C) {
    55  	testReadBundleArchiveWithoutFile(c, "bundle.yaml")
    56  }
    57  
    58  func (s *BundleArchiveSuite) TestReadBundleArchiveWithoutREADME(c *gc.C) {
    59  	testReadBundleArchiveWithoutFile(c, "README.md")
    60  }
    61  
    62  func testReadBundleArchiveWithoutFile(c *gc.C, fileToRemove string) {
    63  	path := cloneDir(c, bundleDirPath(c, "wordpress-simple"))
    64  	dir, err := charm.ReadBundleDir(path)
    65  	c.Assert(err, gc.IsNil)
    66  
    67  	// Remove the file from the bundle directory.
    68  	// ArchiveTo just zips the contents of the directory as-is,
    69  	// so the resulting bundle archive not contain the
    70  	// file.
    71  	err = os.Remove(filepath.Join(dir.Path, fileToRemove))
    72  	c.Assert(err, gc.IsNil)
    73  
    74  	archivePath := filepath.Join(c.MkDir(), "out.bundle")
    75  	dstf, err := os.Create(archivePath)
    76  	c.Assert(err, gc.IsNil)
    77  
    78  	err = dir.ArchiveTo(dstf)
    79  	dstf.Close()
    80  
    81  	archive, err := charm.ReadBundleArchive(archivePath)
    82  	// Slightly dubious assumption: the quoted file name has no
    83  	// regexp metacharacters worth worrying about.
    84  	c.Assert(err, gc.ErrorMatches, fmt.Sprintf("archive file %q not found", fileToRemove))
    85  	c.Assert(archive, gc.IsNil)
    86  }
    87  
    88  func (s *BundleArchiveSuite) TestExpandTo(c *gc.C) {
    89  	dir := c.MkDir()
    90  	archive, err := charm.ReadBundleArchive(s.archivePath)
    91  	c.Assert(err, gc.IsNil)
    92  	err = archive.ExpandTo(dir)
    93  	c.Assert(err, gc.IsNil)
    94  	bdir, err := charm.ReadBundleDir(dir)
    95  	c.Assert(err, gc.IsNil)
    96  	c.Assert(bdir.ReadMe(), gc.Equals, archive.ReadMe())
    97  	c.Assert(bdir.Data(), gc.DeepEquals, archive.Data())
    98  }