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  }