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: &params.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, &params.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: &params.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, &params.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  }