1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the LGPLv3, see LICENCE file for details.
11
"gopkg.in/juju/names.v2"
14
type volumeSuite struct{}
16
var _ = gc.Suite(&volumeSuite{})
18
func (s *volumeSuite) TestVolumeTag(c *gc.C) {
19
c.Assert(names.NewVolumeTag("1").String(), gc.Equals, "volume-1")
22
func (s *volumeSuite) TestVolumeNameValidity(c *gc.C) {
23
assertVolumeNameValid(c, "0")
24
assertVolumeNameValid(c, "0/lxc/0/0")
25
assertVolumeNameValid(c, "1000")
26
assertVolumeNameInvalid(c, "-1")
27
assertVolumeNameInvalid(c, "")
28
assertVolumeNameInvalid(c, "one")
29
assertVolumeNameInvalid(c, "#")
30
assertVolumeNameInvalid(c, "0/0/0") // 0/0 is not a valid machine ID
33
func (s *volumeSuite) TestParseVolumeTag(c *gc.C) {
34
assertParseVolumeTag(c, "volume-0", names.NewVolumeTag("0"))
35
assertParseVolumeTag(c, "volume-88", names.NewVolumeTag("88"))
36
assertParseVolumeTag(c, "volume-0-lxc-0-88", names.NewVolumeTag("0/lxc/0/88"))
37
assertParseVolumeTagInvalid(c, "", names.InvalidTagError("", ""))
38
assertParseVolumeTagInvalid(c, "one", names.InvalidTagError("one", ""))
39
assertParseVolumeTagInvalid(c, "volume-", names.InvalidTagError("volume-", names.VolumeTagKind))
40
assertParseVolumeTagInvalid(c, "machine-0", names.InvalidTagError("machine-0", names.VolumeTagKind))
43
func (s *volumeSuite) TestVolumeMachine(c *gc.C) {
44
assertVolumeMachine(c, "0/0", names.NewMachineTag("0"))
45
assertVolumeMachine(c, "0/lxc/0/0", names.NewMachineTag("0/lxc/0"))
46
assertVolumeNoMachine(c, "0")
49
func assertVolumeMachine(c *gc.C, id string, expect names.MachineTag) {
50
t, ok := names.VolumeMachine(names.NewVolumeTag(id))
51
c.Assert(ok, gc.Equals, true)
52
c.Assert(t, gc.Equals, expect)
55
func assertVolumeNoMachine(c *gc.C, id string) {
56
_, ok := names.VolumeMachine(names.NewVolumeTag(id))
57
c.Assert(ok, gc.Equals, false)
60
func assertVolumeNameValid(c *gc.C, name string) {
61
c.Assert(names.IsValidVolume(name), gc.Equals, true)
62
names.NewVolumeTag(name)
65
func assertVolumeNameInvalid(c *gc.C, name string) {
66
c.Assert(names.IsValidVolume(name), gc.Equals, false)
67
testVolumeTag := func() { names.NewVolumeTag(name) }
68
expect := fmt.Sprintf("%q is not a valid volume ID", name)
69
c.Assert(testVolumeTag, gc.PanicMatches, expect)
72
func assertParseVolumeTag(c *gc.C, tag string, expect names.VolumeTag) {
73
t, err := names.ParseVolumeTag(tag)
74
c.Assert(err, gc.IsNil)
75
c.Assert(t, gc.Equals, expect)
78
func assertParseVolumeTagInvalid(c *gc.C, tag string, expect error) {
79
_, err := names.ParseVolumeTag(tag)
80
c.Assert(err, gc.ErrorMatches, expect.Error())