github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/state/backups/create_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  	"os"
     8  	"path"
     9  	"runtime"
    10  
    11  	jc "github.com/juju/testing/checkers"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/state/backups"
    15  	backupstesting "github.com/juju/juju/state/backups/testing"
    16  )
    17  
    18  type createSuite struct {
    19  	LegacySuite
    20  }
    21  
    22  var _ = gc.Suite(&createSuite{}) // Register the suite.
    23  
    24  type TestDBDumper struct {
    25  	DumpDir string
    26  }
    27  
    28  func (d *TestDBDumper) Dump(dumpDir string) error {
    29  	d.DumpDir = dumpDir
    30  	return nil
    31  }
    32  
    33  func (s *createSuite) TestLegacy(c *gc.C) {
    34  	if runtime.GOOS == "windows" {
    35  		c.Skip("bug 1403084: Currently does not work on windows, see comments inside backups.create function")
    36  	}
    37  	meta := backupstesting.NewMetadataStarted()
    38  	metadataFile, err := meta.AsJSONBuffer()
    39  	c.Assert(err, jc.ErrorIsNil)
    40  	backupDir := c.MkDir()
    41  	_, testFiles, expected := s.createTestFiles(c)
    42  
    43  	dumper := &TestDBDumper{}
    44  	args := backups.NewTestCreateArgs(backupDir, testFiles, dumper, metadataFile, true)
    45  	result, err := backups.Create(args)
    46  	c.Assert(err, jc.ErrorIsNil)
    47  	c.Assert(result, gc.NotNil)
    48  
    49  	archiveFile, size, checksum, _ := backups.ExposeCreateResult(result)
    50  	c.Assert(archiveFile, gc.NotNil)
    51  
    52  	// Check the result.
    53  	file, ok := archiveFile.(*os.File)
    54  	c.Assert(ok, jc.IsTrue)
    55  
    56  	s.checkSize(c, file, size)
    57  	s.checkChecksum(c, file, checksum)
    58  	s.checkArchive(c, file, expected)
    59  }
    60  
    61  func (s *createSuite) TestMetadataFileMissing(c *gc.C) {
    62  	var backupDir string
    63  	var testFiles []string
    64  	dumper := &TestDBDumper{}
    65  
    66  	args := backups.NewTestCreateArgs(backupDir, testFiles, dumper, nil, true)
    67  	_, err := backups.Create(args)
    68  
    69  	c.Check(err, gc.ErrorMatches, "missing metadataReader")
    70  }
    71  
    72  func (s *createSuite) TestNoDownloadTrue(c *gc.C) {
    73  	s.testCreateNoDownload(c, true)
    74  }
    75  
    76  func (s *createSuite) TestNoDownloadFalse(c *gc.C) {
    77  	s.testCreateNoDownload(c, false)
    78  }
    79  
    80  func (s *createSuite) testCreateNoDownload(c *gc.C, noDownload bool) {
    81  	meta := backupstesting.NewMetadataStarted()
    82  	metadataFile, err := meta.AsJSONBuffer()
    83  	c.Assert(err, jc.ErrorIsNil)
    84  	backupDir := c.MkDir()
    85  	_, testFiles, _ := s.createTestFiles(c)
    86  
    87  	dumper := &TestDBDumper{}
    88  	args := backups.NewTestCreateArgs(backupDir, testFiles, dumper, metadataFile, noDownload)
    89  	result, err := backups.Create(args)
    90  	c.Assert(err, jc.ErrorIsNil)
    91  	c.Assert(result, gc.NotNil)
    92  	_, _, _, resultFilename := backups.ExposeCreateResult(result)
    93  	dir, filename := path.Split(resultFilename)
    94  	c.Assert(filename, gc.Equals, backups.TempFilename)
    95  	c.Assert(dir, jc.Contains, backupDir)
    96  	_, err = os.Stat(resultFilename)
    97  	if noDownload {
    98  		c.Assert(err, jc.Satisfies, os.IsNotExist)
    99  	} else {
   100  		c.Assert(err, jc.ErrorIsNil)
   101  	}
   102  }