github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/apiserver/imagemetadata/metadata_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package imagemetadata_test 5 6 import ( 7 "github.com/juju/errors" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 11 "github.com/juju/juju/apiserver/params" 12 "github.com/juju/juju/state/cloudimagemetadata" 13 ) 14 15 type metadataSuite struct { 16 baseImageMetadataSuite 17 } 18 19 var _ = gc.Suite(&metadataSuite{}) 20 21 func (s *metadataSuite) TestFindNil(c *gc.C) { 22 found, err := s.api.List(params.ImageMetadataFilter{}) 23 c.Assert(err, jc.ErrorIsNil) 24 c.Assert(found.Result, gc.HasLen, 0) 25 s.assertCalls(c, []string{findMetadata}) 26 } 27 28 func (s *metadataSuite) TestFindEmpty(c *gc.C) { 29 s.state.findMetadata = func(f cloudimagemetadata.MetadataFilter) (map[cloudimagemetadata.SourceType][]cloudimagemetadata.Metadata, error) { 30 s.calls = append(s.calls, findMetadata) 31 return map[cloudimagemetadata.SourceType][]cloudimagemetadata.Metadata{}, nil 32 } 33 34 found, err := s.api.List(params.ImageMetadataFilter{}) 35 c.Assert(err, jc.ErrorIsNil) 36 c.Assert(found.Result, gc.HasLen, 0) 37 s.assertCalls(c, []string{findMetadata}) 38 } 39 40 func (s *metadataSuite) TestFindEmptyGroups(c *gc.C) { 41 s.state.findMetadata = func(f cloudimagemetadata.MetadataFilter) (map[cloudimagemetadata.SourceType][]cloudimagemetadata.Metadata, error) { 42 s.calls = append(s.calls, findMetadata) 43 return map[cloudimagemetadata.SourceType][]cloudimagemetadata.Metadata{ 44 cloudimagemetadata.Public: []cloudimagemetadata.Metadata{}, 45 cloudimagemetadata.Custom: []cloudimagemetadata.Metadata{}, 46 }, nil 47 } 48 49 found, err := s.api.List(params.ImageMetadataFilter{}) 50 c.Assert(err, jc.ErrorIsNil) 51 c.Assert(found.Result, gc.HasLen, 0) 52 s.assertCalls(c, []string{findMetadata}) 53 } 54 55 func (s *metadataSuite) TestFindError(c *gc.C) { 56 msg := "find error" 57 s.state.findMetadata = func(f cloudimagemetadata.MetadataFilter) (map[cloudimagemetadata.SourceType][]cloudimagemetadata.Metadata, error) { 58 s.calls = append(s.calls, findMetadata) 59 return nil, errors.New(msg) 60 } 61 62 found, err := s.api.List(params.ImageMetadataFilter{}) 63 c.Assert(err, gc.ErrorMatches, msg) 64 c.Assert(found.Result, gc.HasLen, 0) 65 s.assertCalls(c, []string{findMetadata}) 66 } 67 68 func (s *metadataSuite) TestFindOrder(c *gc.C) { 69 customImageId := "custom1" 70 customImageId2 := "custom2" 71 customImageId3 := "custom3" 72 publicImageId := "public1" 73 74 s.state.findMetadata = func(f cloudimagemetadata.MetadataFilter) (map[cloudimagemetadata.SourceType][]cloudimagemetadata.Metadata, error) { 75 s.calls = append(s.calls, findMetadata) 76 return map[cloudimagemetadata.SourceType][]cloudimagemetadata.Metadata{ 77 cloudimagemetadata.Public: []cloudimagemetadata.Metadata{ 78 cloudimagemetadata.Metadata{ImageId: publicImageId}, 79 }, 80 cloudimagemetadata.Custom: []cloudimagemetadata.Metadata{ 81 cloudimagemetadata.Metadata{ImageId: customImageId}, 82 cloudimagemetadata.Metadata{ImageId: customImageId2}, 83 cloudimagemetadata.Metadata{ImageId: customImageId3}, 84 }, 85 }, 86 nil 87 } 88 89 found, err := s.api.List(params.ImageMetadataFilter{}) 90 c.Assert(err, jc.ErrorIsNil) 91 c.Assert(found.Result, gc.HasLen, 4) 92 c.Assert(found.Result, jc.SameContents, []params.CloudImageMetadata{ 93 params.CloudImageMetadata{ImageId: customImageId}, 94 params.CloudImageMetadata{ImageId: customImageId2}, 95 params.CloudImageMetadata{ImageId: customImageId3}, 96 params.CloudImageMetadata{ImageId: publicImageId}, 97 }) 98 s.assertCalls(c, []string{findMetadata}) 99 } 100 101 func (s *metadataSuite) TestSaveEmpty(c *gc.C) { 102 errs, err := s.api.Save(params.MetadataSaveParams{}) 103 c.Assert(err, jc.ErrorIsNil) 104 c.Assert(errs.Results, gc.HasLen, 0) 105 // not expected to call state :D 106 s.assertCalls(c, []string{}) 107 } 108 109 func (s *metadataSuite) TestSave(c *gc.C) { 110 m := params.CloudImageMetadata{ 111 Source: "custom", 112 } 113 msg := "save error" 114 115 s.state.saveMetadata = func(m cloudimagemetadata.Metadata) error { 116 s.calls = append(s.calls, saveMetadata) 117 if len(s.calls) == 1 { 118 // don't err on first call 119 return nil 120 } 121 return errors.New(msg) 122 } 123 124 errs, err := s.api.Save(params.MetadataSaveParams{Metadata: []params.CloudImageMetadata{m, m}}) 125 c.Assert(err, jc.ErrorIsNil) 126 c.Assert(errs.Results, gc.HasLen, 2) 127 c.Assert(errs.Results[0].Error, gc.IsNil) 128 c.Assert(errs.Results[1].Error, gc.ErrorMatches, msg) 129 s.assertCalls(c, []string{saveMetadata, saveMetadata}) 130 }