github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/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 const backupfileRegex = "juju-backup-\\d{8}-\\d{6}.tar.gz" 23 24 var _ = gc.Suite(&createSuite{}) // Register the suite. 25 26 type TestDBDumper struct { 27 DumpDir string 28 } 29 30 func (d *TestDBDumper) Dump(dumpDir string) error { 31 d.DumpDir = dumpDir 32 return nil 33 } 34 35 func (d *TestDBDumper) IsSnap() bool { 36 return false 37 } 38 39 func (s *createSuite) TestLegacy(c *gc.C) { 40 if runtime.GOOS == "windows" { 41 c.Skip("bug 1403084: Currently does not work on windows, see comments inside backups.create function") 42 } 43 meta := backupstesting.NewMetadataStarted() 44 metadataFile, err := meta.AsJSONBuffer() 45 c.Assert(err, jc.ErrorIsNil) 46 backupDir := c.MkDir() 47 _, testFiles, expected := s.createTestFiles(c) 48 49 dumper := &TestDBDumper{} 50 args := backups.NewTestCreateArgs(backupDir, testFiles, dumper, metadataFile) 51 result, err := backups.Create(args) 52 c.Assert(err, jc.ErrorIsNil) 53 c.Assert(result, gc.NotNil) 54 55 archiveFile, size, checksum, _ := backups.ExposeCreateResult(result) 56 c.Assert(archiveFile, gc.NotNil) 57 58 // Check the result. 59 file, ok := archiveFile.(*os.File) 60 c.Assert(ok, jc.IsTrue) 61 62 s.checkSize(c, file, size) 63 s.checkChecksum(c, file, checksum) 64 s.checkArchive(c, file, expected) 65 } 66 67 func (s *createSuite) TestMetadataFileMissing(c *gc.C) { 68 var backupDir string 69 var testFiles []string 70 dumper := &TestDBDumper{} 71 72 args := backups.NewTestCreateArgs(backupDir, testFiles, dumper, nil) 73 _, err := backups.Create(args) 74 75 c.Check(err, gc.ErrorMatches, "missing metadataReader") 76 } 77 78 func (s *createSuite) TestCreate(c *gc.C) { 79 meta := backupstesting.NewMetadataStarted() 80 metadataFile, err := meta.AsJSONBuffer() 81 c.Assert(err, jc.ErrorIsNil) 82 backupDir := c.MkDir() 83 _, testFiles, _ := s.createTestFiles(c) 84 85 dumper := &TestDBDumper{} 86 args := backups.NewTestCreateArgs(backupDir, testFiles, dumper, metadataFile) 87 result, err := backups.Create(args) 88 c.Assert(err, jc.ErrorIsNil) 89 c.Assert(result, gc.NotNil) 90 _, _, _, resultFilename := backups.ExposeCreateResult(result) 91 dir, filename := path.Split(resultFilename) 92 c.Assert(filename, gc.Matches, backupfileRegex) 93 c.Assert(dir, jc.Contains, backupDir) 94 _, err = os.Stat(resultFilename) 95 c.Assert(err, jc.ErrorIsNil) 96 }