github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/api/imagemanager/client_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package imagemanager_test 5 6 import ( 7 "time" 8 9 "github.com/juju/errors" 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/api/base/testing" 14 "github.com/juju/juju/api/imagemanager" 15 "github.com/juju/juju/apiserver/params" 16 coretesting "github.com/juju/juju/testing" 17 ) 18 19 type imagemanagerSuite struct { 20 coretesting.BaseSuite 21 22 imagemanager *imagemanager.Client 23 } 24 25 var _ = gc.Suite(&imagemanagerSuite{}) 26 27 var dummyTime = time.Now() 28 29 func (s *imagemanagerSuite) TestListImages(c *gc.C) { 30 var callCount int 31 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 32 c.Check(objType, gc.Equals, "ImageManager") 33 c.Check(version, gc.Equals, 0) 34 c.Check(id, gc.Equals, "") 35 c.Check(request, gc.Equals, "ListImages") 36 c.Check(arg, gc.DeepEquals, params.ImageFilterParams{ 37 Images: []params.ImageSpec{{ 38 Kind: "lxc", 39 Series: "trusty", 40 Arch: "amd64", 41 }}, 42 }) 43 c.Assert(result, gc.FitsTypeOf, ¶ms.ListImageResult{}) 44 *(result.(*params.ListImageResult)) = params.ListImageResult{ 45 Result: []params.ImageMetadata{{ 46 Kind: "lxc", 47 Series: "trusty", 48 Arch: "amd64", 49 Created: dummyTime, 50 URL: "http://path", 51 }}, 52 } 53 callCount++ 54 return nil 55 }) 56 57 im := imagemanager.NewClient(apiCaller) 58 imageMetadata, err := im.ListImages("lxc", "trusty", "amd64") 59 c.Check(err, jc.ErrorIsNil) 60 c.Check(callCount, gc.Equals, 1) 61 c.Check(imageMetadata, gc.HasLen, 1) 62 metadata := imageMetadata[0] 63 c.Assert(metadata, gc.Equals, params.ImageMetadata{ 64 Kind: "lxc", 65 Series: "trusty", 66 Arch: "amd64", 67 Created: dummyTime, 68 URL: "http://path", 69 }) 70 } 71 72 func (s *imagemanagerSuite) TestDeleteImage(c *gc.C) { 73 var callCount int 74 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 75 c.Check(objType, gc.Equals, "ImageManager") 76 c.Check(version, gc.Equals, 0) 77 c.Check(id, gc.Equals, "") 78 c.Check(request, gc.Equals, "DeleteImages") 79 c.Check(arg, gc.DeepEquals, params.ImageFilterParams{ 80 Images: []params.ImageSpec{{ 81 Kind: "lxc", 82 Series: "trusty", 83 Arch: "amd64", 84 }}, 85 }) 86 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 87 *(result.(*params.ErrorResults)) = params.ErrorResults{ 88 Results: []params.ErrorResult{{ 89 Error: nil, 90 }}, 91 } 92 callCount++ 93 return nil 94 }) 95 96 im := imagemanager.NewClient(apiCaller) 97 err := im.DeleteImage("lxc", "trusty", "amd64") 98 c.Check(err, jc.ErrorIsNil) 99 c.Check(callCount, gc.Equals, 1) 100 } 101 102 func (s *imagemanagerSuite) TestDeleteImageCallError(c *gc.C) { 103 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 104 return errors.New("an error") 105 }) 106 107 im := imagemanager.NewClient(apiCaller) 108 err := im.DeleteImage("lxc", "trusty", "amd64") 109 c.Check(err, gc.ErrorMatches, "an error") 110 } 111 112 func (s *imagemanagerSuite) TestDeleteImageError(c *gc.C) { 113 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 114 *(result.(*params.ErrorResults)) = params.ErrorResults{ 115 Results: []params.ErrorResult{{ 116 Error: ¶ms.Error{Message: "the devil made me do it", Code: "666"}, 117 }}, 118 } 119 return nil 120 }) 121 122 im := imagemanager.NewClient(apiCaller) 123 err := im.DeleteImage("lxc", "trusty", "amd64") 124 c.Check(err, gc.ErrorMatches, "the devil made me do it") 125 }