summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorDan Prince <dan.prince@rackspace.com>2011-03-14 16:58:03 -0400
committerDan Prince <dan.prince@rackspace.com>2011-03-14 16:58:03 -0400
commit229c5bc3324d5df39ca959d71a540a806bc5ad3e (patch)
tree715d2a03aa51b114b354cf688597c2c592a2f6b6 /nova/tests
parent2bfa7b29c7882da559041cea771b9243555828fa (diff)
Implement action extensions.
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/api/openstack/extensions/widgets.py22
-rw-r--r--nova/tests/api/openstack/test_extensions.py44
2 files changed, 64 insertions, 2 deletions
diff --git a/nova/tests/api/openstack/extensions/widgets.py b/nova/tests/api/openstack/extensions/widgets.py
index e03fc7776..6839d2bb2 100644
--- a/nova/tests/api/openstack/extensions/widgets.py
+++ b/nova/tests/api/openstack/extensions/widgets.py
@@ -1,10 +1,14 @@
from nova import wsgi
+from nova.api.openstack import extensions
+
+
class WidgetsController(wsgi.Controller):
def index(self, req):
return "Buy more widgets!"
+
class WidgetsExtensionResource(object):
def __init__(self):
@@ -21,3 +25,21 @@ class WidgetsExtension(object):
def get_resources(self):
return WidgetsExtensionResource()
+
+ def get_actions(self):
+ actions = []
+ actions.append(extensions.ExtensionAction('server', 'servers',
+ 'add_widget',
+ self._add_widget))
+ actions.append(extensions.ExtensionAction('server', 'servers',
+ 'delete_widget',
+ self._delete_widget))
+ return actions
+
+ def _add_widget(self, input_dict, req, id):
+
+ return "Widget Added."
+
+ def _delete_widget(self, input_dict, req, id):
+
+ return "Widget Deleted."
diff --git a/nova/tests/api/openstack/test_extensions.py b/nova/tests/api/openstack/test_extensions.py
index ff41d6d99..f8d217e9c 100644
--- a/nova/tests/api/openstack/test_extensions.py
+++ b/nova/tests/api/openstack/test_extensions.py
@@ -15,10 +15,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+import json
import unittest
-import os.path
-
import webob
+import os.path
from nova import flags
from nova.api import openstack
@@ -26,6 +26,7 @@ import nova.wsgi
FLAGS = flags.FLAGS
+
class StubController(nova.wsgi.Controller):
def __init__(self, body):
@@ -34,6 +35,7 @@ class StubController(nova.wsgi.Controller):
def index(self, req):
return self.body
+
class StubExtensionManager(object):
def __init__(self, resources):
@@ -42,6 +44,7 @@ class StubExtensionManager(object):
def get_resources(self):
return self.resources
+
class WidgetExtensionResource(object):
def __init__(self, name, collection, wsgi_app):
@@ -52,6 +55,7 @@ class WidgetExtensionResource(object):
def add_routes(self, mapper):
mapper.resource(self.name, self.collection, controller=self.wsgi_app)
+
class ExtensionTest(unittest.TestCase):
def test_no_extension_present(self):
@@ -99,4 +103,40 @@ class ExtensionManagerTest(unittest.TestCase):
self.assertEqual("Buy more widgets!", response.body)
+class ExtendedActionTest(unittest.TestCase):
+ def setUp(self):
+ FLAGS.osapi_extensions_path = os.path.join(os.path.dirname(__file__),
+ "extensions")
+
+ def test_extended_action(self):
+ app = openstack.APIRouter()
+ ext_midware = openstack.extensions.ExtensionMiddleware(app)
+ body = dict(add_widget=dict(name="test"))
+ request = webob.Request.blank("/servers/1/action")
+ request.method = 'POST'
+ request.content_type = 'application/json'
+ request.body = json.dumps(body)
+ response = request.get_response(ext_midware)
+ self.assertEqual(200, response.status_int)
+ self.assertEqual("Widget Added.", response.body)
+
+ def test_invalid_action_body(self):
+ app = openstack.APIRouter()
+ ext_midware = openstack.extensions.ExtensionMiddleware(app)
+ body = dict(blah=dict(name="test")) # Doesn't exist
+ request = webob.Request.blank("/servers/1/action")
+ request.method = 'POST'
+ request.content_type = 'application/json'
+ request.body = json.dumps(body)
+ response = request.get_response(ext_midware)
+ self.assertEqual(501, response.status_int)
+
+ def test_invalid_action(self):
+ app = openstack.APIRouter()
+ ext_midware = openstack.extensions.ExtensionMiddleware(app)
+ request = webob.Request.blank("/asdf/1/action")
+ request.method = 'POST'
+ request.content_type = 'application/json'
+ response = request.get_response(ext_midware)
+ self.assertEqual(404, response.status_int)