Beef up nova/api/direct.py tests

Change-Id: I4f9fd9518285c6bbd170159742a186eea6c58369
This commit is contained in:
Brendan Maguire 2011-09-07 20:39:29 +01:00
parent a2646129bc
commit 65d6b6b721
2 changed files with 93 additions and 5 deletions

View File

@ -14,6 +14,7 @@ Arvind Somya <asomya@cisco.com>
Bilal Akhtar <bilalakhtar@ubuntu.com>
Brad Hall <brad@nicira.com>
Brad McConnell <bmcconne@rackspace.com>
Brendan Maguire <B_Maguire@Dell.com>
Brian Lamar <brian.lamar@rackspace.com>
Brian Schott <bschott@isi.edu>
Brian Waldon <brian.waldon@rackspace.com>

View File

@ -22,15 +22,10 @@ import json
import webob
from nova import compute
from nova import context
from nova import exception
from nova import network
from nova import test
from nova import volume
from nova import utils
from nova.api import direct
from nova.tests.api.ec2 import test_cloud
class ArbitraryObject(object):
@ -45,10 +40,27 @@ class FakeService(object):
return {'user': context.user_id,
'project': context.project_id}
def echo_data_directly(self, context, data):
return data
def invalid_return(self, context):
return ArbitraryObject()
class MyLimited(direct.Limited):
_allowed = ['var1', 'func1']
class MyProxy(object):
var1 = var2 = True
def func1(self):
return True
def func2(self):
return True
class DirectTestCase(test.TestCase):
def setUp(self):
super(DirectTestCase, self).setUp()
@ -83,6 +95,22 @@ class DirectTestCase(test.TestCase):
resp_parsed = json.loads(resp.body)
self.assertEqual(resp_parsed['data'], 'foo')
def test_filter_json_params(self):
req = webob.Request.blank('/fake/echo')
req.environ['openstack.context'] = self.context
req.method = 'POST'
req.body = 'json=%s' % json.dumps({'data': 'foo',
'_underscored': 'ignoreMe',
'self': 'ignoreMe',
'context': 'ignoreMe'})
resp = req.get_response(self.router)
self.assertEqual(resp.status_int, 200)
resp_parsed = json.loads(resp.body)
self.assertEqual(resp_parsed['data'], 'foo')
self.assertNotIn('_underscored', resp_parsed)
self.assertNotIn('self', resp_parsed)
self.assertNotIn('context', resp_parsed)
def test_post_params(self):
req = webob.Request.blank('/fake/echo')
req.environ['openstack.context'] = self.context
@ -93,6 +121,29 @@ class DirectTestCase(test.TestCase):
resp_parsed = json.loads(resp.body)
self.assertEqual(resp_parsed['data'], 'foo')
def test_filter_post_params(self):
req = webob.Request.blank('/fake/echo')
req.environ['openstack.context'] = self.context
req.method = 'POST'
req.body = 'data=foo&_underscored=ignoreMe&self=ignoreMe&context='\
'ignoreMe'
resp = req.get_response(self.router)
self.assertEqual(resp.status_int, 200)
resp_parsed = json.loads(resp.body)
self.assertEqual(resp_parsed['data'], 'foo')
self.assertNotIn('_underscored', resp_parsed)
self.assertNotIn('self', resp_parsed)
self.assertNotIn('context', resp_parsed)
def test_string_resp(self):
req = webob.Request.blank('/fake/echo_data_directly')
req.environ['openstack.context'] = self.context
req.method = 'POST'
req.body = 'data=foo'
resp = req.get_response(self.router)
self.assertEqual(resp.status_int, 200)
self.assertEqual(resp.body, 'foo')
def test_invalid(self):
req = webob.Request.blank('/fake/invalid_return')
req.environ['openstack.context'] = self.context
@ -105,6 +156,42 @@ class DirectTestCase(test.TestCase):
self.assertEqual(rv['data'], 'baz')
class LimitedTestCase(test.TestCase):
def test_limited_class_getattr(self):
limited = MyLimited(MyProxy())
# Allowed are still visible
self.assertTrue(limited.func1())
self.assertTrue(limited.var1)
# Non-allowed are no longer visible
self.assertRaises(AttributeError, getattr, limited, 'func2')
self.assertRaises(AttributeError, getattr, limited, 'var2')
def test_limited_class_dir(self):
limited = MyLimited(MyProxy())
# Allowed are still visible
self.assertIn('func1', dir(limited))
self.assertIn('var1', dir(limited))
# Non-allowed are no longer visible
self.assertNotIn('func2', dir(limited))
self.assertNotIn('var2', dir(limited))
def test_limited_class_no_allowed(self):
# New MyLimited class with no _allowed variable
class MyLimited(direct.Limited):
pass
limited = MyLimited(MyProxy())
# Nothing in MyProxy object visible now
self.assertNotIn('func1', dir(limited))
self.assertNotIn('var1', dir(limited))
# NOTE(jkoelker): This fails using the EC2 api
#class DirectCloudTestCase(test_cloud.CloudTestCase):
# def setUp(self):