func (s *metadataSuite) TestBuildMetadata(c *gc.C) { archive, err := os.Create(filepath.Join(c.MkDir(), "juju-backup.tgz")) c.Assert(err, jc.ErrorIsNil) _, err = archive.Write([]byte("<compressed data>")) c.Assert(err, jc.ErrorIsNil) fi, err := archive.Stat() c.Assert(err, jc.ErrorIsNil) finished := backups.FileTimestamp(fi).Unix() meta, err := backups.BuildMetadata(archive) c.Assert(err, jc.ErrorIsNil) c.Check(meta.ID(), gc.Equals, "") c.Check(meta.Checksum(), gc.Equals, "2jmj7l5rSw0yVb/vlWAYkK/YBwk=") c.Check(meta.ChecksumFormat(), gc.Equals, "SHA-1, base64 encoded") c.Check(meta.Size(), gc.Equals, int64(17)) c.Check(meta.Stored(), gc.IsNil) c.Check(meta.Started.Unix(), gc.Equals, int64(time.Time{}.Unix())) c.Check(meta.Finished.Unix(), gc.Equals, finished) c.Check(meta.Notes, gc.Equals, "") c.Check(meta.Origin.Environment, gc.Equals, backups.UnknownString) c.Check(meta.Origin.Machine, gc.Equals, backups.UnknownString) c.Check(meta.Origin.Hostname, gc.Equals, backups.UnknownString) c.Check(meta.Origin.Version.String(), gc.Equals, backups.UnknownVersion.String()) }
func getArchive(filename string) (rc ArchiveReader, metaResult *params.BackupsMetadataResult, err error) { defer func() { if err != nil && rc != nil { rc.Close() } }() archive, err := os.Open(filename) rc = archive if err != nil { return nil, nil, errors.Trace(err) } // Extract the metadata. ad, err := statebackups.NewArchiveDataReader(archive) if err != nil { return nil, nil, errors.Trace(err) } _, err = archive.Seek(0, os.SEEK_SET) if err != nil { return nil, nil, errors.Trace(err) } meta, err := ad.Metadata() if err != nil { if !errors.IsNotFound(err) { return nil, nil, errors.Trace(err) } meta, err = statebackups.BuildMetadata(archive) if err != nil { return nil, nil, errors.Trace(err) } } // Make sure the file info is set. fileMeta, err := statebackups.BuildMetadata(archive) if err != nil { return nil, nil, errors.Trace(err) } if meta.Size() == int64(0) { if err := meta.SetFileInfo(fileMeta.Size(), "", ""); err != nil { return nil, nil, errors.Trace(err) } } if meta.Checksum() == "" { err := meta.SetFileInfo(0, fileMeta.Checksum(), fileMeta.ChecksumFormat()) if err != nil { return nil, nil, errors.Trace(err) } } if meta.Finished == nil || meta.Finished.IsZero() { meta.Finished = fileMeta.Finished } _, err = archive.Seek(0, os.SEEK_SET) if err != nil { return nil, nil, errors.Trace(err) } // Pack the metadata into a result. // TODO(perrito666) change the identity of ResultfromMetadata to // return a pointer. mResult := apiserverbackups.ResultFromMetadata(meta) metaResult = &mResult return archive, metaResult, nil }