github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/apiserver/common/volumes_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common_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/apiserver/common"
    13  	"github.com/juju/juju/apiserver/params"
    14  	"github.com/juju/juju/environs/tags"
    15  	"github.com/juju/juju/state"
    16  	"github.com/juju/juju/storage"
    17  	"github.com/juju/juju/storage/poolmanager"
    18  	"github.com/juju/juju/testing"
    19  )
    20  
    21  type volumesSuite struct{}
    22  
    23  var _ = gc.Suite(&volumesSuite{})
    24  
    25  type fakeVolume struct {
    26  	state.Volume
    27  	tag         names.Tag
    28  	provisioned bool
    29  }
    30  
    31  func (v *fakeVolume) Tag() names.Tag {
    32  	return v.tag
    33  }
    34  
    35  func (v *fakeVolume) Params() (state.VolumeParams, bool) {
    36  	if v.provisioned {
    37  		return state.VolumeParams{}, false
    38  	}
    39  	return state.VolumeParams{
    40  		Pool: "loop",
    41  		Size: 1024,
    42  	}, true
    43  }
    44  
    45  func (v *fakeVolume) Info() (state.VolumeInfo, error) {
    46  	if !v.provisioned {
    47  		return state.VolumeInfo{}, errors.NotProvisionedf("volume %v", v.tag.Id())
    48  	}
    49  	return state.VolumeInfo{
    50  		Pool: "loop",
    51  		Size: 1024,
    52  	}, nil
    53  }
    54  
    55  type fakePoolManager struct {
    56  	poolmanager.PoolManager
    57  }
    58  
    59  func (pm *fakePoolManager) Get(name string) (*storage.Config, error) {
    60  	return nil, errors.NotFoundf("pool")
    61  }
    62  
    63  func (s *volumesSuite) TestVolumeParams(c *gc.C) {
    64  	s.testVolumeParams(c, false)
    65  }
    66  
    67  func (s *volumesSuite) TestVolumeParamsAlreadyProvisioned(c *gc.C) {
    68  	s.testVolumeParams(c, false)
    69  }
    70  
    71  func (*volumesSuite) testVolumeParams(c *gc.C, provisioned bool) {
    72  	tag := names.NewVolumeTag("100")
    73  	p, err := common.VolumeParams(
    74  		&fakeVolume{tag: tag, provisioned: provisioned},
    75  		nil, // StorageInstance
    76  		testing.CustomEnvironConfig(c, testing.Attrs{
    77  			"resource-tags": "a=b c=",
    78  		}),
    79  		&fakePoolManager{},
    80  	)
    81  	c.Assert(err, jc.ErrorIsNil)
    82  	c.Assert(p, jc.DeepEquals, params.VolumeParams{
    83  		VolumeTag: "volume-100",
    84  		Provider:  "loop",
    85  		Size:      1024,
    86  		Tags: map[string]string{
    87  			tags.JujuEnv: testing.EnvironmentTag.Id(),
    88  			"a":          "b",
    89  			"c":          "",
    90  		},
    91  	})
    92  }
    93  
    94  func (*volumesSuite) TestVolumeParamsStorageTags(c *gc.C) {
    95  	volumeTag := names.NewVolumeTag("100")
    96  	storageTag := names.NewStorageTag("mystore/0")
    97  	unitTag := names.NewUnitTag("mysql/123")
    98  	p, err := common.VolumeParams(
    99  		&fakeVolume{tag: volumeTag},
   100  		&fakeStorageInstance{tag: storageTag, owner: unitTag},
   101  		testing.CustomEnvironConfig(c, nil),
   102  		&fakePoolManager{},
   103  	)
   104  	c.Assert(err, jc.ErrorIsNil)
   105  	c.Assert(p, jc.DeepEquals, params.VolumeParams{
   106  		VolumeTag: "volume-100",
   107  		Provider:  "loop",
   108  		Size:      1024,
   109  		Tags: map[string]string{
   110  			tags.JujuEnv:             testing.EnvironmentTag.Id(),
   111  			tags.JujuStorageInstance: "mystore/0",
   112  			tags.JujuStorageOwner:    "mysql/123",
   113  		},
   114  	})
   115  }