github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/api/imagemetadata/client_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/api/base/testing" 12 "github.com/juju/juju/api/imagemetadata" 13 "github.com/juju/juju/apiserver/params" 14 coretesting "github.com/juju/juju/testing" 15 ) 16 17 type imagemetadataSuite struct { 18 coretesting.BaseSuite 19 } 20 21 var _ = gc.Suite(&imagemetadataSuite{}) 22 23 func (s *imagemetadataSuite) TestList(c *gc.C) { 24 // setup data for test 25 imageId := "imageid" 26 stream := "stream" 27 region := "region" 28 series := "series" 29 arch := "arch" 30 virtType := "virt-type" 31 rootStorageType := "root-storage-type" 32 rootStorageSize := uint64(1024) 33 source := "source" 34 35 called := false 36 apiCaller := testing.APICallerFunc( 37 func(objType string, 38 version int, 39 id, request string, 40 a, result interface{}, 41 ) error { 42 called = true 43 c.Check(objType, gc.Equals, "ImageMetadata") 44 c.Check(id, gc.Equals, "") 45 c.Check(request, gc.Equals, "List") 46 47 args, ok := a.(params.ImageMetadataFilter) 48 c.Assert(ok, jc.IsTrue) 49 50 if results, k := result.(*params.ListCloudImageMetadataResult); k { 51 instances := []params.CloudImageMetadata{ 52 params.CloudImageMetadata{ 53 ImageId: imageId, 54 Stream: args.Stream, 55 Region: args.Region, 56 Series: args.Series[0], 57 Arch: args.Arches[0], 58 VirtType: args.VirtType, 59 RootStorageType: args.RootStorageType, 60 RootStorageSize: &rootStorageSize, 61 Source: source, 62 }, 63 } 64 results.Result = instances 65 } 66 67 return nil 68 }) 69 client := imagemetadata.NewClient(apiCaller) 70 found, err := client.List( 71 stream, region, 72 []string{series}, []string{arch}, 73 virtType, rootStorageType, 74 ) 75 c.Check(err, jc.ErrorIsNil) 76 77 c.Assert(called, jc.IsTrue) 78 expected := []params.CloudImageMetadata{ 79 params.CloudImageMetadata{ 80 ImageId: imageId, 81 Stream: stream, 82 Region: region, 83 Series: series, 84 Arch: arch, 85 VirtType: virtType, 86 RootStorageType: rootStorageType, 87 RootStorageSize: &rootStorageSize, 88 Source: source, 89 }, 90 } 91 c.Assert(found, jc.DeepEquals, expected) 92 } 93 94 func (s *imagemetadataSuite) TestListFacadeCallError(c *gc.C) { 95 msg := "facade failure" 96 called := false 97 apiCaller := testing.APICallerFunc( 98 func(objType string, 99 version int, 100 id, request string, 101 a, result interface{}, 102 ) error { 103 called = true 104 c.Check(objType, gc.Equals, "ImageMetadata") 105 c.Check(id, gc.Equals, "") 106 c.Check(request, gc.Equals, "List") 107 108 return errors.New(msg) 109 }) 110 client := imagemetadata.NewClient(apiCaller) 111 found, err := client.List("", "", nil, nil, "", "") 112 c.Assert(errors.Cause(err), gc.ErrorMatches, msg) 113 c.Assert(found, gc.HasLen, 0) 114 c.Assert(called, jc.IsTrue) 115 } 116 117 func (s *imagemetadataSuite) TestSave(c *gc.C) { 118 m := params.CloudImageMetadata{} 119 called := false 120 121 msg := "save failure" 122 expected := []params.ErrorResult{ 123 params.ErrorResult{}, 124 params.ErrorResult{¶ms.Error{Message: msg}}, 125 } 126 127 apiCaller := testing.APICallerFunc( 128 func(objType string, 129 version int, 130 id, request string, 131 a, result interface{}, 132 ) error { 133 called = true 134 c.Check(objType, gc.Equals, "ImageMetadata") 135 c.Check(id, gc.Equals, "") 136 c.Check(request, gc.Equals, "Save") 137 138 args, ok := a.(params.MetadataSaveParams) 139 c.Assert(ok, jc.IsTrue) 140 c.Assert(args.Metadata, gc.HasLen, 2) 141 c.Assert(args.Metadata, gc.DeepEquals, []params.CloudImageMetadata{m, m}) 142 143 if results, k := result.(*params.ErrorResults); k { 144 results.Results = expected 145 } 146 147 return nil 148 }) 149 150 client := imagemetadata.NewClient(apiCaller) 151 errs, err := client.Save([]params.CloudImageMetadata{m, m}) 152 c.Check(err, jc.ErrorIsNil) 153 c.Assert(called, jc.IsTrue) 154 c.Assert(errs, jc.DeepEquals, expected) 155 } 156 157 func (s *imagemetadataSuite) TestSaveFacadeCallError(c *gc.C) { 158 m := []params.CloudImageMetadata{{}} 159 called := false 160 msg := "facade failure" 161 apiCaller := testing.APICallerFunc( 162 func(objType string, 163 version int, 164 id, request string, 165 a, result interface{}, 166 ) error { 167 called = true 168 c.Check(objType, gc.Equals, "ImageMetadata") 169 c.Check(id, gc.Equals, "") 170 c.Check(request, gc.Equals, "Save") 171 return errors.New(msg) 172 }) 173 client := imagemetadata.NewClient(apiCaller) 174 found, err := client.Save(m) 175 c.Assert(errors.Cause(err), gc.ErrorMatches, msg) 176 c.Assert(found, gc.HasLen, 0) 177 c.Assert(called, jc.IsTrue) 178 } 179 180 func (s *imagemetadataSuite) TestUpdateFromPublishedImages(c *gc.C) { 181 called := false 182 183 apiCaller := testing.APICallerFunc( 184 func(objType string, 185 version int, 186 id, request string, 187 a, result interface{}, 188 ) error { 189 called = true 190 c.Check(objType, gc.Equals, "ImageMetadata") 191 c.Check(id, gc.Equals, "") 192 c.Check(request, gc.Equals, "UpdateFromPublishedImages") 193 return nil 194 }) 195 196 client := imagemetadata.NewClient(apiCaller) 197 err := client.UpdateFromPublishedImages() 198 c.Check(err, jc.ErrorIsNil) 199 c.Assert(called, jc.IsTrue) 200 } 201 202 func (s *imagemetadataSuite) TestUpdateFromPublishedImagesFacadeCallError(c *gc.C) { 203 called := false 204 msg := "facade failure" 205 apiCaller := testing.APICallerFunc( 206 func(objType string, 207 version int, 208 id, request string, 209 a, result interface{}, 210 ) error { 211 called = true 212 c.Check(objType, gc.Equals, "ImageMetadata") 213 c.Check(id, gc.Equals, "") 214 c.Check(request, gc.Equals, "UpdateFromPublishedImages") 215 return errors.New(msg) 216 }) 217 client := imagemetadata.NewClient(apiCaller) 218 err := client.UpdateFromPublishedImages() 219 c.Assert(errors.Cause(err), gc.ErrorMatches, msg) 220 c.Assert(called, jc.IsTrue) 221 }