Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / api / tests / networks.py @ 3d870b05

History | View | Annotate | Download (15.4 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 ba777b02 Giorgos Korfiatis
from synnefo.db.models import Network, QuotaHolderSerial
41 5b8a9240 Christos Stavrakakis
from django.conf import settings
42 7d2fdab9 Georgios D. Tsoukalas
43 cdd6fc06 Christos Stavrakakis
NETWORK_URL = get_service_path(cyclades_services, 'network',
44 5b8a9240 Christos Stavrakakis
                               version='v2.0')
45 cdd6fc06 Christos Stavrakakis
NETWORKS_URL = join_urls(NETWORK_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 3d870b05 Dionysis Grigoropoulos
    def test_invalid_create2(self):
72 3d870b05 Dionysis Grigoropoulos
        """Test invalid name type"""
73 3d870b05 Dionysis Grigoropoulos
        request = {
74 3d870b05 Dionysis Grigoropoulos
            "network": {
75 3d870b05 Dionysis Grigoropoulos
                "type": "MAC_FILTERED",
76 3d870b05 Dionysis Grigoropoulos
                "name": ["Test"]
77 3d870b05 Dionysis Grigoropoulos
            }
78 3d870b05 Dionysis Grigoropoulos
        }
79 3d870b05 Dionysis Grigoropoulos
        response = self.post(NETWORKS_URL, params=json.dumps(request))
80 3d870b05 Dionysis Grigoropoulos
        code = response.status_code
81 3d870b05 Dionysis Grigoropoulos
        self.assertBarRequest(response)
82 3d870b05 Dionysis Grigoropoulos
83 5b8a9240 Christos Stavrakakis
    def test_create(self):
84 039e3e61 Christos Stavrakakis
        request = {
85 0baa1e3d Buildbot
            "network": {
86 0baa1e3d Buildbot
                "name": "sample_network",
87 0baa1e3d Buildbot
                "type": "MAC_FILTERED"
88 5b8a9240 Christos Stavrakakis
            }
89 4e1133ab Christos Stavrakakis
        }
90 0baa1e3d Buildbot
        response = self.post(NETWORKS_URL, params=json.dumps(request))
91 0baa1e3d Buildbot
        code = response.status_code
92 5b8a9240 Christos Stavrakakis
        self.assertEqual(code, 503)  # No MAC prefix pool
93 5b8a9240 Christos Stavrakakis
        dbmf.MacPrefixPoolTableFactory()
94 5b8a9240 Christos Stavrakakis
        response = self.post(NETWORKS_URL, params=json.dumps(request))
95 5b8a9240 Christos Stavrakakis
        code = response.status_code
96 5b8a9240 Christos Stavrakakis
        self.assertEqual(code, 201)
97 5b8a9240 Christos Stavrakakis
        res = json.loads(response.content)
98 5b8a9240 Christos Stavrakakis
        self.assertEqual(res["network"]["name"], "sample_network")
99 5b8a9240 Christos Stavrakakis
100 5b8a9240 Christos Stavrakakis
        # TEST QUOTAS!!!
101 5b8a9240 Christos Stavrakakis
        name, args, kwargs =\
102 5b8a9240 Christos Stavrakakis
            self.mocked_quotaholder.issue_one_commission.mock_calls[0]
103 55b3d06b Christos Stavrakakis
        commission_resources = args[2]
104 5b8a9240 Christos Stavrakakis
        self.assertEqual(commission_resources, {"cyclades.network.private": 1})
105 5b8a9240 Christos Stavrakakis
        name, args, kwargs =\
106 5b8a9240 Christos Stavrakakis
            self.mocked_quotaholder.resolve_commissions.mock_calls[0]
107 ba777b02 Giorgos Korfiatis
        serial = QuotaHolderSerial.objects.order_by("-serial")[0]
108 55b3d06b Christos Stavrakakis
        accepted_serials = args[0]
109 55b3d06b Christos Stavrakakis
        rejected_serials = args[1]
110 ba777b02 Giorgos Korfiatis
        self.assertEqual(accepted_serials, [serial.serial])
111 5b8a9240 Christos Stavrakakis
        self.assertEqual(rejected_serials, [])
112 5b8a9240 Christos Stavrakakis
113 5b8a9240 Christos Stavrakakis
        # test no name
114 5b8a9240 Christos Stavrakakis
        request["network"].pop("name")
115 5b8a9240 Christos Stavrakakis
        response = self.post(NETWORKS_URL, params=json.dumps(request))
116 5b8a9240 Christos Stavrakakis
        code = response.status_code
117 0baa1e3d Buildbot
        self.assertEqual(code, 201)
118 5b8a9240 Christos Stavrakakis
        res = json.loads(response.content)
119 5b8a9240 Christos Stavrakakis
        self.assertEqual(res["network"]["name"], "")
120 039e3e61 Christos Stavrakakis
121 0baa1e3d Buildbot
    def test_get_unfound_network(self):
122 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, "123")
123 0baa1e3d Buildbot
        response = self.get(url)
124 0baa1e3d Buildbot
        self.assertItemNotFound(response)
125 039e3e61 Christos Stavrakakis
126 0baa1e3d Buildbot
    def test_get_network(self):
127 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory()
128 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
129 0baa1e3d Buildbot
        response = self.get(url, user=test_net.userid)
130 0baa1e3d Buildbot
        # validate response
131 0baa1e3d Buildbot
        res = json.loads(response.content)
132 0baa1e3d Buildbot
        net = res['network']
133 0baa1e3d Buildbot
        keys = net.keys()
134 0baa1e3d Buildbot
        must_send = set(["status", "subnets", "name", "admin_state_up",
135 0baa1e3d Buildbot
                        "tenant_id", "id"])
136 0baa1e3d Buildbot
        self.assertEqual(set(keys).issuperset(must_send), True)
137 0baa1e3d Buildbot
        self.assertEqual(response.status_code, 200)
138 0baa1e3d Buildbot
139 0baa1e3d Buildbot
    def test_get_deleted_network(self):
140 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory(flavor="CUSTOM")
141 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
142 0baa1e3d Buildbot
        self.delete(url, user=test_net.userid)
143 0baa1e3d Buildbot
        response = self.get(url, user=test_net.userid)
144 5b8a9240 Christos Stavrakakis
        self.assertEqual(response.status_code, 200)
145 039e3e61 Christos Stavrakakis
146 0baa1e3d Buildbot
    def test_delete_unfound_network(self):
147 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, "123")
148 0baa1e3d Buildbot
        response = self.delete(url)
149 0baa1e3d Buildbot
        self.assertItemNotFound(response)
150 039e3e61 Christos Stavrakakis
151 0baa1e3d Buildbot
    def test_delete_network(self):
152 4911365b Christos Stavrakakis
        test_net = dbmf.NetworkFactory(flavor="CUSTOM")
153 5b8a9240 Christos Stavrakakis
        dbmf.IPv4SubnetFactory(network=test_net)
154 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
155 0baa1e3d Buildbot
        response = self.delete(url, user=test_net.userid)
156 0baa1e3d Buildbot
        self.assertEqual(response.status_code, 204)
157 5b8a9240 Christos Stavrakakis
        # But not the public network!!
158 5b8a9240 Christos Stavrakakis
        test_net.public = True
159 5b8a9240 Christos Stavrakakis
        test_net.save()
160 5b8a9240 Christos Stavrakakis
        response = self.delete(url, user=test_net.userid)
161 5b8a9240 Christos Stavrakakis
        self.assertFault(response, 403, 'forbidden')
162 d368ec0c Christos Stavrakakis
163 0baa1e3d Buildbot
    def test_delete_network_in_use(self):
164 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory()
165 5b8a9240 Christos Stavrakakis
        dbmf.NetworkInterfaceFactory(network=test_net)
166 5b8a9240 Christos Stavrakakis
        url = join_urls(NETWORKS_URL, str(test_net.id))
167 5b8a9240 Christos Stavrakakis
        response = self.delete(url, user=test_net.userid)
168 5b8a9240 Christos Stavrakakis
        self.assertEqual(response.status_code, 409)
169 5b8a9240 Christos Stavrakakis
170 5b8a9240 Christos Stavrakakis
    def test_delete_network_with_floating_ips(self):
171 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory()
172 5b8a9240 Christos Stavrakakis
        dbmf.IPv4AddressFactory(network=test_net, floating_ip=True, nic=None)
173 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
174 0baa1e3d Buildbot
        response = self.delete(url, user=test_net.userid)
175 0baa1e3d Buildbot
        self.assertEqual(response.status_code, 409)
176 9ae613af Christos Stavrakakis
177 0baa1e3d Buildbot
    def test_put_unfound_network(self):
178 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, "123")
179 0baa1e3d Buildbot
        response = self.delete(url)
180 0baa1e3d Buildbot
        self.assertItemNotFound(response)
181 9ae613af Christos Stavrakakis
182 0baa1e3d Buildbot
    def test_put_network_wrong_data(self):
183 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory()
184 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
185 9ae613af Christos Stavrakakis
        request = {
186 0baa1e3d Buildbot
            "network": {
187 0baa1e3d Buildbot
                "wrong_field": "new_name"}
188 9ae613af Christos Stavrakakis
        }
189 0baa1e3d Buildbot
        response = self.put(url, params=json.dumps(request),
190 0baa1e3d Buildbot
                            user=test_net.userid)
191 a3accf03 Georgios D. Tsoukalas
        self.assertEqual(response.status_code, 400)
192 16437e4d Kostas Papadimitriou
193 0baa1e3d Buildbot
    def test_put_no_data(self):
194 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory()
195 0baa1e3d Buildbot
        url = join_urls(NETWORKS_URL, str(test_net.id))
196 0baa1e3d Buildbot
        response = self.put(url, params="", user=test_net.userid)
197 0baa1e3d Buildbot
        self.assertEqual(response.status_code, 400)
198 5b8a9240 Christos Stavrakakis
199 5b8a9240 Christos Stavrakakis
    def test_rename_network(self):
200 5b8a9240 Christos Stavrakakis
        test_net = dbmf.NetworkFactory(name="foo")
201 5b8a9240 Christos Stavrakakis
        url = join_urls(NETWORKS_URL, str(test_net.id))
202 5b8a9240 Christos Stavrakakis
        request = {'network': {'name': "new_name"}}
203 5b8a9240 Christos Stavrakakis
        response = self.put(url, test_net.userid, json.dumps(request), 'json')
204 5b8a9240 Christos Stavrakakis
        self.assertEqual(response.status_code, 200)
205 5b8a9240 Christos Stavrakakis
        self.assertEqual(Network.objects.get(id=test_net.id).name, "new_name")
206 5b8a9240 Christos Stavrakakis
        # test if server deleted
207 5b8a9240 Christos Stavrakakis
        test_net.deleted = True
208 5b8a9240 Christos Stavrakakis
        test_net.save()
209 5b8a9240 Christos Stavrakakis
        response = self.put(url, test_net.userid, json.dumps(request), 'json')
210 5b8a9240 Christos Stavrakakis
        self.assertBadRequest(response)
211 5b8a9240 Christos Stavrakakis
        test_net.deleted = False
212 5b8a9240 Christos Stavrakakis
        test_net.public = True
213 5b8a9240 Christos Stavrakakis
        test_net.save()
214 5b8a9240 Christos Stavrakakis
        response = self.put(url, test_net.userid, json.dumps(request), 'json')
215 5b8a9240 Christos Stavrakakis
        self.assertFault(response, 403, 'forbidden')
216 5b8a9240 Christos Stavrakakis
217 5b8a9240 Christos Stavrakakis
    def test_method_not_allowed(self, *args):
218 5b8a9240 Christos Stavrakakis
        # /networks/ allows only POST, GET
219 5b8a9240 Christos Stavrakakis
        response = self.put(NETWORKS_URL, '', '')
220 5b8a9240 Christos Stavrakakis
        self.assertMethodNotAllowed(response)
221 5b8a9240 Christos Stavrakakis
        response = self.delete(NETWORKS_URL)
222 5b8a9240 Christos Stavrakakis
        self.assertMethodNotAllowed(response)
223 5b8a9240 Christos Stavrakakis
224 5b8a9240 Christos Stavrakakis
        # /networks/<srvid>/ allows only GET, PUT, DELETE
225 5b8a9240 Christos Stavrakakis
        url = join_urls(NETWORKS_URL, "42")
226 5b8a9240 Christos Stavrakakis
        response = self.post(url)
227 5b8a9240 Christos Stavrakakis
        self.assertMethodNotAllowed(response)
228 5b8a9240 Christos Stavrakakis
229 5b8a9240 Christos Stavrakakis
230 5b8a9240 Christos Stavrakakis
#class NetworkNICsAPITest(BaseAPITest):
231 5b8a9240 Christos Stavrakakis
#    def test_get_network_building_nics(self, mrapi):
232 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory()
233 5b8a9240 Christos Stavrakakis
#        machine = dbmf.VirtualMachineFactory(userid=net.userid)
234 5b8a9240 Christos Stavrakakis
#        dbmf.NetworkInterfaceFactory(network=net, machine=machine,
235 5b8a9240 Christos Stavrakakis
#                                     state="BUILDING")
236 5b8a9240 Christos Stavrakakis
#        response = self.myget('networks/%d' % net.id, net.userid)
237 5b8a9240 Christos Stavrakakis
#        self.assertSuccess(response)
238 5b8a9240 Christos Stavrakakis
#        api_net = json.loads(response.content)["network"]
239 5b8a9240 Christos Stavrakakis
#        self.assertEqual(len(api_net["attachments"]), 0)
240 5b8a9240 Christos Stavrakakis
#
241 5b8a9240 Christos Stavrakakis
#
242 5b8a9240 Christos Stavrakakis
#    def test_add_nic(self, mrapi):
243 5b8a9240 Christos Stavrakakis
#        user = 'userr'
244 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
245 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
246 5b8a9240 Christos Stavrakakis
#        mrapi().ModifyInstance.return_value = 1
247 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serverRef': vm.id}}
248 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
249 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
250 5b8a9240 Christos Stavrakakis
#        self.assertEqual(response.status_code, 202)
251 5b8a9240 Christos Stavrakakis
#
252 5b8a9240 Christos Stavrakakis
#    def test_add_nic_to_deleted_network(self, mrapi):
253 5b8a9240 Christos Stavrakakis
#        user = 'userr'
254 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user,
255 5b8a9240 Christos Stavrakakis
#                                            operstate="ACTIVE")
256 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user,
257 5b8a9240 Christos Stavrakakis
#                                      deleted=True)
258 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serverRef': vm.id}}
259 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
260 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
261 5b8a9240 Christos Stavrakakis
#        self.assertBadRequest(response)
262 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
263 5b8a9240 Christos Stavrakakis
#
264 5b8a9240 Christos Stavrakakis
#    def test_add_nic_to_public_network(self, mrapi):
265 5b8a9240 Christos Stavrakakis
#        user = 'userr'
266 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
267 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user, public=True)
268 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serverRef': vm.id}}
269 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
270 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
271 5b8a9240 Christos Stavrakakis
#        self.assertFault(response, 403, 'forbidden')
272 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
273 5b8a9240 Christos Stavrakakis
#
274 5b8a9240 Christos Stavrakakis
#    def test_add_nic_malformed_1(self, mrapi):
275 5b8a9240 Christos Stavrakakis
#        user = 'userr'
276 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
277 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
278 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serveRef': vm.id}}
279 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
280 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
281 5b8a9240 Christos Stavrakakis
#        self.assertBadRequest(response)
282 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
283 5b8a9240 Christos Stavrakakis
#
284 5b8a9240 Christos Stavrakakis
#    def test_add_nic_malformed_2(self, mrapi):
285 5b8a9240 Christos Stavrakakis
#        user = 'userr'
286 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
287 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
288 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serveRef': [vm.id, 22]}}
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
#        self.assertBadRequest(response)
292 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
293 5b8a9240 Christos Stavrakakis
#
294 5b8a9240 Christos Stavrakakis
#    def test_add_nic_not_active(self, mrapi):
295 5b8a9240 Christos Stavrakakis
#        """Test connecting VM to non-active network"""
296 5b8a9240 Christos Stavrakakis
#        user = 'dummy'
297 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
298 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='PENDING', subnet='10.0.0.0/31',
299 5b8a9240 Christos Stavrakakis
#                                      userid=user)
300 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serverRef': vm.id}}
301 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
302 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
303 5b8a9240 Christos Stavrakakis
#        # Test that returns BuildInProgress
304 5b8a9240 Christos Stavrakakis
#        self.assertEqual(response.status_code, 409)
305 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
306 5b8a9240 Christos Stavrakakis
#
307 5b8a9240 Christos Stavrakakis
#    def test_add_nic_full_network(self, mrapi):
308 5b8a9240 Christos Stavrakakis
#        """Test connecting VM to a full network"""
309 5b8a9240 Christos Stavrakakis
#        user = 'userr'
310 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user,
311 5b8a9240 Christos Stavrakakis
#                                            operstate="STARTED")
312 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', subnet='10.0.0.0/30',
313 5b8a9240 Christos Stavrakakis
#                                      userid=user, dhcp=True)
314 5b8a9240 Christos Stavrakakis
#        pool = net.get_pool()
315 5b8a9240 Christos Stavrakakis
#        while not pool.empty():
316 5b8a9240 Christos Stavrakakis
#            pool.get()
317 5b8a9240 Christos Stavrakakis
#        pool.save()
318 5b8a9240 Christos Stavrakakis
#        pool = net.get_pool()
319 5b8a9240 Christos Stavrakakis
#        self.assertTrue(pool.empty())
320 5b8a9240 Christos Stavrakakis
#        request = {'add': {'serverRef': vm.id}}
321 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
322 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
323 5b8a9240 Christos Stavrakakis
#        # Test that returns OverLimit
324 5b8a9240 Christos Stavrakakis
#        self.assertEqual(response.status_code, 413)
325 5b8a9240 Christos Stavrakakis
#        self.assertFalse(mrapi.called)
326 5b8a9240 Christos Stavrakakis
#
327 5b8a9240 Christos Stavrakakis
#    def test_remove_nic(self, mrapi):
328 5b8a9240 Christos Stavrakakis
#        user = 'userr'
329 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user,
330 5b8a9240 Christos Stavrakakis
#                                            operstate="ACTIVE")
331 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
332 5b8a9240 Christos Stavrakakis
#        nic = dbmf.NetworkInterfaceFactory(machine=vm, network=net)
333 5b8a9240 Christos Stavrakakis
#        mrapi().ModifyInstance.return_value = 1
334 5b8a9240 Christos Stavrakakis
#        request = {'remove': {'attachment': "%s" % nic.id}}
335 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
336 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
337 5b8a9240 Christos Stavrakakis
#        self.assertEqual(response.status_code, 202)
338 5b8a9240 Christos Stavrakakis
#        vm.task = None
339 5b8a9240 Christos Stavrakakis
#        vm.task_job_id = None
340 5b8a9240 Christos Stavrakakis
#        vm.save()
341 5b8a9240 Christos Stavrakakis
#
342 5b8a9240 Christos Stavrakakis
#    def test_remove_nic_malformed(self, mrapi):
343 5b8a9240 Christos Stavrakakis
#        user = 'userr'
344 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
345 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
346 5b8a9240 Christos Stavrakakis
#        nic = dbmf.NetworkInterfaceFactory(machine=vm, network=net)
347 5b8a9240 Christos Stavrakakis
#        request = {'remove': {'att234achment': '%s' % nic.id}}
348 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
349 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
350 5b8a9240 Christos Stavrakakis
#        self.assertBadRequest(response)
351 5b8a9240 Christos Stavrakakis
#
352 5b8a9240 Christos Stavrakakis
#    def test_remove_nic_malformed_2(self, mrapi):
353 5b8a9240 Christos Stavrakakis
#        user = 'userr'
354 5b8a9240 Christos Stavrakakis
#        vm = dbmf.VirtualMachineFactory(name='yo', userid=user)
355 5b8a9240 Christos Stavrakakis
#        net = dbmf.NetworkFactory(state='ACTIVE', userid=user)
356 5b8a9240 Christos Stavrakakis
#        request = {'remove': {'attachment': 'nic-%s' % vm.id}}
357 5b8a9240 Christos Stavrakakis
#        response = self.mypost('networks/%d/action' % net.id,
358 5b8a9240 Christos Stavrakakis
#                               net.userid, json.dumps(request), 'json')
359 5b8a9240 Christos Stavrakakis
#        self.assertBadRequest(response)