14
14
"launchpad.net/juju-core/constraints"
15
15
"launchpad.net/juju-core/environs"
16
16
"launchpad.net/juju-core/environs/configstore"
17
"launchpad.net/juju-core/environs/filestorage"
18
"launchpad.net/juju-core/environs/imagemetadata"
19
imtesting "launchpad.net/juju-core/environs/imagemetadata/testing"
20
"launchpad.net/juju-core/environs/simplestreams"
17
21
"launchpad.net/juju-core/environs/storage"
18
22
"launchpad.net/juju-core/environs/sync"
19
23
envtesting "launchpad.net/juju-core/environs/testing"
319
323
// Bootstrap the environment with an invalid source.
320
324
// The command returns with an error.
321
325
ctx := coretesting.Context(c)
322
code := cmd.Main(&BootstrapCommand{}, ctx, []string{"--source", c.MkDir()})
326
code := cmd.Main(&BootstrapCommand{}, ctx, []string{"--metadata-source", c.MkDir()})
323
327
c.Check(code, gc.Equals, 1)
325
329
// Now check that there are no tools available.
328
332
c.Assert(err, gc.FitsTypeOf, errors.NotFoundf(""))
335
// createImageMetadata creates some image metadata in a local directory.
336
func createImageMetadata(c *gc.C) (string, []*imagemetadata.ImageMetadata) {
337
// Generate some image metadata.
338
im := []*imagemetadata.ImageMetadata{
343
RegionName: "region",
344
Endpoint: "endpoint",
347
cloudSpec := &simplestreams.CloudSpec{
349
Endpoint: "endpoint",
351
sourceDir := c.MkDir()
352
sourceStor, err := filestorage.NewFileStorageWriter(sourceDir, filestorage.UseDefaultTmpDir)
353
c.Assert(err, gc.IsNil)
354
err = imagemetadata.MergeAndWriteMetadata("raring", im, cloudSpec, sourceStor)
355
c.Assert(err, gc.IsNil)
359
// checkImageMetadata checks that the environment contains the expected image metadata.
360
func checkImageMetadata(c *gc.C, stor storage.StorageReader, expected []*imagemetadata.ImageMetadata) {
361
metadata := imtesting.ParseMetadataFromStorage(c, stor)
362
c.Assert(metadata, gc.HasLen, 1)
363
c.Assert(expected[0], gc.DeepEquals, metadata[0])
366
func (s *BootstrapSuite) TestUploadLocalImageMetadata(c *gc.C) {
367
sourceDir, expected := createImageMetadata(c)
368
env, fake := makeEmptyFakeHome(c)
371
// Bootstrap the environment with the valid source.
372
ctx := coretesting.Context(c)
373
code := cmd.Main(&BootstrapCommand{}, ctx, []string{"--metadata-source", sourceDir})
374
c.Check(code, gc.Equals, 0)
376
// Now check the image metadata has been uploaded.
377
checkImageMetadata(c, env.Storage(), expected)
331
380
func (s *BootstrapSuite) TestAutoSyncLocalSource(c *gc.C) {
332
381
sourceDir := createToolsSource(c, vAll)
333
382
s.PatchValue(&version.Current.Number, version.MustParse("1.2.0"))
338
387
// The bootstrapping has to show no error, because the tools
339
388
// are automatically synchronized.
340
389
ctx := coretesting.Context(c)
341
code := cmd.Main(&BootstrapCommand{}, ctx, []string{"--source", sourceDir})
390
code := cmd.Main(&BootstrapCommand{}, ctx, []string{"--metadata-source", sourceDir})
342
391
c.Check(code, gc.Equals, 0)
344
393
// Now check the available tools which are the 1.2.0 envtools.