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  }