~hazmat/pyjuju/security-policy-with-topology

« back to all changes in this revision

Viewing changes to juju/charm/tests/test_url.py

  • Committer: kapil.thangavelu at canonical
  • Date: 2012-03-31 03:34:10 UTC
  • mfrom: (316.1.11 states-with-principals)
  • Revision ID: kapil.thangavelu@canonical.com-20120331033410-mj2znr90wnm0j88b
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from juju.charm.errors import CharmURLError
 
2
from juju.charm.url import CharmCollection, CharmURL
 
3
from juju.lib.testing import TestCase
 
4
 
 
5
 
 
6
class CharmCollectionTest(TestCase):
 
7
 
 
8
    def test_str(self):
 
9
        self.assertEquals(
 
10
            str(CharmCollection("foo", "bar", "baz")), "foo:~bar/baz")
 
11
        self.assertEquals(
 
12
            str(CharmCollection("ping", None, "pong")), "ping:pong")
 
13
 
 
14
 
 
15
class CharmURLTest(TestCase):
 
16
 
 
17
    def assert_url(self, url, schema, user, series, name, rev):
 
18
        self.assertEquals(url.collection.schema, schema)
 
19
        self.assertEquals(url.collection.user, user)
 
20
        self.assertEquals(url.collection.series, series)
 
21
        self.assertEquals(url.name, name)
 
22
        self.assertEquals(url.revision, rev)
 
23
 
 
24
    def assert_error(self, err, url_str, message):
 
25
        self.assertEquals(
 
26
            str(err), "Bad charm URL %r: %s" % (url_str, message))
 
27
 
 
28
    def assert_parse(self, string, schema, user, series, name, rev):
 
29
        url = CharmURL.parse(string)
 
30
        self.assert_url(url, schema, user, series, name, rev)
 
31
        self.assertEquals(str(url), string)
 
32
        self.assertEquals(url.path, string.split(":", 1)[1])
 
33
 
 
34
    def test_parse(self):
 
35
        self.assert_parse(
 
36
            "cs:~user/series/name", "cs", "user", "series", "name", None)
 
37
        self.assert_parse(
 
38
            "cs:~user/series/name-0", "cs", "user", "series", "name", 0)
 
39
        self.assert_parse(
 
40
            "cs:series/name", "cs", None, "series", "name", None)
 
41
        self.assert_parse(
 
42
            "cs:series/name-0", "cs", None, "series", "name", 0)
 
43
        self.assert_parse(
 
44
            "cs:series/name0", "cs", None, "series", "name0", None)
 
45
        self.assert_parse(
 
46
            "cs:series/n0-0n-n0", "cs", None, "series", "n0-0n-n0", None)
 
47
        self.assert_parse(
 
48
            "local:series/name", "local", None, "series", "name", None)
 
49
        self.assert_parse(
 
50
            "local:series/name-0", "local", None, "series", "name", 0)
 
51
 
 
52
    def assert_cannot_parse(self, string, message):
 
53
        err = self.assertRaises(CharmURLError, CharmURL.parse, string)
 
54
        self.assert_error(err, string, message)
 
55
 
 
56
    def test_cannot_parse(self):
 
57
        self.assert_cannot_parse(
 
58
            None, "not a string type")
 
59
        self.assert_cannot_parse(
 
60
            "series/name-1", "no schema specified")
 
61
        self.assert_cannot_parse(
 
62
            "bs:~user/series/name-1", "invalid schema")
 
63
        self.assert_cannot_parse(
 
64
            "cs:~1/series/name-1", "invalid user")
 
65
        self.assert_cannot_parse(
 
66
            "cs:~user/1/name-1", "invalid series")
 
67
        self.assert_cannot_parse(
 
68
            "cs:~user/series/name-1-2", "invalid name")
 
69
        self.assert_cannot_parse(
 
70
            "cs:~user/series/name-1-n-2", "invalid name")
 
71
        self.assert_cannot_parse(
 
72
            "cs:~user/series/name--a-2", "invalid name")
 
73
        self.assert_cannot_parse(
 
74
            "cs:~user/series/huh/name-1", "invalid form")
 
75
        self.assert_cannot_parse(
 
76
            "cs:~user/name", "no series specified")
 
77
        self.assert_cannot_parse(
 
78
            "cs:name", "invalid form")
 
79
        self.assert_cannot_parse(
 
80
            "local:~user/series/name", "users not allowed in local URLs")
 
81
        self.assert_cannot_parse(
 
82
            "local:~user/name", "users not allowed in local URLs")
 
83
        self.assert_cannot_parse(
 
84
            "local:name", "invalid form")
 
85
 
 
86
    def test_revision(self):
 
87
        url1 = CharmURL.parse("cs:foo/bar")
 
88
        error = self.assertRaises(CharmURLError, url1.assert_revision)
 
89
        self.assertEquals(
 
90
            str(error), "Bad charm URL 'cs:foo/bar': expected a revision")
 
91
 
 
92
        url2 = url1.with_revision(0)
 
93
        url1.collection.schema = "local" # change url1, verify deep copied
 
94
        url2.assert_revision()
 
95
        self.assertEquals(str(url2), "cs:foo/bar-0")
 
96
 
 
97
        url3 = url2.with_revision(999)
 
98
        url3.assert_revision()
 
99
        self.assertEquals(str(url3), "cs:foo/bar-999")
 
100
 
 
101
    def assert_infer(self, string, schema, user, series, name, rev):
 
102
        url = CharmURL.infer(string, "default")
 
103
        self.assert_url(url, schema, user, series, name, rev)
 
104
 
 
105
    def test_infer(self):
 
106
        self.assert_infer(
 
107
            "name", "cs", None, "default", "name", None)
 
108
        self.assert_infer(
 
109
            "name-0", "cs", None, "default", "name", 0)
 
110
        self.assert_infer(
 
111
            "series/name", "cs", None, "series", "name", None)
 
112
        self.assert_infer(
 
113
            "series/name-0", "cs", None, "series", "name", 0)
 
114
        self.assert_infer(
 
115
            "cs:name", "cs", None, "default", "name", None)
 
116
        self.assert_infer(
 
117
            "cs:name-0", "cs", None, "default", "name", 0)
 
118
        self.assert_infer(
 
119
            "cs:~user/name", "cs", "user", "default", "name", None)
 
120
        self.assert_infer(
 
121
            "cs:~user/name-0", "cs", "user", "default", "name", 0)
 
122
        self.assert_infer(
 
123
            "local:name", "local", None, "default", "name", None)
 
124
        self.assert_infer(
 
125
            "local:name-0", "local", None, "default", "name", 0)
 
126
 
 
127
    def test_cannot_infer(self):
 
128
        err = self.assertRaises(
 
129
            CharmURLError, CharmURL.infer, "name", "invalid!series")
 
130
        self.assertEquals(
 
131
            str(err),
 
132
            "Bad charm URL 'cs:invalid!series/name': invalid series (URL "
 
133
            "inferred from 'name')")
 
134
 
 
135
        err = self.assertRaises(
 
136
            CharmURLError, CharmURL.infer, "~user/name", "default")
 
137
        self.assertEquals(
 
138
            str(err),
 
139
            "Bad charm URL '~user/name': a URL with a user must specify a "
 
140
            "schema")