func (*metadataHelperSuite) TestResolveMetadata(c *gc.C) { var versionStrings = []string{"1.2.3-precise-amd64"} dir := c.MkDir() ttesting.MakeTools(c, dir, "releases", versionStrings) toolsList := coretools.List{{ Version: version.MustParseBinary(versionStrings[0]), Size: 123, SHA256: "abc", }} stor, err := filestorage.NewFileStorageReader(dir) c.Assert(err, gc.IsNil) err = tools.ResolveMetadata(stor, nil) c.Assert(err, gc.IsNil) // We already have size/sha256, so ensure that storage isn't consulted. countingStorage := &countingStorage{StorageReader: stor} metadata := tools.MetadataFromTools(toolsList) err = tools.ResolveMetadata(countingStorage, metadata) c.Assert(err, gc.IsNil) c.Assert(countingStorage.counter, gc.Equals, 0) // Now clear size/sha256, and check that it is called, and // the size/sha256 sum are updated. metadata[0].Size = 0 metadata[0].SHA256 = "" err = tools.ResolveMetadata(countingStorage, metadata) c.Assert(err, gc.IsNil) c.Assert(countingStorage.counter, gc.Equals, 1) c.Assert(metadata[0].Size, gc.Not(gc.Equals), 0) c.Assert(metadata[0].SHA256, gc.Not(gc.Equals), "") }
func (s *filestorageSuite) SetUpTest(c *gc.C) { s.dir = c.MkDir() var err error s.reader, err = filestorage.NewFileStorageReader(s.dir) c.Assert(err, gc.IsNil) s.writer, err = filestorage.NewFileStorageWriter(s.dir) c.Assert(err, gc.IsNil) }
func (s *filestorageSuite) TestPathRelativeToHome(c *gc.C) { homeDir := osenv.Home() tempDir, err := ioutil.TempDir(homeDir, "") c.Assert(err, gc.IsNil) defer os.RemoveAll(tempDir) dirName := strings.Replace(tempDir, homeDir, "", -1) reader, err := filestorage.NewFileStorageReader(filepath.Join("~", dirName)) c.Assert(err, gc.IsNil) url, err := reader.URL("") c.Assert(err, gc.IsNil) c.Assert(url, gc.Equals, "file://"+filepath.Join(homeDir, dirName)) }
func (s *filestorageSuite) TestRelativePath(c *gc.C) { dir := c.MkDir() err := os.MkdirAll(filepath.Join(dir, "a", "b", "c"), os.ModePerm) c.Assert(err, gc.IsNil) cwd, err := os.Getwd() c.Assert(err, gc.IsNil) err = os.Chdir(filepath.Join(dir, "a", "b", "c")) c.Assert(err, gc.IsNil) defer os.Chdir(cwd) reader, err := filestorage.NewFileStorageReader("../..") c.Assert(err, gc.IsNil) url, err := reader.URL("") c.Assert(err, gc.IsNil) c.Assert(url, gc.Equals, "file://"+dir+"/a") }
func (c *ToolsMetadataCommand) Run(context *cmd.Context) error { loggo.RegisterWriter("toolsmetadata", cmd.NewCommandLogWriter("juju.environs.tools", context.Stdout, context.Stderr), loggo.INFO) defer loggo.RemoveWriter("toolsmetadata") if c.metadataDir == "" { c.metadataDir = osenv.JujuHome() } else { c.metadataDir = context.AbsPath(c.metadataDir) } sourceStorage, err := filestorage.NewFileStorageReader(c.metadataDir) if err != nil { return err } fmt.Fprintf(context.Stdout, "Finding tools in %s\n", c.metadataDir) const minorVersion = -1 toolsList, err := envtools.ReadList(sourceStorage, version.Current.Major, minorVersion) if err == envtools.ErrNoTools { var source string source, err = envtools.ToolsURL(envtools.DefaultBaseURL) if err != nil { return err } sourceDataSource := simplestreams.NewURLDataSource("local source", source, utils.VerifySSLHostnames) toolsList, err = envtools.FindToolsForCloud( []simplestreams.DataSource{sourceDataSource}, simplestreams.CloudSpec{}, version.Current.Major, minorVersion, coretools.Filter{}) } if err != nil { return err } targetStorage, err := filestorage.NewFileStorageWriter(c.metadataDir) if err != nil { return err } writeMirrors := envtools.DoNotWriteMirrors if c.public { writeMirrors = envtools.WriteMirrors } return mergeAndWriteMetadata(targetStorage, toolsList, writeMirrors) }
// ParseMetadataFromDir loads ToolsMetadata from the specified directory. func ParseMetadataFromDir(c *gc.C, metadataDir string, expectMirrors bool) []*tools.ToolsMetadata { stor, err := filestorage.NewFileStorageReader(metadataDir) c.Assert(err, gc.IsNil) return ParseMetadataFromStorage(c, stor, expectMirrors) }
// ParseMetadataFromDir loads ImageMetadata from the specified directory. func ParseMetadataFromDir(c *gc.C, metadataDir string) []*imagemetadata.ImageMetadata { stor, err := filestorage.NewFileStorageReader(metadataDir) c.Assert(err, gc.IsNil) return ParseMetadataFromStorage(c, stor) }