66
66
func registerSimpleStreamsTests() {
67
67
gc.Suite(&simplestreamsSuite{
68
68
LocalLiveSimplestreamsSuite: sstesting.LocalLiveSimplestreamsSuite{
69
Source: simplestreams.NewURLDataSource("test:", simplestreams.VerifySSLHostnames),
69
Source: simplestreams.NewURLDataSource(
70
"test roundtripper", "test:", simplestreams.VerifySSLHostnames),
70
71
RequireSigned: false,
71
72
DataType: imagemetadata.ImageIds,
72
73
ValidConstraint: imagemetadata.NewImageConstraint(simplestreams.LookupParams{
85
86
func registerLiveSimpleStreamsTests(baseURL string, validImageConstraint simplestreams.LookupConstraint, requireSigned bool) {
86
87
gc.Suite(&sstesting.LocalLiveSimplestreamsSuite{
87
Source: simplestreams.NewURLDataSource(baseURL, simplestreams.VerifySSLHostnames),
88
Source: simplestreams.NewURLDataSource("test", baseURL, simplestreams.VerifySSLHostnames),
88
89
RequireSigned: requireSigned,
89
90
DataType: imagemetadata.ImageIds,
90
91
ValidConstraint: validImageConstraint,
265
266
Series: []string{"precise"},
266
267
Arches: t.arches,
268
images, err := imagemetadata.Fetch([]simplestreams.DataSource{s.Source}, simplestreams.DefaultIndexPath, imageConstraint, s.RequireSigned)
269
// Add invalid datasource and check later that resolveInfo is correct.
270
invalidSource := simplestreams.NewURLDataSource("invalid", "file://invalid", simplestreams.VerifySSLHostnames)
271
images, resolveInfo, err := imagemetadata.Fetch(
272
[]simplestreams.DataSource{invalidSource, s.Source}, simplestreams.DefaultIndexPath,
273
imageConstraint, s.RequireSigned)
269
274
if !c.Check(err, gc.IsNil) {
273
278
testImage.Version = t.version
275
280
c.Check(images, gc.DeepEquals, t.images)
281
c.Check(resolveInfo, gc.DeepEquals, &simplestreams.ResolveInfo{
282
Source: "test roundtripper",
283
Signed: s.RequireSigned,
284
IndexURL: "test:/streams/v1/index.json",
366
377
func (s *signedSuite) TestSignedImageMetadata(c *gc.C) {
367
signedSource := simplestreams.NewURLDataSource("signedtest://host/signed", simplestreams.VerifySSLHostnames)
378
signedSource := simplestreams.NewURLDataSource("test", "signedtest://host/signed", simplestreams.VerifySSLHostnames)
368
379
imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{
369
380
CloudSpec: simplestreams.CloudSpec{"us-east-1", "https://ec2.us-east-1.amazonaws.com"},
370
381
Series: []string{"precise"},
371
382
Arches: []string{"amd64"},
373
images, err := imagemetadata.Fetch(
384
images, resolveInfo, err := imagemetadata.Fetch(
374
385
[]simplestreams.DataSource{signedSource}, simplestreams.DefaultIndexPath, imageConstraint, true)
375
386
c.Assert(err, gc.IsNil)
376
387
c.Assert(len(images), gc.Equals, 1)
377
388
c.Assert(images[0].Id, gc.Equals, "ami-123456")
389
c.Check(resolveInfo, gc.DeepEquals, &simplestreams.ResolveInfo{
392
IndexURL: "signedtest://host/signed/streams/v1/index.sjson",
380
397
func (s *signedSuite) TestSignedImageMetadataInvalidSignature(c *gc.C) {
381
signedSource := simplestreams.NewURLDataSource("signedtest://host/signed", simplestreams.VerifySSLHostnames)
398
signedSource := simplestreams.NewURLDataSource("test", "signedtest://host/signed", simplestreams.VerifySSLHostnames)
382
399
imageConstraint := imagemetadata.NewImageConstraint(simplestreams.LookupParams{
383
400
CloudSpec: simplestreams.CloudSpec{"us-east-1", "https://ec2.us-east-1.amazonaws.com"},
384
401
Series: []string{"precise"},
385
402
Arches: []string{"amd64"},
387
404
imagemetadata.SetSigningPublicKey(s.origKey)
388
_, err := imagemetadata.Fetch(
405
_, _, err := imagemetadata.Fetch(
389
406
[]simplestreams.DataSource{signedSource}, simplestreams.DefaultIndexPath, imageConstraint, true)
390
407
c.Assert(err, gc.ErrorMatches, "cannot read index data.*")