github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/environs/simplestreams/testing/testing.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package testing 5 6 // Provides a TestDataSuite which creates and provides http access to sample simplestreams metadata. 7 8 import ( 9 "fmt" 10 "net/http" 11 12 jc "github.com/juju/testing/checkers" 13 gc "gopkg.in/check.v1" 14 15 "github.com/juju/juju/environs/jujutest" 16 "github.com/juju/juju/environs/simplestreams" 17 "github.com/juju/juju/testing" 18 "github.com/juju/juju/version" 19 ) 20 21 var PrivateKeyPassphrase = "12345" 22 23 var SignedMetadataPrivateKey = ` 24 -----BEGIN PGP PRIVATE KEY BLOCK----- 25 Version: GnuPG v1.4.12 (GNU/Linux) 26 27 lQH+BFJCk2EBBAC4wo3+aJ0PSeE54sv+GYNYckqysjazcZfJSdPK1GCN+Teat7ey 28 9dwlLhUIS34H29V+0/RcXmmRV+dObSkXzCx5ltKPSnuDsxvqiDEP0CgWdyFxhDf0 29 TbQuKK5OXcZ9rOTSFmnMxGaAzaV7T1IyuqA9HqntTIfC2tL4Y+QN41gS+QARAQAB 30 /gMDAjYGIOoxe8CYYGwpat1V7NGuphvvZRpqeP0RrJ6h4vHV3hXu5NK3tn6LZF0n 31 Qp31LfTH4BHF091UTiebexuuF1/ixLVihtv45mEVejFG1U3G298+WkWUP6AYA/5c 32 QRzXGiuTXlsBUuFVTGn1mvxRmG3yVoLkDj0l5rN9Tq3Ir4BACIWyxjBv1n8fqw+x 33 ti4b7YoE35FpIXQqLOdfdcKTOqUJt+5c+bed4Yx82BsLiY2/huqG2dLnbwln80Dz 34 iYudtG8xLJ1AeHBBFB0nVdyO+mPzXgLNEbP3zle2W+rUfz+s6te7y+rlV0gad2VG 35 tBAvUy08T9rDk0DNQl7jMq/3cGfDI1Zi/nzf2BuuBu2ddgIRmsXgKYly+Fq6eIpa 36 nM+P1hd1Fa3rQwUSJc/zrl48tukf8sdPLDk/+nMhLHy86jp+NeXyXPLvsMAlF5kR 37 eFjxEjHOnJlo4uIUxvlUuePyEOEl0XkQfZs+VWAPo+l2tB5UZXN0IFVzZXIgPHRl 38 c3RAc29tZXdoZXJlLmNvbT6IuAQTAQIAIgUCUkKTYQIbAwYLCQgHAwIGFQgCCQoL 39 BBYCAwECHgECF4AACgkQuK3uqWB66vCVugP/eJFir6Qdcvl+y9/HuP4q2iECi8ny 40 z9tC3YC9DcJePyoBnt1LJO3HvaquZh1AIr6hgMFaujjx6cCb7YEgE0pJ4m74dvtS 41 Y03MUPQ+Ok4cYV66zaDZLk6zpYJXZhxP7ZhlBvwQRES/rudBEQMfBcU9PrduFU39 42 iI+2ojHI4lsnMQE= 43 =UUIf 44 -----END PGP PRIVATE KEY BLOCK----- 45 ` 46 47 var SignedMetadataPublicKey = ` 48 -----BEGIN PGP PUBLIC KEY BLOCK----- 49 Version: GnuPG v1.4.12 (GNU/Linux) 50 51 mI0EUkKTYQEEALjCjf5onQ9J4Tniy/4Zg1hySrKyNrNxl8lJ08rUYI35N5q3t7L1 52 3CUuFQhLfgfb1X7T9FxeaZFX505tKRfMLHmW0o9Ke4OzG+qIMQ/QKBZ3IXGEN/RN 53 tC4ork5dxn2s5NIWaczEZoDNpXtPUjK6oD0eqe1Mh8La0vhj5A3jWBL5ABEBAAG0 54 HlRlc3QgVXNlciA8dGVzdEBzb21ld2hlcmUuY29tPoi4BBMBAgAiBQJSQpNhAhsD 55 BgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRC4re6pYHrq8JW6A/94kWKvpB1y 56 +X7L38e4/iraIQKLyfLP20LdgL0Nwl4/KgGe3Usk7ce9qq5mHUAivqGAwVq6OPHp 57 wJvtgSATSknibvh2+1JjTcxQ9D46ThxhXrrNoNkuTrOlgldmHE/tmGUG/BBERL+u 58 50ERAx8FxT0+t24VTf2Ij7aiMcjiWycxAQ== 59 =zBYH 60 -----END PGP PUBLIC KEY BLOCK-----` 61 62 var imageData = map[string]string{ 63 "/daily/streams/v1/index.json": ` 64 { 65 "index": { 66 "com.ubuntu.cloud:released:raring": { 67 "updated": "Wed, 01 May 2013 13:31:26 +0000", 68 "clouds": [ 69 { 70 "region": "us-east-1", 71 "endpoint": "https://ec2.us-east-1.amazonaws.com" 72 } 73 ], 74 "cloudname": "aws", 75 "datatype": "image-ids", 76 "format": "products:1.0", 77 "products": [ 78 "com.ubuntu.cloud:server:13.04:amd64" 79 ], 80 "path": "streams/v1/raring_metadata.json" 81 } 82 }, 83 "updated": "Wed, 01 May 2013 13:31:26 +0000", 84 "format": "index:1.0" 85 } 86 `, 87 "/streams/v1/index.json": ` 88 { 89 "index": { 90 "com.ubuntu.cloud:released:precise": { 91 "updated": "Wed, 01 May 2013 13:31:26 +0000", 92 "clouds": [ 93 { 94 "region": "us-east-1", 95 "endpoint": "https://ec2.us-east-1.amazonaws.com" 96 } 97 ], 98 "cloudname": "aws", 99 "datatype": "image-ids", 100 "format": "products:1.0", 101 "products": [ 102 "com.ubuntu.cloud:server:12.04:amd64", 103 "com.ubuntu.cloud:server:12.04:arm" 104 ], 105 "path": "streams/v1/image_metadata.json" 106 }, 107 "com.ubuntu.cloud:released:raring": { 108 "updated": "Wed, 01 May 2013 13:31:26 +0000", 109 "clouds": [ 110 { 111 "region": "us-east-1", 112 "endpoint": "https://ec2.us-east-1.amazonaws.com" 113 } 114 ], 115 "cloudname": "aws", 116 "datatype": "image-ids", 117 "format": "products:1.0", 118 "products": [ 119 "com.ubuntu.cloud:server:13.04:amd64" 120 ], 121 "path": "streams/v1/raring_metadata.json" 122 }, 123 "com.ubuntu.cloud:released:download": { 124 "datatype": "content-download", 125 "path": "streams/v1/com.ubuntu.cloud:released:download.json", 126 "updated": "Wed, 01 May 2013 13:30:37 +0000", 127 "products": [ 128 "com.ubuntu.cloud:server:12.10:amd64", 129 "com.ubuntu.cloud:server:13.04:amd64" 130 ], 131 "format": "products:1.0" 132 }, 133 "com.ubuntu.juju:released:tools": { 134 "updated": "Mon, 05 Aug 2013 11:07:04 +0000", 135 "datatype": "content-download", 136 "format": "products:1.0", 137 "products": [ 138 "com.ubuntu.juju:12.04:amd64", 139 "com.ubuntu.juju:12.04:arm", 140 "com.ubuntu.juju:13.04:amd64", 141 "com.ubuntu.juju:13.04:arm" 142 ], 143 "path": "streams/v1/tools_metadata.json" 144 }, 145 "com.ubuntu.juju:testing:tools": { 146 "updated": "Mon, 05 Aug 2013 11:07:04 +0000", 147 "datatype": "content-download", 148 "format": "products:1.0", 149 "products": [ 150 "com.ubuntu.juju:14.04:amd64" 151 ], 152 "path": "streams/v1/testing_tools_metadata.json" 153 } 154 }, 155 "updated": "Wed, 01 May 2013 13:31:26 +0000", 156 "format": "index:1.0" 157 } 158 `, 159 "/streams/v1/mirrors.json": ` 160 { 161 "mirrors": { 162 "com.ubuntu.juju:released:tools": [ 163 { 164 "datatype": "content-download", 165 "path": "streams/v1/tools_metadata:public-mirrors.json", 166 "clouds": [ 167 { 168 "region": "us-east-2", 169 "endpoint": "https://ec2.us-east-2.amazonaws.com" 170 }, 171 { 172 "region": "us-west-2", 173 "endpoint": "https://ec2.us-west-2.amazonaws.com" 174 } 175 ], 176 "updated": "Wed, 14 Aug 2013 13:46:17 +0000", 177 "format": "mirrors:1.0" 178 }, 179 { 180 "datatype": "content-download", 181 "path": "streams/v1/tools_metadata:more-mirrors.json", 182 "updated": "Wed, 14 Aug 2013 13:46:17 +0000", 183 "format": "mirrors:1.0" 184 } 185 ] 186 }, 187 "updated": "Wed, 01 May 2013 13:31:26 +0000", 188 "format": "index:1.0" 189 } 190 `, 191 "/streams/v1/tools_metadata.json": ` 192 { 193 "content_id": "com.ubuntu.juju:tools", 194 "datatype": "content-download", 195 "updated": "Tue, 04 Jun 2013 13:50:31 +0000", 196 "format": "products:1.0", 197 "products": { 198 "com.ubuntu.juju:12.04:amd64": { 199 "arch": "amd64", 200 "release": "precise", 201 "versions": { 202 "20130806": { 203 "items": { 204 "1130preciseamd64": { 205 "version": "1.13.0", 206 "size": 2973595, 207 "path": "tools/released/20130806/juju-1.13.0-precise-amd64.tgz", 208 "ftype": "tar.gz", 209 "sha256": "447aeb6a934a5eaec4f703eda4ef2dde" 210 } 211 } 212 } 213 } 214 }, 215 "com.ubuntu.juju:13.04:amd64": { 216 "arch": "amd64", 217 "release": "raring", 218 "versions": { 219 "20130806": { 220 "items": { 221 "1130raringamd64": { 222 "version": "1.13.0", 223 "size": 2973173, 224 "path": "tools/released/20130806/juju-1.13.0-raring-amd64.tgz", 225 "ftype": "tar.gz", 226 "sha256": "df07ac5e1fb4232d4e9aa2effa57918a" 227 }, 228 "1140raringamd64": { 229 "version": "1.14.0", 230 "size": 2973173, 231 "path": "tools/released/20130806/juju-1.14.0-raring-amd64.tgz", 232 "ftype": "tar.gz", 233 "sha256": "df07ac5e1fb4232d4e9aa2effa57918a" 234 } 235 } 236 } 237 } 238 }, 239 "com.ubuntu.juju:12.04:arm": { 240 "arch": "arm", 241 "release": "precise", 242 "versions": { 243 "20130806": { 244 "items": { 245 "201precisearm": { 246 "version": "2.0.1", 247 "size": 1951096, 248 "path": "tools/released/20130806/juju-2.0.1-precise-arm.tgz", 249 "ftype": "tar.gz", 250 "sha256": "f65a92b3b41311bdf398663ee1c5cd0c" 251 }, 252 "1114precisearm": { 253 "version": "1.11.4", 254 "size": 1951096, 255 "path": "tools/released/20130806/juju-1.11.4-precise-arm.tgz", 256 "ftype": "tar.gz", 257 "sha256": "f65a92b3b41311bdf398663ee1c5cd0c" 258 } 259 } 260 }, 261 "20130803": { 262 "items": { 263 "1114precisearm": { 264 "version": "1.11.4", 265 "size": 2851541, 266 "path": "tools/released/20130803/juju-1.11.4-precise-arm.tgz", 267 "ftype": "tar.gz", 268 "sha256": "df07ac5e1fb4232d4e9aa2effa57918a" 269 }, 270 "1115precisearm": { 271 "version": "1.11.5", 272 "size": 2031281, 273 "path": "tools/released/20130803/juju-1.11.5-precise-arm.tgz", 274 "ftype": "tar.gz", 275 "sha256": "df07ac5e1fb4232d4e9aa2effa57918a" 276 } 277 } 278 } 279 } 280 }, 281 "com.ubuntu.juju:13.04:arm": { 282 "arch": "arm", 283 "release": "raring", 284 "versions": { 285 "20130806": { 286 "items": { 287 "1114raringarm": { 288 "version": "1.11.4", 289 "size": 1950327, 290 "path": "tools/released/20130806/juju-1.11.4-raring-arm.tgz", 291 "ftype": "tar.gz", 292 "sha256": "6472014e3255e3fe7fbd3550ef3f0a11" 293 }, 294 "201raringarm": { 295 "version": "2.0.1", 296 "size": 1950327, 297 "path": "tools/released/20130806/juju-2.0.1-raring-arm.tgz", 298 "ftype": "tar.gz", 299 "sha256": "6472014e3255e3fe7fbd3550ef3f0a11" 300 } 301 } 302 } 303 } 304 } 305 } 306 } 307 `, 308 "/streams/v1/testing_tools_metadata.json": ` 309 { 310 "content_id": "com.ubuntu.juju:tools", 311 "datatype": "content-download", 312 "updated": "Tue, 04 Jun 2013 13:50:31 +0000", 313 "format": "products:1.0", 314 "products": { 315 "com.ubuntu.juju:14.04:amd64": { 316 "arch": "amd64", 317 "release": "trusty", 318 "versions": { 319 "20130806": { 320 "items": { 321 "1130preciseamd64": { 322 "version": "1.16.0", 323 "size": 2973512, 324 "path": "tools/testing/20130806/juju-1.16.0-trusty-amd64.tgz", 325 "ftype": "tar.gz", 326 "sha256": "447aeb6a934a5eaec4f703eda4ef2dac" 327 } 328 } 329 } 330 } 331 } 332 } 333 } 334 `, 335 "/streams/v1/mirrored-tools-metadata.json": ` 336 { 337 "content_id": "com.ubuntu.juju:tools", 338 "datatype": "content-download", 339 "updated": "Tue, 04 Jun 2013 13:50:31 +0000", 340 "format": "products:1.0", 341 "products": { 342 "com.ubuntu.juju:12.04:amd64": { 343 "arch": "amd64", 344 "release": "precise", 345 "versions": { 346 "20130806": { 347 "items": { 348 "1130preciseamd64": { 349 "version": "1.13.0", 350 "size": 2973595, 351 "path": "mirrored-path/juju-1.13.0-precise-amd64.tgz", 352 "ftype": "tar.gz", 353 "sha256": "447aeb6a934a5eaec4f703eda4ef2dde" 354 } 355 } 356 } 357 } 358 } 359 } 360 } 361 `, 362 "/streams/v1/tools_metadata:public-mirrors.json": ` 363 { 364 "mirrors": { 365 "com.ubuntu.juju:released:tools": [ 366 { 367 "mirror": "http://some-mirror/", 368 "path": "com.ubuntu.juju:download.json", 369 "format": "products:1.0", 370 "clouds": [ 371 { 372 "endpoint": "https://ec2.us-east-2.amazonaws.com", 373 "region": "us-east-2" 374 } 375 ] 376 }, 377 { 378 "mirror": "test:/", 379 "path": "streams/v1/mirrored-tools-metadata.json", 380 "format": "products:1.0", 381 "clouds": [ 382 { 383 "endpoint": "https://ec2.us-west-2.amazonaws.com", 384 "region": "us-west-2" 385 } 386 ] 387 }, 388 { 389 "mirror": "http://another-mirror/", 390 "path": "com.ubuntu.juju:download.json", 391 "format": "products:1.0", 392 "clouds": [ 393 { 394 "endpoint": "https://ec2.us-west-1.amazonaws.com", 395 "region": "us-west-1" 396 } 397 ] 398 } 399 ] 400 }, 401 "format": "mirrors:1.0", 402 "updated": "Mon, 05 Aug 2013 11:07:04 +0000" 403 } 404 `, 405 "/streams/v1/tools_metadata:more-mirrors.json": ` 406 { 407 "mirrors": { 408 "com.ubuntu.juju:released:tools": [ 409 { 410 "mirror": "http://big-mirror/", 411 "path": "big:download.json", 412 "clouds": [ 413 { 414 "endpoint": "https://some-endpoint.com", 415 "region": "some-region" 416 } 417 ] 418 } 419 ] 420 }, 421 "format": "mirrors:1.0", 422 "updated": "Mon, 05 Aug 2013 11:07:04 +0000" 423 } 424 `, 425 "/streams/v1/image_metadata.json": ` 426 { 427 "updated": "Wed, 01 May 2013 13:31:26 +0000", 428 "content_id": "com.ubuntu.cloud:released:aws", 429 "region": "nz-east-1", 430 "endpoint": "https://anywhere", 431 "products": { 432 "com.ubuntu.cloud:server:14.04:amd64": { 433 "release": "trusty", 434 "version": "14.04", 435 "arch": "amd64", 436 "versions": { 437 "20140118": { 438 "items": { 439 "nzww1pe": { 440 "root_store": "ebs", 441 "virt": "pv", 442 "id": "ami-36745463" 443 } 444 }, 445 "pubname": "ubuntu-trusty-14.04-amd64-server-20140118", 446 "label": "release" 447 } 448 } 449 }, 450 "com.ubuntu.cloud:server:12.04:amd64": { 451 "release": "precise", 452 "version": "12.04", 453 "arch": "amd64", 454 "region": "au-east-1", 455 "endpoint": "https://somewhere", 456 "versions": { 457 "20121218": { 458 "region": "au-east-2", 459 "endpoint": "https://somewhere-else", 460 "items": { 461 "usww1pe": { 462 "root_store": "ebs", 463 "virt": "pv", 464 "id": "ami-26745463" 465 }, 466 "usww2he": { 467 "root_store": "ebs", 468 "virt": "hvm", 469 "id": "ami-442ea674", 470 "region": "us-east-1", 471 "endpoint": "https://ec2.us-east-1.amazonaws.com" 472 }, 473 "usww3he": { 474 "root_store": "ebs", 475 "virt": "hvm", 476 "crsn": "uswest3", 477 "id": "ami-442ea675" 478 } 479 }, 480 "pubname": "ubuntu-precise-12.04-amd64-server-20121218", 481 "label": "release" 482 }, 483 "20111111": { 484 "items": { 485 "usww3pe": { 486 "root_store": "ebs", 487 "virt": "pv", 488 "id": "ami-26745464" 489 }, 490 "usww2pe": { 491 "root_store": "instance", 492 "virt": "pv", 493 "id": "ami-442ea684", 494 "region": "us-east-1", 495 "endpoint": "https://ec2.us-east-1.amazonaws.com" 496 } 497 }, 498 "pubname": "ubuntu-precise-12.04-amd64-server-20111111", 499 "label": "release" 500 } 501 } 502 }, 503 "com.ubuntu.cloud:server:12.04:arm": { 504 "release": "precise", 505 "version": "12.04", 506 "arch": "arm", 507 "region": "us-east-1", 508 "endpoint": "https://ec2.us-east-1.amazonaws.com", 509 "versions": { 510 "20121219": { 511 "items": { 512 "usww2he": { 513 "root_store": "ebs", 514 "virt": "pv", 515 "id": "ami-442ea699" 516 } 517 }, 518 "pubname": "ubuntu-precise-12.04-arm-server-20121219", 519 "label": "release" 520 } 521 } 522 } 523 }, 524 "_aliases": { 525 "crsn": { 526 "uswest3": { 527 "region": "us-west-3", 528 "endpoint": "https://ec2.us-west-3.amazonaws.com" 529 } 530 } 531 }, 532 "format": "products:1.0" 533 } 534 `, 535 } 536 537 var testRoundTripper *jujutest.ProxyRoundTripper 538 539 func init() { 540 testRoundTripper = &jujutest.ProxyRoundTripper{} 541 testRoundTripper.RegisterForScheme("test") 542 } 543 544 type TestDataSuite struct{} 545 546 func (s *TestDataSuite) SetUpSuite(c *gc.C) { 547 testRoundTripper.Sub = jujutest.NewCannedRoundTripper( 548 imageData, map[string]int{"test://unauth": http.StatusUnauthorized}) 549 } 550 551 func (s *TestDataSuite) TearDownSuite(c *gc.C) { 552 testRoundTripper.Sub = nil 553 } 554 555 func AssertExpectedSources(c *gc.C, obtained []simplestreams.DataSource, baseURLs []string) { 556 var obtainedURLs = make([]string, len(baseURLs)) 557 for i, source := range obtained { 558 url, err := source.URL("") 559 c.Assert(err, jc.ErrorIsNil) 560 obtainedURLs[i] = url 561 } 562 c.Assert(obtainedURLs, gc.DeepEquals, baseURLs) 563 } 564 565 type LocalLiveSimplestreamsSuite struct { 566 testing.BaseSuite 567 Source simplestreams.DataSource 568 RequireSigned bool 569 StreamsVersion string 570 DataType string 571 ValidConstraint simplestreams.LookupConstraint 572 } 573 574 func (s *LocalLiveSimplestreamsSuite) SetUpSuite(c *gc.C) { 575 s.BaseSuite.SetUpSuite(c) 576 } 577 578 func (s *LocalLiveSimplestreamsSuite) TearDownSuite(c *gc.C) { 579 s.BaseSuite.TearDownSuite(c) 580 } 581 582 const ( 583 Index_v1 = "index:1.0" 584 Product_v1 = "products:1.0" 585 Mirror_v1 = "mirrors:1.0" 586 ) 587 588 type testConstraint struct { 589 simplestreams.LookupParams 590 } 591 592 func NewTestConstraint(params simplestreams.LookupParams) *testConstraint { 593 return &testConstraint{LookupParams: params} 594 } 595 596 func (tc *testConstraint) IndexIds() []string { 597 return nil 598 } 599 600 func (tc *testConstraint) ProductIds() ([]string, error) { 601 version, err := version.SeriesVersion(tc.Series[0]) 602 if err != nil { 603 return nil, err 604 } 605 ids := make([]string, len(tc.Arches)) 606 for i, arch := range tc.Arches { 607 ids[i] = fmt.Sprintf("com.ubuntu.cloud:server:%s:%s", version, arch) 608 } 609 return ids, nil 610 } 611 612 func init() { 613 // Ensure out test struct can have its tags extracted. 614 simplestreams.RegisterStructTags(TestItem{}) 615 } 616 617 type TestItem struct { 618 Id string `json:"id"` 619 Storage string `json:"root_store"` 620 VirtType string `json:"virt"` 621 Arch string `json:"arch"` 622 RegionAlias string `json:"crsn"` 623 RegionName string `json:"region"` 624 Endpoint string `json:"endpoint"` 625 } 626 627 func (s *LocalLiveSimplestreamsSuite) IndexPath() string { 628 if s.RequireSigned { 629 return fmt.Sprintf("streams/%s/index.sjson", s.StreamsVersion) 630 } 631 return fmt.Sprintf("streams/%s/index.json", s.StreamsVersion) 632 } 633 634 func (s *LocalLiveSimplestreamsSuite) TestGetIndex(c *gc.C) { 635 indexRef, err := s.GetIndexRef(Index_v1) 636 c.Assert(err, jc.ErrorIsNil) 637 c.Assert(indexRef.Format, gc.Equals, Index_v1) 638 c.Assert(indexRef.Source, gc.Equals, s.Source) 639 c.Assert(len(indexRef.Indexes) > 0, jc.IsTrue) 640 } 641 642 func (s *LocalLiveSimplestreamsSuite) GetIndexRef(format string) (*simplestreams.IndexReference, error) { 643 params := simplestreams.ValueParams{ 644 DataType: s.DataType, 645 ValueTemplate: TestItem{}, 646 } 647 return simplestreams.GetIndexWithFormat( 648 s.Source, s.IndexPath(), format, simplestreams.MirrorsPath(s.StreamsVersion), s.RequireSigned, 649 s.ValidConstraint.Params().CloudSpec, params) 650 } 651 652 func (s *LocalLiveSimplestreamsSuite) TestGetIndexWrongFormat(c *gc.C) { 653 _, err := s.GetIndexRef("bad") 654 c.Assert(err, gc.NotNil) 655 } 656 657 func (s *LocalLiveSimplestreamsSuite) TestGetProductsPathExists(c *gc.C) { 658 indexRef, err := s.GetIndexRef(Index_v1) 659 c.Assert(err, jc.ErrorIsNil) 660 path, err := indexRef.GetProductsPath(s.ValidConstraint) 661 c.Assert(err, jc.ErrorIsNil) 662 c.Assert(path, gc.Not(gc.Equals), "") 663 } 664 665 func (s *LocalLiveSimplestreamsSuite) TestGetProductsPathInvalidCloudSpec(c *gc.C) { 666 indexRef, err := s.GetIndexRef(Index_v1) 667 c.Assert(err, jc.ErrorIsNil) 668 ic := NewTestConstraint(simplestreams.LookupParams{ 669 CloudSpec: simplestreams.CloudSpec{"bad", "spec"}, 670 Series: []string{"precise"}, 671 }) 672 _, err = indexRef.GetProductsPath(ic) 673 c.Assert(err, gc.NotNil) 674 } 675 676 func (s *LocalLiveSimplestreamsSuite) TestGetProductsPathInvalidProductSpec(c *gc.C) { 677 indexRef, err := s.GetIndexRef(Index_v1) 678 c.Assert(err, jc.ErrorIsNil) 679 ic := NewTestConstraint(simplestreams.LookupParams{ 680 CloudSpec: s.ValidConstraint.Params().CloudSpec, 681 Series: []string{"precise"}, 682 Arches: []string{"bad"}, 683 Stream: "spec", 684 }) 685 _, err = indexRef.GetProductsPath(ic) 686 c.Assert(err, gc.NotNil) 687 } 688 689 func (s *LocalLiveSimplestreamsSuite) AssertGetMetadata(c *gc.C) *simplestreams.CloudMetadata { 690 indexRef, err := s.GetIndexRef(Index_v1) 691 c.Assert(err, jc.ErrorIsNil) 692 metadata, err := indexRef.GetCloudMetadataWithFormat(s.ValidConstraint, Product_v1, s.RequireSigned) 693 c.Assert(err, jc.ErrorIsNil) 694 c.Assert(metadata.Format, gc.Equals, Product_v1) 695 c.Assert(len(metadata.Products) > 0, jc.IsTrue) 696 return metadata 697 } 698 699 func (s *LocalLiveSimplestreamsSuite) TestGetCloudMetadataWithFormat(c *gc.C) { 700 s.AssertGetMetadata(c) 701 } 702 703 func (s *LocalLiveSimplestreamsSuite) AssertGetItemCollections(c *gc.C, version string) *simplestreams.ItemCollection { 704 metadata := s.AssertGetMetadata(c) 705 metadataCatalog := metadata.Products["com.ubuntu.cloud:server:12.04:amd64"] 706 ic := metadataCatalog.Items[version] 707 return ic 708 }