github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/api/diskformatter/diskformatter_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package diskformatter_test 5 6 import ( 7 "errors" 8 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/diskformatter" 14 "github.com/juju/juju/apiserver/params" 15 "github.com/juju/juju/storage" 16 coretesting "github.com/juju/juju/testing" 17 "github.com/juju/names" 18 ) 19 20 var _ = gc.Suite(&DiskFormatterSuite{}) 21 22 type DiskFormatterSuite struct { 23 coretesting.BaseSuite 24 } 25 26 func (s *DiskFormatterSuite) TestBlockDevices(c *gc.C) { 27 devices := []params.BlockDeviceResult{{ 28 Result: storage.BlockDevice{DeviceName: "sda", Size: 123}, 29 }, { 30 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 31 }} 32 33 var called bool 34 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 35 c.Check(objType, gc.Equals, "DiskFormatter") 36 c.Check(version, gc.Equals, 0) 37 c.Check(id, gc.Equals, "") 38 c.Check(request, gc.Equals, "BlockDevices") 39 c.Check(arg, gc.DeepEquals, params.Entities{ 40 Entities: []params.Entity{{Tag: "disk-0"}, {Tag: "disk-1"}}, 41 }) 42 c.Assert(result, gc.FitsTypeOf, ¶ms.BlockDeviceResults{}) 43 *(result.(*params.BlockDeviceResults)) = params.BlockDeviceResults{ 44 devices, 45 } 46 called = true 47 return nil 48 }) 49 50 st := diskformatter.NewState(apiCaller, names.NewUnitTag("service/0")) 51 results, err := st.BlockDevices([]names.DiskTag{ 52 names.NewDiskTag("0"), 53 names.NewDiskTag("1"), 54 }) 55 c.Check(err, jc.ErrorIsNil) 56 c.Check(called, jc.IsTrue) 57 c.Assert(results.Results, gc.DeepEquals, devices) 58 } 59 60 func (s *DiskFormatterSuite) TestBlockDeviceResultCountMismatch(c *gc.C) { 61 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 62 *(result.(*params.BlockDeviceResults)) = params.BlockDeviceResults{ 63 []params.BlockDeviceResult{{}, {}}, 64 } 65 return nil 66 }) 67 st := diskformatter.NewState(apiCaller, names.NewUnitTag("service/0")) 68 c.Assert(func() { st.BlockDevices(nil) }, gc.PanicMatches, "expected 0 results, got 2") 69 } 70 71 func (s *DiskFormatterSuite) TestBlockDeviceStorageInstances(c *gc.C) { 72 storageInstances := []params.StorageInstanceResult{{ 73 Result: storage.StorageInstance{Id: "whatever"}, 74 }, { 75 Error: ¶ms.Error{Message: "MSG", Code: "621"}, 76 }} 77 78 var called bool 79 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 80 c.Check(objType, gc.Equals, "DiskFormatter") 81 c.Check(version, gc.Equals, 0) 82 c.Check(id, gc.Equals, "") 83 c.Check(request, gc.Equals, "BlockDeviceStorageInstances") 84 c.Check(arg, gc.DeepEquals, params.Entities{ 85 Entities: []params.Entity{{Tag: "disk-0"}, {Tag: "disk-1"}}, 86 }) 87 c.Assert(result, gc.FitsTypeOf, ¶ms.StorageInstanceResults{}) 88 *(result.(*params.StorageInstanceResults)) = params.StorageInstanceResults{ 89 storageInstances, 90 } 91 called = true 92 return nil 93 }) 94 95 st := diskformatter.NewState(apiCaller, names.NewUnitTag("service/0")) 96 results, err := st.BlockDeviceStorageInstances([]names.DiskTag{ 97 names.NewDiskTag("0"), 98 names.NewDiskTag("1"), 99 }) 100 c.Check(err, jc.ErrorIsNil) 101 c.Check(called, jc.IsTrue) 102 c.Assert(results.Results, gc.DeepEquals, storageInstances) 103 } 104 105 func (s *DiskFormatterSuite) TestAPIErrors(c *gc.C) { 106 apiCaller := testing.APICallerFunc(func(objType string, version int, id, request string, arg, result interface{}) error { 107 return errors.New("blargh") 108 }) 109 st := diskformatter.NewState(apiCaller, names.NewUnitTag("service/0")) 110 _, err := st.BlockDevices(nil) 111 c.Check(err, gc.ErrorMatches, "blargh") 112 _, err = st.BlockDeviceStorageInstances(nil) 113 c.Check(err, gc.ErrorMatches, "blargh") 114 }