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 }