func (s *localHTTPSServerSuite) TestFetchFromImageMetadataSources(c *gc.C) { // Setup a custom URL for image metadata customStorage := openstack.CreateCustomStorage(s.env, "custom-metadata") customURL, err := customStorage.URL("") c.Assert(err, gc.IsNil) c.Check(customURL[:8], gc.Equals, "https://") config, err := s.env.Config().Apply( map[string]interface{}{"image-metadata-url": customURL}, ) c.Assert(err, gc.IsNil) err = s.env.SetConfig(config) c.Assert(err, gc.IsNil) sources, err := imagemetadata.GetMetadataSources(s.env) c.Assert(err, gc.IsNil) c.Assert(sources, gc.HasLen, 4) // Make sure there is something to download from each location private := "private-content" err = s.env.Storage().Put("images/"+private, bytes.NewBufferString(private), int64(len(private))) c.Assert(err, gc.IsNil) metadata := "metadata-content" metadataStorage := openstack.ImageMetadataStorage(s.env) err = metadataStorage.Put(metadata, bytes.NewBufferString(metadata), int64(len(metadata))) c.Assert(err, gc.IsNil) custom := "custom-content" err = customStorage.Put(custom, bytes.NewBufferString(custom), int64(len(custom))) c.Assert(err, gc.IsNil) // Read from the Config entry's image-metadata-url contentReader, url, err := sources[0].Fetch(custom) c.Assert(err, gc.IsNil) defer contentReader.Close() content, err := ioutil.ReadAll(contentReader) c.Assert(err, gc.IsNil) c.Assert(string(content), gc.Equals, custom) c.Check(url[:8], gc.Equals, "https://") // Read from the private bucket contentReader, url, err = sources[1].Fetch(private) c.Assert(err, gc.IsNil) defer contentReader.Close() content, err = ioutil.ReadAll(contentReader) c.Assert(err, gc.IsNil) c.Check(string(content), gc.Equals, private) c.Check(url[:8], gc.Equals, "https://") // Check the entry we got from keystone contentReader, url, err = sources[2].Fetch(metadata) c.Assert(err, gc.IsNil) defer contentReader.Close() content, err = ioutil.ReadAll(contentReader) c.Assert(err, gc.IsNil) c.Assert(string(content), gc.Equals, metadata) c.Check(url[:8], gc.Equals, "https://") // Verify that we are pointing at exactly where metadataStorage thinks we are metaURL, err := metadataStorage.URL(metadata) c.Assert(err, gc.IsNil) c.Check(url, gc.Equals, metaURL) }
func (s *localHTTPSServerSuite) TestFetchFromToolsMetadataSources(c *gc.C) { // Setup a custom URL for image metadata customStorage := openstack.CreateCustomStorage(s.env, "custom-tools-metadata") customURL, err := customStorage.URL("") c.Assert(err, gc.IsNil) c.Check(customURL[:8], gc.Equals, "https://") config, err := s.env.Config().Apply( map[string]interface{}{"tools-metadata-url": customURL}, ) c.Assert(err, gc.IsNil) err = s.env.SetConfig(config) c.Assert(err, gc.IsNil) sources, err := tools.GetMetadataSources(s.env) c.Assert(err, gc.IsNil) c.Assert(sources, gc.HasLen, 4) // Make sure there is something to download from each location private := "private-tools-content" // The Private data storage always tacks on "tools/" to the URL stream, // so add it in here err = s.env.Storage().Put("tools/"+private, bytes.NewBufferString(private), int64(len(private))) c.Assert(err, gc.IsNil) keystone := "keystone-tools-content" // The keystone entry just points at the root of the Swift storage, and // we have to create a container to upload any data. So we just point // into a subdirectory for the data we are downloading keystoneContainer := "tools-test" keystoneStorage := openstack.CreateCustomStorage(s.env, "tools-test") err = keystoneStorage.Put(keystone, bytes.NewBufferString(keystone), int64(len(keystone))) c.Assert(err, gc.IsNil) custom := "custom-tools-content" err = customStorage.Put(custom, bytes.NewBufferString(custom), int64(len(custom))) c.Assert(err, gc.IsNil) // Read from the Config entry's tools-metadata-url contentReader, url, err := sources[0].Fetch(custom) c.Assert(err, gc.IsNil) defer contentReader.Close() content, err := ioutil.ReadAll(contentReader) c.Assert(err, gc.IsNil) c.Assert(string(content), gc.Equals, custom) c.Check(url[:8], gc.Equals, "https://") // Read from the private bucket contentReader, url, err = sources[1].Fetch(private) c.Assert(err, gc.IsNil) defer contentReader.Close() content, err = ioutil.ReadAll(contentReader) c.Assert(err, gc.IsNil) c.Check(string(content), gc.Equals, private) //c.Check(url[:8], gc.Equals, "https://") c.Check(strings.HasSuffix(url, "tools/"+private), jc.IsTrue) // Check the entry we got from keystone // Now fetch the data, and verify the contents. contentReader, url, err = sources[2].Fetch(keystoneContainer + "/" + keystone) c.Assert(err, gc.IsNil) defer contentReader.Close() content, err = ioutil.ReadAll(contentReader) c.Assert(err, gc.IsNil) c.Assert(string(content), gc.Equals, keystone) c.Check(url[:8], gc.Equals, "https://") keystoneURL, err := keystoneStorage.URL(keystone) c.Assert(err, gc.IsNil) c.Check(url, gc.Equals, keystoneURL) // We *don't* test Fetch for sources[3] because it points to // streams.canonical.com }