1
// Copyright 2013 Canonical Ltd.
2
// Licensed under the LGPLv3, see LICENCE file for details.
9
"gopkg.in/juju/names.v2"
12
type relationSuite struct{}
14
var _ = gc.Suite(&relationSuite{})
16
var relationNameTests = []struct {
20
{pattern: "", valid: false},
21
{pattern: "0foo", valid: false},
22
{pattern: "foo", valid: true},
23
{pattern: "f1-boo", valid: true},
24
{pattern: "f-o-o", valid: true},
25
{pattern: "-foo", valid: false},
26
{pattern: "fo#o", valid: false},
27
{pattern: "foo-42", valid: true},
28
{pattern: "FooBar", valid: false},
29
{pattern: "foo42-bar1", valid: true},
30
{pattern: "42", valid: false},
31
{pattern: "0", valid: false},
32
{pattern: "%not", valid: false},
33
{pattern: "42also-not", valid: false},
34
{pattern: "042", valid: false},
35
{pattern: "0x42", valid: false},
36
{pattern: "foo_42", valid: true},
37
{pattern: "_foo", valid: false},
38
{pattern: "!foo", valid: false},
39
{pattern: "foo_bar-baz_boo", valid: true},
40
{pattern: "foo bar", valid: false},
41
{pattern: "foo-_", valid: false},
42
{pattern: "foo-", valid: false},
43
{pattern: "foo_-a", valid: false},
44
{pattern: "foo_", valid: false},
47
func (s *relationSuite) TestRelationKeyFormats(c *gc.C) {
48
// In order to test all possible combinations, we need
49
// to use the relationNameTests and applicationNameTests
50
// twice to construct all possible keys.
51
for i, testRel := range relationNameTests {
52
for j, testSvc := range applicationNameTests {
53
peerKey := testSvc.pattern + ":" + testRel.pattern
54
key := peerKey + " " + peerKey
55
isValid := testSvc.valid && testRel.valid
56
c.Logf("test %d: %q -> valid: %v", i*len(applicationNameTests)+j, key, isValid)
57
c.Assert(names.IsValidRelation(key), gc.Equals, isValid)
58
c.Assert(names.IsValidRelation(peerKey), gc.Equals, isValid)
63
var parseRelationTagTests = []struct {
69
err: names.InvalidTagError("", ""),
71
tag: "relation-wordpress:db mysql:db",
72
expected: names.NewRelationTag("wordpress:db mysql:db"),
74
tag: "relation-wordpress:mysql",
75
expected: names.NewRelationTag("wordpress:mysql"),
78
err: names.InvalidTagError("dave", ""),
80
tag: "application-dave",
81
err: names.InvalidTagError("application-dave", names.RelationTagKind),
84
func (s *relationSuite) TestParseRelationTag(c *gc.C) {
85
for i, t := range parseRelationTagTests {
86
c.Logf("test %d: %s", i, t.tag)
87
got, err := names.ParseRelationTag(t.tag)
88
if err != nil || t.err != nil {
89
c.Check(err, gc.DeepEquals, t.err)
92
c.Check(got, gc.FitsTypeOf, t.expected)
93
c.Check(got, gc.Equals, t.expected)