1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
3
# Copyright 2012 United States Government as represented by the
4
# Administrator of the National Aeronautics and Space Administration.
7
# Copyright 2012 Nebula, Inc.
9
# Licensed under the Apache License, Version 2.0 (the "License"); you may
10
# not use this file except in compliance with the License. You may obtain
11
# a copy of the License at
13
# http://www.apache.org/licenses/LICENSE-2.0
15
# Unless required by applicable law or agreed to in writing, software
16
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
17
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
18
# License for the specific language governing permissions and limitations
21
from django import http
22
from django.core.urlresolvers import reverse
25
from horizon import api
26
from horizon import test
29
class NetworkViewTests(test.TestCase):
31
super(NetworkViewTests, self).setUp()
32
# TODO(gabriel): Move this to horizon.tests.test_data.quantum_data
33
# after the wrapper classes are added for Quantum.
35
self.network['networks'] = []
36
self.network['networks'].append({'id': 'n1'})
37
self.network_details = {'network': {'id': '1', 'name': 'test_network'}}
39
self.ports['ports'] = []
40
self.ports['ports'].append({'id': 'p1'})
45
self.port_attachment = {
48
self.vifs = [{'id': 'vif1'}]
50
def test_network_index(self):
51
self.mox.StubOutWithMock(api, 'quantum_list_networks')
52
api.quantum_list_networks(IsA(http.HttpRequest)).\
53
AndReturn(self.network)
55
self.mox.StubOutWithMock(api, 'quantum_network_details')
56
api.quantum_network_details(IsA(http.HttpRequest),
57
'n1').AndReturn(self.network_details)
59
self.mox.StubOutWithMock(api, 'quantum_list_ports')
60
api.quantum_list_ports(IsA(http.HttpRequest),
61
'n1').AndReturn(self.ports)
63
self.mox.StubOutWithMock(api, 'quantum_port_attachment')
64
api.quantum_port_attachment(IsA(http.HttpRequest),
65
'n1', 'p1').AndReturn(self.port_attachment)
69
res = self.client.get(reverse('horizon:nova:networks:index'))
71
self.assertTemplateUsed(res, 'nova/networks/index.html')
72
networks = res.context['table'].data
74
self.assertEqual(len(networks), 1)
75
self.assertEqual(networks[0]['name'], 'test_network')
76
self.assertEqual(networks[0]['id'], 'n1')
77
self.assertEqual(networks[0]['total'], 1)
78
self.assertEqual(networks[0]['used'], 1)
79
self.assertEqual(networks[0]['available'], 0)
81
def test_network_create(self):
82
self.mox.StubOutWithMock(api.quantum, "quantum_create_network")
83
api.quantum.quantum_create_network(IsA(http.HttpRequest),
84
IsA(dict)).AndReturn(True)
88
formData = {'name': 'Test',
89
'method': 'CreateNetwork'}
91
res = self.client.post(reverse('horizon:nova:networks:create'),
94
self.assertRedirectsNoFollow(res,
95
reverse('horizon:nova:networks:index'))
97
def test_network_delete(self):
98
self.mox.StubOutWithMock(api, "quantum_delete_network")
99
api.quantum_delete_network(IsA(http.HttpRequest), 'n1').AndReturn(True)
101
self.mox.StubOutWithMock(api, 'quantum_list_networks')
102
api.quantum_list_networks(IsA(http.HttpRequest)).\
103
AndReturn(self.network)
105
self.mox.StubOutWithMock(api, 'quantum_network_details')
106
api.quantum_network_details(IsA(http.HttpRequest),
107
'n1').AndReturn(self.network_details)
109
self.mox.StubOutWithMock(api, 'quantum_list_ports')
110
api.quantum_list_ports(IsA(http.HttpRequest),
111
'n1').AndReturn(self.ports)
113
self.mox.StubOutWithMock(api, 'quantum_port_attachment')
114
api.quantum_port_attachment(IsA(http.HttpRequest),
115
'n1', 'p1').AndReturn(self.port_attachment)
119
formData = {'action': 'networks__delete__n1'}
121
self.client.post(reverse('horizon:nova:networks:index'), formData)
123
def test_network_rename(self):
124
self.mox.StubOutWithMock(api, 'quantum_network_details')
125
api.quantum_network_details(IsA(http.HttpRequest),
126
'n1').AndReturn(self.network_details)
128
self.mox.StubOutWithMock(api, 'quantum_update_network')
129
api.quantum_update_network(IsA(http.HttpRequest), 'n1',
130
{'network': {'name': "Test1"}})
134
formData = {'network': 'n1',
136
'method': 'RenameNetwork'}
138
res = self.client.post(reverse('horizon:nova:networks:rename',
142
self.assertRedirectsNoFollow(res,
143
reverse('horizon:nova:networks:index'))
145
def test_network_details(self):
146
self.mox.StubOutWithMock(api, 'quantum_network_details')
147
api.quantum_network_details(IsA(http.HttpRequest),
148
'n1').AndReturn(self.network_details)
150
self.mox.StubOutWithMock(api, 'quantum_list_ports')
151
api.quantum_list_ports(IsA(http.HttpRequest),
152
'n1').AndReturn(self.ports)
154
self.mox.StubOutWithMock(api, 'quantum_port_attachment')
155
api.quantum_port_attachment(IsA(http.HttpRequest),
156
'n1', 'p1').AndReturn(self.port_attachment)
158
self.mox.StubOutWithMock(api, 'quantum_port_details')
159
api.quantum_port_details(IsA(http.HttpRequest),
160
'n1', 'p1').AndReturn(self.port_details)
162
self.mox.StubOutWithMock(api, 'get_vif_ids')
163
api.get_vif_ids(IsA(http.HttpRequest)).AndReturn(self.vifs)
167
res = self.client.get(reverse('horizon:nova:networks:detail',
170
self.assertTemplateUsed(res, 'nova/networks/detail.html')
171
self.assertIn('network', res.context)
173
network = res.context['network']
175
self.assertEqual(network['name'], 'test_network')
176
self.assertEqual(network['id'], 'n1')
178
def test_port_create(self):
179
self.mox.StubOutWithMock(api, "quantum_network_details")
180
self.mox.StubOutWithMock(api, "quantum_create_port")
181
network_details = {'network': {'id': 'n1'}}
182
api.quantum_network_details(IsA(http.HttpRequest),
183
'n1').AndReturn(network_details)
184
api.quantum_create_port(IsA(http.HttpRequest), 'n1').AndReturn(True)
186
formData = {'ports_num': 1,
188
'method': 'CreatePort'}
192
res = self.client.post(reverse('horizon:nova:networks:port_create',
196
self.assertRedirectsNoFollow(res,
197
reverse('horizon:nova:networks:detail',
200
def test_port_delete(self):
201
self.mox.StubOutWithMock(api, 'quantum_network_details')
202
self.mox.StubOutWithMock(api, 'quantum_list_ports')
203
self.mox.StubOutWithMock(api, 'quantum_port_attachment')
204
self.mox.StubOutWithMock(api, 'quantum_port_details')
205
self.mox.StubOutWithMock(api, 'get_vif_ids')
206
self.mox.StubOutWithMock(api, "quantum_delete_port")
207
network_details = {'network': {'id': 'n1', 'name': 'network1'}}
208
api.quantum_network_details(IsA(http.HttpRequest),
209
'n1').AndReturn(network_details)
211
api.quantum_list_ports(IsA(http.HttpRequest),
212
'n1').AndReturn(self.ports)
214
api.quantum_port_attachment(IsA(http.HttpRequest),
215
'n1', 'p1').AndReturn(self.port_attachment)
217
api.quantum_port_details(IsA(http.HttpRequest),
218
'n1', 'p1').AndReturn(self.port_details)
220
api.get_vif_ids(IsA(http.HttpRequest)).AndReturn(self.vifs)
222
api.quantum_delete_port(IsA(http.HttpRequest),
223
'n1', 'p1').AndReturn(True)
225
formData = {'action': 'network_details__delete__p1'}
229
detail_url = reverse('horizon:nova:networks:detail', args=["n1"])
230
self.client.post(detail_url, formData)
232
def test_port_attach(self):
233
self.mox.StubOutWithMock(api, "quantum_network_details")
234
self.mox.StubOutWithMock(api, "quantum_attach_port")
235
self.mox.StubOutWithMock(api, "get_vif_ids")
236
network_details = {'network': {'id': 'n1'}}
237
api.quantum_network_details(IsA(http.HttpRequest),
238
'n1').AndReturn(network_details)
239
api.quantum_attach_port(IsA(http.HttpRequest),
240
'n1', 'p1', IsA(dict)).AndReturn(True)
241
api.get_vif_ids(IsA(http.HttpRequest)).AndReturn([{
243
'instance_name': 'instance1',
246
formData = {'port': 'p1',
249
'method': 'AttachPort'}
253
res = self.client.post(reverse('horizon:nova:networks:port_attach',
257
self.assertRedirectsNoFollow(res,
258
reverse('horizon:nova:networks:detail',
261
def test_port_detach(self):
262
self.mox.StubOutWithMock(api, 'quantum_network_details')
263
self.mox.StubOutWithMock(api, 'quantum_list_ports')
264
self.mox.StubOutWithMock(api, 'quantum_port_attachment')
265
self.mox.StubOutWithMock(api, 'quantum_port_details')
266
self.mox.StubOutWithMock(api, 'get_vif_ids')
267
self.mox.StubOutWithMock(api, "quantum_set_port_state")
268
network_details = {'network': {'id': 'n1', 'name': 'network1'}}
269
api.quantum_network_details(IsA(http.HttpRequest),
270
'n1').AndReturn(network_details)
272
api.quantum_list_ports(IsA(http.HttpRequest),
273
'n1').AndReturn(self.ports)
275
api.quantum_port_attachment(IsA(http.HttpRequest),
276
'n1', 'p1').AndReturn(self.port_attachment)
278
api.quantum_port_details(IsA(http.HttpRequest),
279
'n1', 'p1').AndReturn(self.port_details)
281
api.get_vif_ids(IsA(http.HttpRequest)).AndReturn(self.vifs)
283
api.quantum_set_port_state(IsA(http.HttpRequest),
286
{'port': {'state': 'DOWN'}}).AndReturn(True)
288
formData = {'action': "network_details__detach_port__p1"}
292
detail_url = reverse('horizon:nova:networks:detail', args=["n1"])
293
res = self.client.post(detail_url, formData)
295
self.assertRedirectsNoFollow(res, detail_url)