func checkFileHasContents(c *gc.C, stor storage.StorageReader, name string, contents []byte, attempt utils.AttemptStrategy) { r, err := storage.GetWithRetry(stor, name, attempt) c.Assert(err, gc.IsNil) c.Check(r, gc.NotNil) defer r.Close() data, err := ioutil.ReadAll(r) c.Check(err, gc.IsNil) c.Check(data, gc.DeepEquals, contents) url, err := stor.URL(name) c.Assert(err, gc.IsNil) var resp *http.Response for a := attempt.Start(); a.Next(); { resp, err = utils.GetValidatingHTTPClient().Get(url) c.Assert(err, gc.IsNil) if resp.StatusCode != 404 { break } c.Logf("get retrying after earlier get succeeded. *sigh*.") } c.Assert(err, gc.IsNil) data, err = ioutil.ReadAll(resp.Body) c.Assert(err, gc.IsNil) defer resp.Body.Close() c.Assert(resp.StatusCode, gc.Equals, 200, gc.Commentf("error response: %s", data)) c.Check(data, gc.DeepEquals, contents) }
// PrimeTools sets up the current version of the tools to vers and // makes sure that they're available in the dataDir. func PrimeTools(c *gc.C, stor storage.Storage, dataDir string, vers version.Binary) *coretools.Tools { err := os.RemoveAll(filepath.Join(dataDir, "tools")) c.Assert(err, gc.IsNil) agentTools, err := uploadFakeToolsVersion(stor, vers) c.Assert(err, gc.IsNil) resp, err := utils.GetValidatingHTTPClient().Get(agentTools.URL) c.Assert(err, gc.IsNil) defer resp.Body.Close() err = agenttools.UnpackTools(dataDir, agentTools, resp.Body) c.Assert(err, gc.IsNil) return agentTools }
// Client returns a storage object that will talk to the // storage server at the given network address (see Serve) func Client(addr string) storage.Storage { return &localStorage{ addr: addr, client: utils.GetValidatingHTTPClient(), } }