// putBinary stores a faked binary in the test directory. func putBinary(c *gc.C, storagePath string, v version.Binary) { data := v.String() name := tools.StorageName(v) filename := filepath.Join(storagePath, name) dir := filepath.Dir(filename) err := os.MkdirAll(dir, 0755) c.Assert(err, gc.IsNil) err = ioutil.WriteFile(filename, []byte(data), 0666) c.Assert(err, gc.IsNil) }
func (s *agentSuite) uploadTools(c *C, vers version.Binary) *tools.Tools { tgz := coretesting.TarGz( coretesting.NewTarFile("jujud", 0777, "jujud contents "+vers.String()), ) storage := s.Conn.Environ.Storage() err := storage.Put(tools.StorageName(vers), bytes.NewReader(tgz), int64(len(tgz))) c.Assert(err, IsNil) url, err := s.Conn.Environ.Storage().URL(tools.StorageName(vers)) c.Assert(err, IsNil) return &tools.Tools{URL: url, Binary: vers} }
func uploadFakeToolsVersion(storage environs.Storage, vers version.Binary) (*state.Tools, error) { data := vers.String() name := tools.StorageName(vers) log.Noticef("environs/testing: uploading FAKE tools %s", vers) if err := storage.Put(name, strings.NewReader(data), int64(len(data))); err != nil { return nil, err } url, err := storage.URL(name) if err != nil { return nil, err } return &state.Tools{Binary: vers, URL: url}, nil }
// uploadTools uploads fake tools with the given version number // to the dummy environment's storage and returns a tools // value describing them. func (s *UpgraderSuite) uploadTools(c *gc.C, vers version.Binary) *tools.Tools { // TODO(rog) make UploadFakeToolsVersion in environs/testing // sufficient for this use case. tgz := coretesting.TarGz( coretesting.NewTarFile("jujud", 0777, "jujud contents "+vers.String()), ) storage := s.Conn.Environ.Storage() err := storage.Put(tools.StorageName(vers), bytes.NewReader(tgz), int64(len(tgz))) c.Assert(err, gc.IsNil) url, err := s.Conn.Environ.Storage().URL(tools.StorageName(vers)) c.Assert(err, gc.IsNil) return &tools.Tools{URL: url, Version: vers} }
// PutBinary stores a faked binary in the HTTP test storage. func (s *EC2HTTPTestStorage) PutBinary(v version.Binary) { data := v.String() name := tools.StorageName(v) parts := strings.Split(name, "/") if len(parts) > 1 { // Also create paths as entries. Needed for // the correct contents of the list bucket result. path := "" for i := 0; i < len(parts)-1; i++ { path = path + parts[i] + "/" s.files[path] = []byte{} } } s.files[name] = []byte(data) }
// bestTools is like BestTools but operates on a single list of tools. func bestTools(toolsList []*state.Tools, vers version.Binary, flags ToolsSearchFlags) *state.Tools { var bestTools *state.Tools allowDev := vers.IsDev() || flags&DevVersion != 0 allowHigher := flags&HighestVersion != 0 for _, t := range toolsList { if t.Major != vers.Major || t.Series != vers.Series || t.Arch != vers.Arch || !allowDev && t.IsDev() || !allowHigher && vers.Number.Less(t.Number) { continue } if bestTools == nil || bestTools.Number.Less(t.Number) { bestTools = t } } return bestTools }
// SharedToolsDir returns the directory that is used to // store binaries for the given version of the juju tools // within the dataDir directory. func SharedToolsDir(dataDir string, vers version.Binary) string { return path.Join(dataDir, "tools", vers.String()) }
// ToolsStoragePath returns the path that is used to store and // retrieve the given version of the juju tools in a Storage. func ToolsStoragePath(vers version.Binary) string { return toolPrefix + vers.String() + ".tgz" }
// StorageName returns the name that is used to store and retrieve the // given version of the juju tools. func StorageName(vers version.Binary) string { return toolPrefix + vers.String() + toolSuffix }