func (s *uploadSuite) TestMockBuildTools(c *gc.C) { checkTools := func(tools *sync.BuiltAgent, vers version.Binary) { c.Check(tools.StorageName, gc.Equals, "name") c.Check(tools.Version, jc.DeepEquals, vers) f, err := os.Open(filepath.Join(tools.Dir, "name")) c.Assert(err, jc.ErrorIsNil) defer f.Close() gzr, err := gzip.NewReader(f) c.Assert(err, jc.ErrorIsNil) _, tr, err := tar.FindFile(gzr, names.Jujud) c.Assert(err, jc.ErrorIsNil) content, err := ioutil.ReadAll(tr) c.Assert(err, jc.ErrorIsNil) c.Check(string(content), gc.Equals, fmt.Sprintf("jujud contents %s", vers)) } current := version.MustParseBinary("1.9.1-trusty-amd64") s.PatchValue(&jujuversion.Current, current.Number) s.PatchValue(&arch.HostArch, func() string { return current.Arch }) s.PatchValue(&series.HostSeries, func() string { return current.Series }) buildToolsFunc := toolstesting.GetMockBuildTools(c) builtTools, err := buildToolsFunc(true, nil, "released") c.Assert(err, jc.ErrorIsNil) checkTools(builtTools, current) vers := version.MustParseBinary("1.5.3-trusty-amd64") builtTools, err = buildToolsFunc(true, &vers.Number, "released") c.Assert(err, jc.ErrorIsNil) checkTools(builtTools, vers) }
// Metadata returns the metadata stored in the backup archive. If no // metadata is there, errors.NotFound is returned. func (ad *ArchiveData) Metadata() (*Metadata, error) { buf := ad.NewBuffer() _, metaFile, err := tar.FindFile(buf, ad.MetadataFile) if err != nil { return nil, errors.Trace(err) } meta, err := NewMetadataJSONReader(metaFile) return meta, errors.Trace(err) }
// OpenBundledFile returns an open ReadCloser for the corresponding file in // the archived files bundle. func (ws *ArchiveWorkspace) OpenBundledFile(filename string) (io.Reader, error) { if filepath.IsAbs(filename) { return nil, errors.Errorf("filename must be relative, got %q", filename) } tarFile, err := os.Open(ws.FilesBundle) if err != nil { return nil, errors.Trace(err) } _, file, err := tar.FindFile(tarFile, filename) if err != nil { tarFile.Close() return nil, errors.Trace(err) } return file, nil }