github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/uniter/unitstorage_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package uniter_test 5 6 import ( 7 "github.com/juju/errors" 8 jc "github.com/juju/testing/checkers" 9 gc "gopkg.in/check.v1" 10 "gopkg.in/juju/names.v2" 11 12 basetesting "github.com/juju/juju/api/base/testing" 13 "github.com/juju/juju/api/uniter" 14 "github.com/juju/juju/apiserver/params" 15 coretesting "github.com/juju/juju/testing" 16 ) 17 18 type unitStorageSuite struct { 19 coretesting.BaseSuite 20 } 21 22 var _ = gc.Suite(&unitStorageSuite{}) 23 24 const expectedAPIVersion = 9 25 26 func (s *unitStorageSuite) createTestUnit(c *gc.C, t string, apiCaller basetesting.APICallerFunc) *uniter.Unit { 27 tag := names.NewUnitTag(t) 28 st := uniter.NewState(apiCaller, tag) 29 return uniter.CreateUnit(st, tag) 30 } 31 32 func (s *unitStorageSuite) TestAddUnitStorage(c *gc.C) { 33 count := uint64(1) 34 args := map[string][]params.StorageConstraints{ 35 "data": { 36 {Count: &count}}, 37 } 38 39 expected := params.StoragesAddParams{ 40 Storages: []params.StorageAddParams{ 41 {"unit-mysql-0", "data", params.StorageConstraints{Count: &count}}, 42 }, 43 } 44 45 apiCaller := basetesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 46 c.Assert(objType, gc.Equals, "Uniter") 47 c.Assert(version, gc.Equals, expectedAPIVersion) 48 c.Assert(id, gc.Equals, "") 49 c.Assert(request, gc.Equals, "AddUnitStorage") 50 c.Assert(arg, gc.DeepEquals, expected) 51 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 52 *(result.(*params.ErrorResults)) = params.ErrorResults{ 53 Results: []params.ErrorResult{{ 54 Error: ¶ms.Error{Message: "yoink"}, 55 }}, 56 } 57 return nil 58 }) 59 u := s.createTestUnit(c, "mysql/0", apiCaller) 60 err := u.AddStorage(args) 61 c.Assert(err, gc.ErrorMatches, "yoink") 62 } 63 64 func (s *unitStorageSuite) TestAddUnitStorageError(c *gc.C) { 65 count := uint64(1) 66 args := map[string][]params.StorageConstraints{ 67 "data": {{Count: &count}}, 68 } 69 70 expected := params.StoragesAddParams{ 71 Storages: []params.StorageAddParams{ 72 {"unit-mysql-0", "data", params.StorageConstraints{Count: &count}}, 73 }, 74 } 75 76 var called bool 77 msg := "yoink" 78 apiCaller := basetesting.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 79 c.Assert(objType, gc.Equals, "Uniter") 80 c.Assert(version, gc.Equals, expectedAPIVersion) 81 c.Assert(id, gc.Equals, "") 82 c.Assert(request, gc.Equals, "AddUnitStorage") 83 c.Assert(arg, gc.DeepEquals, expected) 84 called = true 85 86 c.Assert(result, gc.FitsTypeOf, ¶ms.ErrorResults{}) 87 return errors.New(msg) 88 }) 89 90 u := s.createTestUnit(c, "mysql/0", apiCaller) 91 err := u.AddStorage(args) 92 c.Assert(err, gc.ErrorMatches, msg) 93 c.Assert(called, jc.IsTrue) 94 }