github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/api/uniter/storage_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 "github.com/juju/names" 9 jc "github.com/juju/testing/checkers" 10 gc "gopkg.in/check.v1" 11 12 "github.com/juju/juju/api/base/testing" 13 "github.com/juju/juju/api/uniter" 14 "github.com/juju/juju/apiserver/params" 15 "github.com/juju/juju/storage" 16 coretesting "github.com/juju/juju/testing" 17 ) 18 19 var _ = gc.Suite(&storageSuite{}) 20 21 type storageSuite struct { 22 coretesting.BaseSuite 23 } 24 25 func (s *storageSuite) TestStorageInstances(c *gc.C) { 26 storageInstances := []params.UnitStorageInstances{ 27 { 28 Instances: []storage.StorageInstance{ 29 {Id: "whatever", Kind: storage.StorageKindBlock, Location: "/dev/sda"}, 30 }, 31 }, 32 } 33 34 var called bool 35 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 36 c.Check(objType, gc.Equals, "Uniter") 37 c.Check(version, gc.Equals, 2) 38 c.Check(id, gc.Equals, "") 39 c.Check(request, gc.Equals, "UnitStorageInstances") 40 c.Check(arg, gc.DeepEquals, params.Entities{ 41 Entities: []params.Entity{{Tag: "unit-mysql-0"}}, 42 }) 43 c.Assert(result, gc.FitsTypeOf, ¶ms.UnitStorageInstancesResults{}) 44 *(result.(*params.UnitStorageInstancesResults)) = params.UnitStorageInstancesResults{ 45 storageInstances, 46 } 47 called = true 48 return nil 49 }) 50 51 st := uniter.NewState(apiCaller, names.NewUnitTag("mysql/0")) 52 instances, err := st.StorageInstances(names.NewUnitTag("mysql/0")) 53 c.Check(err, jc.ErrorIsNil) 54 c.Check(called, jc.IsTrue) 55 c.Assert(instances, gc.DeepEquals, storageInstances[0].Instances) 56 } 57 58 func (s *storageSuite) TestStorageInstanceResultCountMismatch(c *gc.C) { 59 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 60 *(result.(*params.UnitStorageInstancesResults)) = params.UnitStorageInstancesResults{ 61 []params.UnitStorageInstances{{}, {}}, 62 } 63 return nil 64 }) 65 st := uniter.NewState(apiCaller, names.NewUnitTag("mysql/0")) 66 c.Assert(func() { st.StorageInstances(names.NewUnitTag("mysql/0")) }, gc.PanicMatches, "expected 1 result, got 2") 67 } 68 69 func (s *storageSuite) TestAPIErrors(c *gc.C) { 70 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 71 return errors.New("bad") 72 }) 73 st := uniter.NewState(apiCaller, names.NewUnitTag("mysql/0")) 74 _, err := st.StorageInstances(names.NewUnitTag("mysql/0")) 75 c.Check(err, gc.ErrorMatches, "bad") 76 }