~gz/maas/1.2_add_db_kernel_params

« back to all changes in this revision

Viewing changes to src/maasserver/utils/tests/test_utils.py

[r=allenap][bug=1059645][author=allenap] Backport of lp:maas revision 1324:

In the API description, make handler URIs absolute with respect to the request.

Previously, DEFAULT_MAAS_URL was always used.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
from django.conf import settings
18
18
from django.core.urlresolvers import reverse
 
19
from django.http import HttpRequest
19
20
from maasserver.enum import NODE_STATUS_CHOICES
20
21
from maasserver.testing.factory import factory
21
22
from maasserver.testing.testcase import TestCase as DjangoTestCase
22
23
from maasserver.utils import (
23
24
    absolute_reverse,
 
25
    build_absolute_uri,
24
26
    get_db_state,
25
27
    map_enum,
26
28
    strip_domain,
107
109
        self.assertEqual(status, get_db_state(node, 'status'))
108
110
 
109
111
 
 
112
class TestBuildAbsoluteURI(TestCase):
 
113
    """Tests for `build_absolute_uri`."""
 
114
 
 
115
    def make_request(self, host="example.com", port=80, script_name="",
 
116
                     is_secure=False):
 
117
        """Return a :class:`HttpRequest` with the given parameters."""
 
118
        request = HttpRequest()
 
119
        request.META["SERVER_NAME"] = host
 
120
        request.META["SERVER_PORT"] = port
 
121
        request.META["SCRIPT_NAME"] = script_name
 
122
        request.is_secure = lambda: is_secure
 
123
        return request
 
124
 
 
125
    def test_simple(self):
 
126
        request = self.make_request()
 
127
        self.assertEqual(
 
128
            "http://example.com/fred",
 
129
            build_absolute_uri(request, "/fred"))
 
130
 
 
131
    def test_different_port(self):
 
132
        request = self.make_request(port=1234)
 
133
        self.assertEqual(
 
134
            "http://example.com:1234/fred",
 
135
            build_absolute_uri(request, "/fred"))
 
136
 
 
137
    def test_script_name_is_prefixed(self):
 
138
        # The script name is always prefixed to the given path.
 
139
        request = self.make_request(script_name="/foo/bar")
 
140
        self.assertEqual(
 
141
            "http://example.com/foo/bar/fred",
 
142
            build_absolute_uri(request, "/fred"))
 
143
 
 
144
    def test_secure(self):
 
145
        request = self.make_request(port=443, is_secure=True)
 
146
        self.assertEqual(
 
147
            "https://example.com/fred",
 
148
            build_absolute_uri(request, "/fred"))
 
149
 
 
150
    def test_different_port_and_secure(self):
 
151
        request = self.make_request(port=9443, is_secure=True)
 
152
        self.assertEqual(
 
153
            "https://example.com:9443/fred",
 
154
            build_absolute_uri(request, "/fred"))
 
155
 
 
156
    def test_no_leading_forward_slash(self):
 
157
        # No attempt is made to ensure that the given path is separated from
 
158
        # the to-be-prefixed path.
 
159
        request = self.make_request(script_name="/foo")
 
160
        self.assertEqual(
 
161
            "http://example.com/foobar",
 
162
            build_absolute_uri(request, "bar"))
 
163
 
 
164
    def test_preserve_two_leading_slashes(self):
 
165
        # Whilst this shouldn't ordinarily happen, two leading slashes in the
 
166
        # path should be preserved, and not treated specially.
 
167
        request = self.make_request(script_name="//foo")
 
168
        self.assertEqual(
 
169
            "http://example.com//foo/fred",
 
170
            build_absolute_uri(request, "/fred"))
 
171
 
 
172
 
110
173
class TestStripDomain(TestCase):
111
174
 
112
175
    def test_strip_domain(self):