65
79
class TestAbsoluteReverse(DjangoTestCase):
67
def test_absolute_reverse_uses_DEFAULT_MAAS_URL(self):
81
def test_absolute_reverse_uses_DEFAULT_MAAS_URL_by_default(self):
68
82
maas_url = 'http://%s' % factory.getRandomString()
69
83
self.patch(settings, 'DEFAULT_MAAS_URL', maas_url)
70
84
absolute_url = absolute_reverse('settings')
71
85
expected_url = settings.DEFAULT_MAAS_URL + reverse('settings')
72
86
self.assertEqual(expected_url, absolute_url)
88
def test_absolute_reverse_uses_given_base_url(self):
89
maas_url = 'http://%s' % factory.getRandomString()
90
absolute_url = absolute_reverse('settings', base_url=maas_url)
91
expected_url = maas_url + reverse('settings')
92
self.assertEqual(expected_url, absolute_url)
74
94
def test_absolute_reverse_uses_query_string(self):
75
95
self.patch(settings, 'DEFAULT_MAAS_URL', '')
76
96
parameters = {factory.getRandomString(): factory.getRandomString()}
104
124
NODE_STATUS_CHOICES, but_not=[status])
105
125
node.status = another_status
106
126
self.assertEqual(status, get_db_state(node, 'status'))
129
class TestBuildAbsoluteURI(TestCase):
130
"""Tests for `build_absolute_uri`."""
132
def make_request(self, host="example.com", port=80, script_name="",
134
"""Return a :class:`HttpRequest` with the given parameters."""
135
request = HttpRequest()
136
request.META["SERVER_NAME"] = host
137
request.META["SERVER_PORT"] = port
138
request.META["SCRIPT_NAME"] = script_name
139
request.is_secure = lambda: is_secure
142
def test_simple(self):
143
request = self.make_request()
145
"http://example.com/fred",
146
build_absolute_uri(request, "/fred"))
148
def test_different_port(self):
149
request = self.make_request(port=1234)
151
"http://example.com:1234/fred",
152
build_absolute_uri(request, "/fred"))
154
def test_script_name_is_ignored(self):
155
# The given path already includes the script_name, so the
156
# script_name passed in the request is not included again.
157
request = self.make_request(script_name="/foo/bar")
159
"http://example.com/foo/bar/fred",
160
build_absolute_uri(request, "/foo/bar/fred"))
162
def test_secure(self):
163
request = self.make_request(port=443, is_secure=True)
165
"https://example.com/fred",
166
build_absolute_uri(request, "/fred"))
168
def test_different_port_and_secure(self):
169
request = self.make_request(port=9443, is_secure=True)
171
"https://example.com:9443/fred",
172
build_absolute_uri(request, "/fred"))
174
def test_preserve_two_leading_slashes(self):
175
# Whilst this shouldn't ordinarily happen, two leading slashes in the
176
# path should be preserved, and not treated specially.
177
request = self.make_request()
179
"http://example.com//foo",
180
build_absolute_uri(request, "//foo"))
183
class TestStripDomain(TestCase):
185
def test_strip_domain(self):
186
input_and_results = [
187
('name.domain', 'name'),
189
('name.domain.what', 'name'),
190
('name..domain', 'name'),
192
inputs = [input for input, _ in input_and_results]
193
results = [result for _, result in input_and_results]
194
self.assertEqual(results, map(strip_domain, inputs))
197
def get_request(origin_ip):
198
return RequestFactory().post('/', REMOTE_ADDR=origin_ip)
201
class TestFindNodegroup(DjangoTestCase):
203
def test_finds_nodegroup_by_network_address(self):
204
nodegroup = factory.make_node_group(
205
network=IPNetwork("192.168.28.1/24"))
208
find_nodegroup(get_request('192.168.28.0')))
210
def test_find_nodegroup_looks_up_nodegroup_by_controller_ip(self):
211
nodegroup = factory.make_node_group()
212
ip = nodegroup.get_managed_interface().ip
215
find_nodegroup(get_request(ip)))
217
def test_find_nodegroup_looks_up_only_configured_interfaces(self):
218
network = IPNetwork("192.168.41.0/24")
219
factory.make_node_group(
221
management=NODEGROUPINTERFACE_MANAGEMENT.UNMANAGED)
222
ip = factory.getRandomIPInNetwork(network)
223
self.assertIsNone(find_nodegroup(get_request(ip)))
225
def test_find_nodegroup_accepts_any_ip_in_nodegroup_subnet(self):
226
nodegroup = factory.make_node_group(
227
network=IPNetwork("192.168.41.0/24"))
230
find_nodegroup(get_request('192.168.41.199')))
232
def test_find_nodegroup_returns_None_if_not_found(self):
234
find_nodegroup(get_request(factory.getRandomIPAddress())))
236
def test_find_nodegroup_errors_if_multiple_matches(self):
237
self.patch(nodegroupinterface, "MINIMUM_NETMASK_BITS", 1)
238
factory.make_node_group(network=IPNetwork("10/8"))
239
factory.make_node_group(network=IPNetwork("10.1.1/24"))
241
NodeGroup.MultipleObjectsReturned,
242
find_nodegroup, get_request('10.1.1.2'))
244
def test_find_nodegroup_handles_multiple_matches_on_same_nodegroup(self):
245
self.patch(nodegroupinterface, "MINIMUM_NETMASK_BITS", 1)
246
nodegroup = factory.make_node_group(network=IPNetwork("10/8"))
247
NodeGroupInterface.objects.create(
248
nodegroup=nodegroup, ip='10.0.0.2', subnet_mask='255.0.0.0',
249
broadcast_ip='10.0.0.1', interface='eth71')
250
NodeGroupInterface.objects.create(
251
nodegroup=nodegroup, ip='10.0.0.3', subnet_mask='255.0.0.0',
252
broadcast_ip='10.0.0.2', interface='eth72')
253
self.assertEqual(nodegroup, find_nodegroup(get_request('10.0.0.9')))