summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEldar Nugaev <reldan@oscloud.ru>2011-06-25 03:05:09 +0400
committerEldar Nugaev <reldan@oscloud.ru>2011-06-25 03:05:09 +0400
commit5e4d90b33ddb993294232eea168a768486ba0bf4 (patch)
tree779fa6ddbf949a7b322919c0102c4e7691aa7771
parent62018b1abaa007f8f530ba08d74413c59e2814cb (diff)
downloadnova-5e4d90b33ddb993294232eea168a768486ba0bf4.tar.gz
nova-5e4d90b33ddb993294232eea168a768486ba0bf4.tar.xz
nova-5e4d90b33ddb993294232eea168a768486ba0bf4.zip
added disassociate method to tests
-rw-r--r--nova/api/openstack/contrib/floating_ips.py12
-rw-r--r--nova/db/api.py2
-rw-r--r--nova/db/sqlalchemy/api.py2
-rw-r--r--nova/exception.py2
-rw-r--r--nova/tests/api/openstack/contrib/test_floating_ips.py28
5 files changed, 34 insertions, 12 deletions
diff --git a/nova/api/openstack/contrib/floating_ips.py b/nova/api/openstack/contrib/floating_ips.py
index 95502a5c5..467b46712 100644
--- a/nova/api/openstack/contrib/floating_ips.py
+++ b/nova/api/openstack/contrib/floating_ips.py
@@ -91,7 +91,7 @@ class FloatingIPController(object):
raise
return {'allocated': {
- "id" : ip['id'],
+ "id": ip['id'],
"floating_ip": ip['address']}}
def delete(self, req, id):
@@ -126,15 +126,17 @@ class FloatingIPController(object):
def disassociate(self, req, id, body):
""" POST /floating_ips/{id}/disassociate """
context = req.environ['nova.context']
-
- floating_ip = self._get_ip_by_id(context, id)
+ floating_ip = self.network_api.get(context, id)
+ address = floating_ip['address']
+ fixed_ip = floating_ip['fixed_ip']['address']
try:
- self.network_api.disassociate_floating_ip(context, floating_ip)
+ self.network_api.disassociate_floating_ip(context, address)
except rpc.RemoteError:
raise
- return {'disassociated': floating_ip}
+ return {'disassociated': {'floating_ip': address,
+ 'fixed_ip': fixed_ip}}
def _get_ip_by_id(self, context, value):
"""Checks that value is id and then returns its address."""
diff --git a/nova/db/api.py b/nova/db/api.py
index 8d4b7c8b7..c6ba24478 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -291,10 +291,12 @@ def floating_ip_get_by_address(context, address):
"""Get a floating ip by address or raise if it doesn't exist."""
return IMPL.floating_ip_get_by_address(context, address)
+
def floating_ip_get_by_ip(context, ip):
"""Get a floating ip by floating address."""
return IMPL.floating_ip_get_by_ip(context, ip)
+
def floating_ip_update(context, address, values):
"""Update a floating ip by address or raise if it doesn't exist."""
return IMPL.floating_ip_update(context, address, values)
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 7735ec8c2..87f112588 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -609,6 +609,7 @@ def floating_ip_get_by_address(context, address, session=None):
return result
+
@require_context
def floating_ip_get_by_ip(context, ip, session=None):
if not session:
@@ -624,6 +625,7 @@ def floating_ip_get_by_ip(context, ip, session=None):
return result
+
@require_context
def floating_ip_update(context, address, values):
session = get_session()
diff --git a/nova/exception.py b/nova/exception.py
index 64abff9af..8230c2b26 100644
--- a/nova/exception.py
+++ b/nova/exception.py
@@ -359,9 +359,11 @@ class DatastoreNotFound(NotFound):
class NoFixedIpsFoundForInstance(NotFound):
message = _("Instance %(instance_id)s has zero fixed ips.")
+
class FloatingIpNotDefined(NotFound):
message = _("Floating ip %(floating_ip)s not found")
+
class FloatingIpNotFound(NotFound):
message = _("Floating ip not found for fixed address %(fixed_ip)s.")
diff --git a/nova/tests/api/openstack/contrib/test_floating_ips.py b/nova/tests/api/openstack/contrib/test_floating_ips.py
index 1f2012ec7..4e26994dd 100644
--- a/nova/tests/api/openstack/contrib/test_floating_ips.py
+++ b/nova/tests/api/openstack/contrib/test_floating_ips.py
@@ -27,8 +27,10 @@ from nova.tests.api.openstack import fakes
from nova.api.openstack.contrib.floating_ips import FloatingIPController
from nova.api.openstack.contrib.floating_ips import _translate_floating_ip_view
+
def network_api_get(self, context, id):
- return {'id': 1, 'address': '10.10.10.10'}
+ return {'id': 1, 'address': '10.10.10.10',
+ 'fixed_ip': {'address': '11.0.0.1'}}
def network_api_list(self, context):
@@ -47,11 +49,12 @@ def network_api_allocate(self, context):
def network_api_release(self, context, address):
pass
-def network_api_associate(self, context,floating_ip, fixed_ip):
+
+def network_api_associate(self, context, floating_ip, fixed_ip):
pass
-def network_api_disassociate():
+def network_api_disassociate(self, context, floating_address):
pass
@@ -111,6 +114,7 @@ class FloatingIpTest(test.TestCase):
def test_floating_ips_list(self):
req = webob.Request.blank('/v1.1/floating_ips')
res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 200)
res_dict = json.loads(res.body)
response = {'floating_ips': [{'floating_ip': {'instance_id': 11,
'ip': '10.10.10.10',
@@ -121,14 +125,15 @@ class FloatingIpTest(test.TestCase):
'fixed_ip': None,
'id': 2}}]}
self.assertEqual(res_dict, response)
-
+
def test_floating_ip_show(self):
req = webob.Request.blank('/v1.1/floating_ips/1')
res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 200)
res_dict = json.loads(res.body)
self.assertEqual(res_dict['floating_ip']['id'], 1)
self.assertEqual(res_dict['floating_ip']['ip'], '10.10.10.10')
- self.assertEqual(res_dict['floating_ip']['fixed_ip'], None)
+ self.assertEqual(res_dict['floating_ip']['fixed_ip'], '11.0.0.1')
self.assertEqual(res_dict['floating_ip']['instance_id'], None)
def test_floating_ip_allocate(self):
@@ -161,7 +166,7 @@ class FloatingIpTest(test.TestCase):
req.method = 'POST'
req.body = json.dumps(body)
req.headers["content-type"] = "application/json"
-
+
res = req.get_response(fakes.wsgi_app())
self.assertEqual(res.status_int, 200)
actual = json.loads(res.body)['associated']
@@ -172,4 +177,13 @@ class FloatingIpTest(test.TestCase):
self.assertEqual(actual, expected)
def test_floating_ip_disassociate(self):
- pass \ No newline at end of file
+ req = webob.Request.blank('/v1.1/floating_ips/1/disassociate')
+ req.method = 'POST'
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 200)
+ ip = json.loads(res.body)['disassociated']
+ expected = {
+ "floating_ip": '10.10.10.10',
+ "fixed_ip": '11.0.0.1'
+ }
+ self.assertEqual(ip, expected)