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