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 }