Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / tests / networks.py @ 4911365b

History | View | Annotate | Download (15 kB)

1 5b8a9240 Christos Stavrakakis
# Copyright 2012-2013 GRNET S.A. All rights reserved.
2 5b8a9240 Christos Stavrakakis
#
3 5b8a9240 Christos Stavrakakis
# Redistribution and use in source and binary forms, with or
4 5b8a9240 Christos Stavrakakis
# without modification, are permitted provided that the following
5 5b8a9240 Christos Stavrakakis
# conditions are met:
6 5b8a9240 Christos Stavrakakis
#
7 5b8a9240 Christos Stavrakakis
#   1. Redistributions of source code must retain the above
8 5b8a9240 Christos Stavrakakis
#      copyright notice, this list of conditions and the following
9 5b8a9240 Christos Stavrakakis
#      disclaimer.
10 5b8a9240 Christos Stavrakakis
#
11 5b8a9240 Christos Stavrakakis
#   2. Redistributions in binary form must reproduce the above
12 5b8a9240 Christos Stavrakakis
#      copyright notice, this list of conditions and the following
13 5b8a9240 Christos Stavrakakis
#      disclaimer in the documentation and/or other materials
14 5b8a9240 Christos Stavrakakis
#      provided with the distribution.
15 5b8a9240 Christos Stavrakakis
#
16 5b8a9240 Christos Stavrakakis
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17 5b8a9240 Christos Stavrakakis
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 5b8a9240 Christos Stavrakakis
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19 5b8a9240 Christos Stavrakakis
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20 5b8a9240 Christos Stavrakakis
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 5b8a9240 Christos Stavrakakis
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 5b8a9240 Christos Stavrakakis
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23 5b8a9240 Christos Stavrakakis
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24 5b8a9240 Christos Stavrakakis
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 5b8a9240 Christos Stavrakakis
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26 5b8a9240 Christos Stavrakakis
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 5b8a9240 Christos Stavrakakis
# POSSIBILITY OF SUCH DAMAGE.
28 5b8a9240 Christos Stavrakakis
#
29 5b8a9240 Christos Stavrakakis
# The views and conclusions contained in the software and
30 5b8a9240 Christos Stavrakakis
# documentation are those of the authors and should not be
31 5b8a9240 Christos Stavrakakis
# interpreted as representing official policies, either expressed
32 5b8a9240 Christos Stavrakakis
# or implied, of GRNET S.A.
33 5b8a9240 Christos Stavrakakis
34 5b8a9240 Christos Stavrakakis
from snf_django.utils.testing import (BaseAPITest, override_settings)
35 0baa1e3d Buildbot
from django.utils import simplejson as json
36 7d2fdab9 Georgios D. Tsoukalas
from synnefo.cyclades_settings import cyclades_services
37 7d2fdab9 Georgios D. Tsoukalas
from synnefo.lib.services import get_service_path
38 7d2fdab9 Georgios D. Tsoukalas
from synnefo.lib import join_urls
39 0baa1e3d Buildbot
import synnefo.db.models_factory as dbmf
40 5b8a9240 Christos Stavrakakis
from synnefo.db.models import Network
41 5b8a9240 Christos Stavrakakis
from django.conf import settings
42 7d2fdab9 Georgios D. Tsoukalas
43 0baa1e3d Buildbot
COMPUTE_URL = get_service_path(cyclades_services, 'compute',
44 5b8a9240 Christos Stavrakakis
                               version='v2.0')
45 0baa1e3d Buildbot
NETWORKS_URL = join_urls(COMPUTE_URL, "networks/")
46 2cd55da6 Christos Stavrakakis
47 7d2fdab9 Georgios D. Tsoukalas
48 0baa1e3d Buildbot
class NetworkTest(BaseAPITest):
49 0baa1e3d Buildbot
    def test_list_networks(self):
50 0baa1e3d Buildbot
        response = self.get(NETWORKS_URL)
51 0baa1e3d Buildbot
        self.assertSuccess(response)
52 0baa1e3d Buildbot
        networks = json.loads(response.content)
53 0baa1e3d Buildbot
        self.assertEqual(networks, {"networks": []})
54 039e3e61 Christos Stavrakakis
55 5b8a9240 Christos Stavrakakis
    def test_invalid_create(self):
56 5b8a9240 Christos Stavrakakis
        """Test invalid flavor"""
57 5b8a9240 Christos Stavrakakis
        request = {'network': {}}
58 5b8a9240 Christos Stavrakakis
        response = self.post(NETWORKS_URL, "user1", params=json.dumps(request))
59 5b8a9240 Christos Stavrakakis
        self.assertBadRequest(response)
60 5b8a9240 Christos Stavrakakis
        request = {'network': {"type": "foo"}}
61 5b8a9240 Christos Stavrakakis
        response = self.post(NETWORKS_URL, "user1", params=json.dumps(request))
62 5b8a9240 Christos Stavrakakis
        self.assertBadRequest(response)
63 5b8a9240 Christos Stavrakakis
        request = {'network': {"type": "MAC_FILTERED"}}
64 5b8a9240 Christos Stavrakakis
        with override_settings(settings,
65 5b8a9240 Christos Stavrakakis
                               API_ENABLED_NETWORK_FLAVORS=["CUSTOM"]):
66 5b8a9240 Christos Stavrakakis
            response = self.post(NETWORKS_URL, "user1",
67 5b8a9240 Christos Stavrakakis
                                 params=json.dumps(request))
68 5b8a9240 Christos Stavrakakis
        self.assertEqual(response.status_code, 403)
69 5b8a9240 Christos Stavrakakis
        self.assertEqual(len(Network.objects.filter(userid='user1')), 0)
70 5b8a9240 Christos Stavrakakis
71 5b8a9240 Christos Stavrakakis
    def test_create(self):
72 039e3e61 Christos Stavrakakis
        request = {
73 0baa1e3d Buildbot
            "network": {
74 0baa1e3d Buildbot
                "name": "sample_network",
75 0baa1e3d Buildbot
                "type": "MAC_FILTERED"
76 5b8a9240 Christos Stavrakakis
            }
77 4e1133ab Christos Stavrakakis
        }
78 0baa1e3d Buildbot
        response = self.post(NETWORKS_URL, params=json.dumps(request))
79 0baa1e3d Buildbot
        code = response.status_code
80 5b8a9240 Christos Stavrakakis
        self.assertEqual(code, 503)  # No MAC prefix pool
81 5b8a9240 Christos Stavrakakis
        dbmf.MacPrefixPoolTableFactory()
82 5b8a9240 Christos Stavrakakis
        response = self.post(NETWORKS_URL, params=json.dumps(request))
83 5b8a9240 Christos Stavrakakis
        code = response.status_code
84 5b8a9240 Christos Stavrakakis
        self.assertEqual(code, 201)
85 5b8a9240 Christos Stavrakakis
        res = json.loads(response.content)
86 5b8a9240 Christos Stavrakakis
        self.assertEqual(res["network"]["name"], "sample_network")
87 5b8a9240 Christos Stavrakakis
88 5b8a9240 Christos Stavrakakis
        # TEST QUOTAS!!!
89 5b8a9240 Christos Stavrakakis
        name, args, kwargs =\
90 5b8a9240 Christos Stavrakakis
            self.mocked_quotaholder.issue_one_commission.mock_calls[0]
91 5b8a9240 Christos Stavrakakis
        commission_resources = args[3]
92 5b8a9240 Christos Stavrakakis
        self.assertEqual(commission_resources, {"cyclades.network.private": 1})
93 5b8a9240 Christos Stavrakakis
        name, args, kwargs =\
94 5b8a9240 Christos Stavrakakis
            self.mocked_quotaholder.resolve_commissions.mock_calls[0]
95 5b8a9240 Christos Stavrakakis
        serial = Network.objects.get().serial.serial
96 5b8a9240 Christos Stavrakakis
        accepted_serials = args[1]
97 5b8a9240 Christos Stavrakakis
        rejected_serials = args[2]
98 5b8a9240 Christos Stavrakakis
        self.assertEqual(accepted_serials, [serial])
99 5b8a9240 Christos Stavrakakis
        self.assertEqual(rejected_serials, [])
100 5b8a9240 Christos Stavrakakis
101 5b8a9240 Christos Stavrakakis
        # test no name
102 5b8a9240 Christos Stavrakakis
        request["network"].pop("name")
103 5b8a9240 Christos Stavrakakis
        response = self.post(NETWORKS_URL, params=json.dumps(request))
104 5b8a9240 Christos Stavrakakis
        code = response.status_code
105 0baa1e3d Buildbot
        self.assertEqual(code, 201)
106 5b8a9240 Christos Stavrakakis
        res = json.loads(response.content)
107 5b8a9240 Christos Stavrakakis
        self.assertEqual(res["network"]["name"], "")
108 039e3e61 Christos Stavrakakis
109 0baa1e3d Buildbot
    def test_get_unfound_network(self):
110 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, "123")
111 0baa1e3d Buildbot
        response = self.get(url)
112 0baa1e3d Buildbot
        self.assertItemNotFound(response)
113 039e3e61 Christos Stavrakakis
114 0baa1e3d Buildbot
    def test_get_network(self):
115 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory()
116 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
117 0baa1e3d Buildbot
        response = self.get(url, user=test_net.userid)
118 0baa1e3d Buildbot
        # validate response
119 0baa1e3d Buildbot
        res = json.loads(response.content)
120 0baa1e3d Buildbot
        net = res['network']
121 0baa1e3d Buildbot
        keys = net.keys()
122 0baa1e3d Buildbot
        must_send = set(["status", "subnets", "name", "admin_state_up",
123 0baa1e3d Buildbot
                        "tenant_id", "id"])
124 0baa1e3d Buildbot
        self.assertEqual(set(keys).issuperset(must_send), True)
125 0baa1e3d Buildbot
        self.assertEqual(response.status_code, 200)
126 0baa1e3d Buildbot
127 0baa1e3d Buildbot
    def test_get_deleted_network(self):
128 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory(flavor="CUSTOM")
129 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
130 0baa1e3d Buildbot
        self.delete(url, user=test_net.userid)
131 0baa1e3d Buildbot
        response = self.get(url, user=test_net.userid)
132 5b8a9240 Christos Stavrakakis
        self.assertEqual(response.status_code, 200)
133 039e3e61 Christos Stavrakakis
134 0baa1e3d Buildbot
    def test_delete_unfound_network(self):
135 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, "123")
136 0baa1e3d Buildbot
        response = self.delete(url)
137 0baa1e3d Buildbot
        self.assertItemNotFound(response)
138 039e3e61 Christos Stavrakakis
139 0baa1e3d Buildbot
    def test_delete_network(self):
140 4911365b Christos Stavrakakis
        test_net = dbmf.NetworkFactory(flavor="CUSTOM")
141 5b8a9240 Christos Stavrakakis
        dbmf.IPv4SubnetFactory(network=test_net)
142 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
143 0baa1e3d Buildbot
        response = self.delete(url, user=test_net.userid)
144 0baa1e3d Buildbot
        self.assertEqual(response.status_code, 204)
145 5b8a9240 Christos Stavrakakis
        # But not the public network!!
146 5b8a9240 Christos Stavrakakis
        test_net.public = True
147 5b8a9240 Christos Stavrakakis
        test_net.save()
148 5b8a9240 Christos Stavrakakis
        response = self.delete(url, user=test_net.userid)
149 5b8a9240 Christos Stavrakakis
        self.assertFault(response, 403, 'forbidden')
150 d368ec0c Christos Stavrakakis
151 0baa1e3d Buildbot
    def test_delete_network_in_use(self):
152 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory()
153 5b8a9240 Christos Stavrakakis
        dbmf.NetworkInterfaceFactory(network=test_net)
154 5b8a9240 Christos Stavrakakis
        url = join_urls(NETWORKS_URL, str(test_net.id))
155 5b8a9240 Christos Stavrakakis
        response = self.delete(url, user=test_net.userid)
156 5b8a9240 Christos Stavrakakis
        self.assertEqual(response.status_code, 409)
157 5b8a9240 Christos Stavrakakis
158 5b8a9240 Christos Stavrakakis
    def test_delete_network_with_floating_ips(self):
159 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory()
160 5b8a9240 Christos Stavrakakis
        dbmf.IPv4AddressFactory(network=test_net, floating_ip=True, nic=None)
161 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
162 0baa1e3d Buildbot
        response = self.delete(url, user=test_net.userid)
163 0baa1e3d Buildbot
        self.assertEqual(response.status_code, 409)
164 9ae613af Christos Stavrakakis
165 0baa1e3d Buildbot
    def test_put_unfound_network(self):
166 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, "123")
167 0baa1e3d Buildbot
        response = self.delete(url)
168 0baa1e3d Buildbot
        self.assertItemNotFound(response)
169 9ae613af Christos Stavrakakis
170 0baa1e3d Buildbot
    def test_put_network_wrong_data(self):
171 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory()
172 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
173 9ae613af Christos Stavrakakis
        request = {
174 0baa1e3d Buildbot
            "network": {
175 0baa1e3d Buildbot
                "wrong_field": "new_name"}
176 9ae613af Christos Stavrakakis
        }
177 0baa1e3d Buildbot
        response = self.put(url, params=json.dumps(request),
178 0baa1e3d Buildbot
                            user=test_net.userid)
179 a3accf03 Georgios D. Tsoukalas
        self.assertEqual(response.status_code, 400)
180 16437e4d Kostas Papadimitriou
181 0baa1e3d Buildbot
    def test_put_no_data(self):
182 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory()
183 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
184 0baa1e3d Buildbot
        response = self.put(url, params="", user=test_net.userid)
185 0baa1e3d Buildbot
        self.assertEqual(response.status_code, 400)
186 5b8a9240 Christos Stavrakakis
187 5b8a9240 Christos Stavrakakis
    def test_rename_network(self):
188 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory(name="foo")
189 5b8a9240 Christos Stavrakakis
        url = join_urls(NETWORKS_URL, str(test_net.id))
190 5b8a9240 Christos Stavrakakis
        request = {'network': {'name': "new_name"}}
191 5b8a9240 Christos Stavrakakis
        response = self.put(url, test_net.userid, json.dumps(request), 'json')
192 5b8a9240 Christos Stavrakakis
        self.assertEqual(response.status_code, 200)
193 5b8a9240 Christos Stavrakakis
        self.assertEqual(Network.objects.get(id=test_net.id).name, "new_name")
194 5b8a9240 Christos Stavrakakis
        # test if server deleted
195 5b8a9240 Christos Stavrakakis
        test_net.deleted = True
196 5b8a9240 Christos Stavrakakis
        test_net.save()
197 5b8a9240 Christos Stavrakakis
        response = self.put(url, test_net.userid, json.dumps(request), 'json')
198 5b8a9240 Christos Stavrakakis
        self.assertBadRequest(response)
199 5b8a9240 Christos Stavrakakis
        test_net.deleted = False
200 5b8a9240 Christos Stavrakakis
        test_net.public = True
201 5b8a9240 Christos Stavrakakis
        test_net.save()
202 5b8a9240 Christos Stavrakakis
        response = self.put(url, test_net.userid, json.dumps(request), 'json')
203 5b8a9240 Christos Stavrakakis
        self.assertFault(response, 403, 'forbidden')
204 5b8a9240 Christos Stavrakakis
205 5b8a9240 Christos Stavrakakis
    def test_method_not_allowed(self, *args):
206 5b8a9240 Christos Stavrakakis
        # /networks/ allows only POST, GET
207 5b8a9240 Christos Stavrakakis
        response = self.put(NETWORKS_URL, '', '')
208 5b8a9240 Christos Stavrakakis
        self.assertMethodNotAllowed(response)
209 5b8a9240 Christos Stavrakakis
        response = self.delete(NETWORKS_URL)
210 5b8a9240 Christos Stavrakakis
        self.assertMethodNotAllowed(response)
211 5b8a9240 Christos Stavrakakis
212 5b8a9240 Christos Stavrakakis
        # /networks/<srvid>/ allows only GET, PUT, DELETE
213 5b8a9240 Christos Stavrakakis
        url = join_urls(NETWORKS_URL, "42")
214 5b8a9240 Christos Stavrakakis
        response = self.post(url)
215 5b8a9240 Christos Stavrakakis
        self.assertMethodNotAllowed(response)
216 5b8a9240 Christos Stavrakakis
217 5b8a9240 Christos Stavrakakis
218 5b8a9240 Christos Stavrakakis
#class NetworkNICsAPITest(BaseAPITest):
219 5b8a9240 Christos Stavrakakis
#    def test_get_network_building_nics(self, mrapi):
220 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory()
221 5b8a9240 Christos Stavrakakis
#        machine = dbmf.VirtualMachineFactory(userid=net.userid)
222 5b8a9240 Christos Stavrakakis
#        dbmf.NetworkInterfaceFactory(network=net, machine=machine,
223 5b8a9240 Christos Stavrakakis
#                                     state="BUILDING")
224 5b8a9240 Christos Stavrakakis
#        response = self.myget('networks/%d' % net.id, net.userid)
225 5b8a9240 Christos Stavrakakis
#        self.assertSuccess(response)
226 5b8a9240 Christos Stavrakakis
#        api_net = json.loads(response.content)["network"]
227 5b8a9240 Christos Stavrakakis
#        self.assertEqual(len(api_net["attachments"]), 0)
228 5b8a9240 Christos Stavrakakis
#
229 5b8a9240 Christos Stavrakakis
#
230 5b8a9240 Christos Stavrakakis
#    def test_add_nic(self, mrapi):
231 5b8a9240 Christos Stavrakakis
#        user = 'userr'
232 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
233 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
234 5b8a9240 Christos Stavrakakis
#        mrapi().ModifyInstance.return_value = 1
235 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serverRef': vm.id}}
236 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
237 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
238 5b8a9240 Christos Stavrakakis
#        self.assertEqual(response.status_code, 202)
239 5b8a9240 Christos Stavrakakis
#
240 5b8a9240 Christos Stavrakakis
#    def test_add_nic_to_deleted_network(self, mrapi):
241 5b8a9240 Christos Stavrakakis
#        user = 'userr'
242 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user,
243 5b8a9240 Christos Stavrakakis
#                                            operstate="ACTIVE")
244 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user,
245 5b8a9240 Christos Stavrakakis
#                                      deleted=True)
246 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serverRef': vm.id}}
247 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
248 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
249 5b8a9240 Christos Stavrakakis
#        self.assertBadRequest(response)
250 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
251 5b8a9240 Christos Stavrakakis
#
252 5b8a9240 Christos Stavrakakis
#    def test_add_nic_to_public_network(self, mrapi):
253 5b8a9240 Christos Stavrakakis
#        user = 'userr'
254 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
255 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user, public=True)
256 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serverRef': vm.id}}
257 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
258 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
259 5b8a9240 Christos Stavrakakis
#        self.assertFault(response, 403, 'forbidden')
260 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
261 5b8a9240 Christos Stavrakakis
#
262 5b8a9240 Christos Stavrakakis
#    def test_add_nic_malformed_1(self, mrapi):
263 5b8a9240 Christos Stavrakakis
#        user = 'userr'
264 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
265 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
266 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serveRef': vm.id}}
267 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
268 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
269 5b8a9240 Christos Stavrakakis
#        self.assertBadRequest(response)
270 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
271 5b8a9240 Christos Stavrakakis
#
272 5b8a9240 Christos Stavrakakis
#    def test_add_nic_malformed_2(self, mrapi):
273 5b8a9240 Christos Stavrakakis
#        user = 'userr'
274 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
275 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
276 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serveRef': [vm.id, 22]}}
277 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
278 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
279 5b8a9240 Christos Stavrakakis
#        self.assertBadRequest(response)
280 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
281 5b8a9240 Christos Stavrakakis
#
282 5b8a9240 Christos Stavrakakis
#    def test_add_nic_not_active(self, mrapi):
283 5b8a9240 Christos Stavrakakis
#        """Test connecting VM to non-active network"""
284 5b8a9240 Christos Stavrakakis
#        user = 'dummy'
285 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
286 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='PENDING', subnet='10.0.0.0/31',
287 5b8a9240 Christos Stavrakakis
#                                      userid=user)
288 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serverRef': vm.id}}
289 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
290 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
291 5b8a9240 Christos Stavrakakis
#        # Test that returns BuildInProgress
292 5b8a9240 Christos Stavrakakis
#        self.assertEqual(response.status_code, 409)
293 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
294 5b8a9240 Christos Stavrakakis
#
295 5b8a9240 Christos Stavrakakis
#    def test_add_nic_full_network(self, mrapi):
296 5b8a9240 Christos Stavrakakis
#        """Test connecting VM to a full network"""
297 5b8a9240 Christos Stavrakakis
#        user = 'userr'
298 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user,
299 5b8a9240 Christos Stavrakakis
#                                            operstate="STARTED")
300 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', subnet='10.0.0.0/30',
301 5b8a9240 Christos Stavrakakis
#                                      userid=user, dhcp=True)
302 5b8a9240 Christos Stavrakakis
#        pool = net.get_pool()
303 5b8a9240 Christos Stavrakakis
#        while not pool.empty():
304 5b8a9240 Christos Stavrakakis
#            pool.get()
305 5b8a9240 Christos Stavrakakis
#        pool.save()
306 5b8a9240 Christos Stavrakakis
#        pool = net.get_pool()
307 5b8a9240 Christos Stavrakakis
#        self.assertTrue(pool.empty())
308 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serverRef': vm.id}}
309 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
310 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
311 5b8a9240 Christos Stavrakakis
#        # Test that returns OverLimit
312 5b8a9240 Christos Stavrakakis
#        self.assertEqual(response.status_code, 413)
313 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
314 5b8a9240 Christos Stavrakakis
#
315 5b8a9240 Christos Stavrakakis
#    def test_remove_nic(self, mrapi):
316 5b8a9240 Christos Stavrakakis
#        user = 'userr'
317 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user,
318 5b8a9240 Christos Stavrakakis
#                                            operstate="ACTIVE")
319 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
320 5b8a9240 Christos Stavrakakis
#        nic = dbmf.NetworkInterfaceFactory(machine=vm, network=net)
321 5b8a9240 Christos Stavrakakis
#        mrapi().ModifyInstance.return_value = 1
322 5b8a9240 Christos Stavrakakis
#        request = {'remove': {'attachment': "%s" % nic.id}}
323 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
324 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
325 5b8a9240 Christos Stavrakakis
#        self.assertEqual(response.status_code, 202)
326 5b8a9240 Christos Stavrakakis
#        vm.task = None
327 5b8a9240 Christos Stavrakakis
#        vm.task_job_id = None
328 5b8a9240 Christos Stavrakakis
#        vm.save()
329 5b8a9240 Christos Stavrakakis
#
330 5b8a9240 Christos Stavrakakis
#    def test_remove_nic_malformed(self, mrapi):
331 5b8a9240 Christos Stavrakakis
#        user = 'userr'
332 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
333 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
334 5b8a9240 Christos Stavrakakis
#        nic = dbmf.NetworkInterfaceFactory(machine=vm, network=net)
335 5b8a9240 Christos Stavrakakis
#        request = {'remove': {'att234achment': '%s' % nic.id}}
336 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
337 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
338 5b8a9240 Christos Stavrakakis
#        self.assertBadRequest(response)
339 5b8a9240 Christos Stavrakakis
#
340 5b8a9240 Christos Stavrakakis
#    def test_remove_nic_malformed_2(self, mrapi):
341 5b8a9240 Christos Stavrakakis
#        user = 'userr'
342 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
343 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
344 5b8a9240 Christos Stavrakakis
#        request = {'remove': {'attachment': 'nic-%s' % vm.id}}
345 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
346 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
347 5b8a9240 Christos Stavrakakis
#        self.assertBadRequest(response)