github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/backups/upload_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package backups_test 5 6 import ( 7 "archive/tar" 8 "compress/gzip" 9 "os" 10 11 "github.com/juju/cmd" 12 "github.com/juju/cmd/cmdtesting" 13 "github.com/juju/errors" 14 jc "github.com/juju/testing/checkers" 15 gc "gopkg.in/check.v1" 16 17 "github.com/juju/juju/cmd/juju/backups" 18 "github.com/juju/juju/jujuclient/jujuclienttesting" 19 ) 20 21 type uploadSuite struct { 22 BaseBackupsSuite 23 command cmd.Command 24 filename string 25 } 26 27 var _ = gc.Suite(&uploadSuite{}) 28 29 func (s *uploadSuite) SetUpTest(c *gc.C) { 30 s.BaseBackupsSuite.SetUpTest(c) 31 32 s.command = backups.NewUploadCommandForTest(jujuclienttesting.MinimalStore()) 33 s.filename = "juju-backup-20140912-130755.abcd-spam-deadbeef-eggs.tar.gz" 34 } 35 36 func (s *uploadSuite) TearDownTest(c *gc.C) { 37 if err := os.Remove(s.filename); err != nil { 38 if !os.IsNotExist(err) { 39 c.Check(err, jc.ErrorIsNil) 40 } 41 } 42 43 s.BaseBackupsSuite.TearDownTest(c) 44 } 45 46 func (s *uploadSuite) createArchive(c *gc.C) { 47 archive, err := os.Create(s.filename) 48 c.Assert(err, jc.ErrorIsNil) 49 defer archive.Close() 50 51 compressed := gzip.NewWriter(archive) 52 defer compressed.Close() 53 54 tarball := tar.NewWriter(compressed) 55 defer tarball.Close() 56 57 var files = []struct{ Name, Body string }{ 58 {"root.tar", "<state config files>"}, 59 {"dump/oplog.bson", "<something here>"}, 60 } 61 for _, file := range files { 62 hdr := &tar.Header{ 63 Name: file.Name, 64 Size: int64(len(file.Body)), 65 } 66 err := tarball.WriteHeader(hdr) 67 c.Assert(err, jc.ErrorIsNil) 68 _, err = tarball.Write([]byte(file.Body)) 69 c.Assert(err, jc.ErrorIsNil) 70 } 71 } 72 73 func (s *uploadSuite) TestOkay(c *gc.C) { 74 s.createArchive(c) 75 s.setSuccess() 76 ctx, err := cmdtesting.RunCommand(c, s.command, s.filename) 77 c.Check(err, jc.ErrorIsNil) 78 79 out := MetaResultString 80 s.checkStd(c, ctx, out, "") 81 } 82 83 func (s *uploadSuite) TestFileMissing(c *gc.C) { 84 s.setSuccess() 85 _, err := cmdtesting.RunCommand(c, s.command, s.filename) 86 c.Check(os.IsNotExist(errors.Cause(err)), jc.IsTrue) 87 } 88 89 func (s *uploadSuite) TestError(c *gc.C) { 90 s.createArchive(c) 91 s.setFailure("failed!") 92 _, err := cmdtesting.RunCommand(c, s.command, s.filename) 93 c.Check(errors.Cause(err), gc.ErrorMatches, "failed!") 94 }