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 }