func (s *backupsSuite) TestCreateOkay(c *gc.C) { // Patch the internals. archiveFile := ioutil.NopCloser(bytes.NewBufferString("<compressed tarball>")) result := backups.NewTestCreateResult(archiveFile, 10, "<checksum>") received, testCreate := backups.NewTestCreate(result) s.PatchValue(backups.RunCreate, testCreate) rootDir := "<was never set>" s.PatchValue(backups.GetFilesToBackUp, func(root string) ([]string, error) { rootDir = root return []string{"<some file>"}, nil }) var receivedDBInfo *db.ConnInfo s.PatchValue(backups.GetDBDumper, func(info db.ConnInfo) db.Dumper { receivedDBInfo = &info return nil }) // Run the backup. dbInfo := db.ConnInfo{"a", "b", "c"} origin := metadata.NewOrigin("<env ID>", "<machine ID>", "<hostname>") meta, err := s.api.Create(dbInfo, *origin, "some notes") // Test the call values. filesToBackUp, _ := backups.ExposeCreateArgs(received) c.Check(filesToBackUp, jc.SameContents, []string{"<some file>"}) err = receivedDBInfo.Validate() c.Assert(err, gc.IsNil) c.Check(receivedDBInfo.Address, gc.Equals, "a") c.Check(receivedDBInfo.Username, gc.Equals, "b") c.Check(receivedDBInfo.Password, gc.Equals, "c") c.Check(rootDir, gc.Equals, "") // Check the resulting metadata. c.Check(meta.ID(), gc.Not(gc.Equals), "") c.Check(meta.Size(), gc.Equals, int64(10)) c.Check(meta.Checksum(), gc.Equals, "<checksum>") c.Check(meta.Stored(), gc.Equals, true) metaOrigin := meta.Origin() c.Check(metaOrigin.Environment(), gc.Equals, "<env ID>") c.Check(metaOrigin.Machine(), gc.Equals, "<machine ID>") c.Check(metaOrigin.Hostname(), gc.Equals, "<hostname>") c.Check(meta.Notes(), gc.Equals, "some notes") // Check the file storage. storedMeta, storedFile, err := s.storage.Get(meta.ID()) c.Check(err, gc.IsNil) c.Check(storedMeta, gc.DeepEquals, meta) data, err := ioutil.ReadAll(storedFile) c.Assert(err, gc.IsNil) c.Check(string(data), gc.Equals, "<compressed tarball>") }
func (s *backupsSuite) TestCreateFailToFinishMeta(c *gc.C) { s.PatchValue(backups.TestGetFilesToBackUp, func(root string, paths *backups.Paths, oldmachine string) ([]string, error) { return []string{}, nil }) _, testCreate := backups.NewTestCreate(nil) s.PatchValue(backups.RunCreate, testCreate) s.PatchValue(backups.FinishMeta, backups.NewTestMetaFinisher("failed!")) s.checkFailure(c, "while updating metadata: failed!") }
func (s *backupsSuite) TestCreateFailToStoreArchive(c *gc.C) { s.PatchValue(backups.TestGetFilesToBackUp, func(root string, paths *backups.Paths, oldmachine string) ([]string, error) { return []string{}, nil }) _, testCreate := backups.NewTestCreate(nil) s.PatchValue(backups.RunCreate, testCreate) s.PatchValue(backups.FinishMeta, backups.NewTestMetaFinisher("")) s.PatchValue(backups.StoreArchiveRef, backups.NewTestArchiveStorer("failed!")) s.checkFailure(c, "while storing backup archive: failed!") }
func (s *backupsSuite) TestCreateOkay(c *gc.C) { // Patch the internals. archiveFile := ioutil.NopCloser(bytes.NewBufferString("<compressed tarball>")) result := backups.NewTestCreateResult(archiveFile, 10, "<checksum>") received, testCreate := backups.NewTestCreate(result) s.PatchValue(backups.RunCreate, testCreate) rootDir := "<was never set>" s.PatchValue(backups.TestGetFilesToBackUp, func(root string, paths *backups.Paths, oldmachine string) ([]string, error) { rootDir = root return []string{"<some file>"}, nil }) var receivedDBInfo *backups.DBInfo s.PatchValue(backups.GetDBDumper, func(info *backups.DBInfo) (backups.DBDumper, error) { receivedDBInfo = info return nil, nil }) stored := s.setStored("spam") // Run the backup. paths := backups.Paths{DataDir: "/var/lib/juju"} targets := set.NewStrings("juju", "admin") dbInfo := backups.DBInfo{"a", "b", "c", targets} meta := backupstesting.NewMetadataStarted() backupstesting.SetOrigin(meta, "<env ID>", "<machine ID>", "<hostname>") meta.Notes = "some notes" err := s.api.Create(meta, &paths, &dbInfo) // Test the call values. s.Storage.CheckCalled(c, "spam", meta, archiveFile, "Add", "Metadata") filesToBackUp, _ := backups.ExposeCreateArgs(received) c.Check(filesToBackUp, jc.SameContents, []string{"<some file>"}) c.Check(receivedDBInfo.Address, gc.Equals, "a") c.Check(receivedDBInfo.Username, gc.Equals, "b") c.Check(receivedDBInfo.Password, gc.Equals, "c") c.Check(receivedDBInfo.Targets, gc.DeepEquals, targets) c.Check(rootDir, gc.Equals, "") // Check the resulting metadata. c.Check(meta, gc.Equals, s.Storage.MetaArg) c.Check(meta.ID(), gc.Equals, "spam") c.Check(meta.Size(), gc.Equals, int64(10)) c.Check(meta.Checksum(), gc.Equals, "<checksum>") c.Check(meta.Stored().Unix(), gc.Equals, stored.Unix()) c.Check(meta.Origin.Environment, gc.Equals, "<env ID>") c.Check(meta.Origin.Machine, gc.Equals, "<machine ID>") c.Check(meta.Origin.Hostname, gc.Equals, "<hostname>") c.Check(meta.Notes, gc.Equals, "some notes") // Check the file storage. s.Storage.Meta = meta s.Storage.File = archiveFile storedMeta, storedFile, err := s.Storage.Get(meta.ID()) c.Check(err, jc.ErrorIsNil) c.Check(storedMeta, gc.DeepEquals, meta) data, err := ioutil.ReadAll(storedFile) c.Assert(err, jc.ErrorIsNil) c.Check(string(data), gc.Equals, "<compressed tarball>") }