1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
4
package imagemetadata_test
12
gc "launchpad.net/gocheck"
14
"launchpad.net/juju-core/environs/filestorage"
15
"launchpad.net/juju-core/environs/imagemetadata"
16
"launchpad.net/juju-core/environs/imagemetadata/testing"
17
"launchpad.net/juju-core/environs/simplestreams"
18
"launchpad.net/juju-core/environs/storage"
19
jc "launchpad.net/juju-core/testing/checkers"
20
"launchpad.net/juju-core/testing/testbase"
23
var _ = gc.Suite(&uploadSuite{})
25
type uploadSuite struct {
29
func createImageMetadata(c *gc.C) (sourceDir string, destDir string, destStor storage.Storage, metadata *imagemetadata.ImageMetadata) {
32
destStor, err = filestorage.NewFileStorageWriter(destDir, filestorage.UseDefaultTmpDir)
33
c.Assert(err, gc.IsNil)
35
// Generate some metadata.
37
im := []*imagemetadata.ImageMetadata{
44
cloudSpec := &simplestreams.CloudSpec{
48
im[0].RegionName = cloudSpec.Region
49
im[0].Endpoint = cloudSpec.Endpoint
50
var sourceStor storage.Storage
51
sourceStor, err = filestorage.NewFileStorageWriter(sourceDir, filestorage.UseDefaultTmpDir)
52
c.Assert(err, gc.IsNil)
53
err = imagemetadata.MergeAndWriteMetadata("raring", im, cloudSpec, sourceStor)
54
c.Assert(err, gc.IsNil)
55
return sourceDir, destDir, destStor, im[0]
58
func (s *uploadSuite) TestUpload(c *gc.C) {
59
// Create some metadata.
60
sourceDir, destDir, destStor, im := createImageMetadata(c)
62
// Ensure it can be uploaded.
63
err := imagemetadata.UploadImageMetadata(destStor, sourceDir)
64
c.Assert(err, gc.IsNil)
65
metadata := testing.ParseMetadataFromDir(c, destDir)
66
c.Assert(metadata, gc.HasLen, 1)
67
c.Assert(im, gc.DeepEquals, metadata[0])
70
func (s *uploadSuite) TestUploadErrors(c *gc.C) {
72
destStor, err := filestorage.NewFileStorageWriter(destDir, filestorage.UseDefaultTmpDir)
73
c.Assert(err, gc.IsNil)
74
err = imagemetadata.UploadImageMetadata(destStor, "foo")
75
c.Assert(err, jc.Satisfies, os.IsNotExist)
78
func (s *uploadSuite) TestUploadIgnoresNonJsonFiles(c *gc.C) {
79
// Create some metadata.
80
sourceDir, destDir, destStor, _ := createImageMetadata(c)
83
sourceMetadataPath := filepath.Join(sourceDir, storage.BaseImagesPath, simplestreams.StreamsDir)
84
err := ioutil.WriteFile(filepath.Join(sourceMetadataPath, "foo.txt"), []byte("hello"), 0644)
85
c.Assert(err, gc.IsNil)
87
// Upload the metadata.
88
err = imagemetadata.UploadImageMetadata(destStor, sourceDir)
89
c.Assert(err, gc.IsNil)
91
// Check only json files are uploaded.
92
destMetadataPath := filepath.Join(destDir, storage.BaseImagesPath, simplestreams.StreamsDir)
93
files, err := ioutil.ReadDir(destMetadataPath)
94
c.Assert(err, gc.IsNil)
95
c.Assert(files, gc.HasLen, 2)
96
for _, f := range files {
98
c.Assert(strings.HasSuffix(fileName, simplestreams.UnsignedSuffix), jc.IsTrue)