def test_list_many_volumes(self): app = StorageWsgiApp(self.conf, urlmap, helper=self.mock_helper) for i in range(3): volume_id = 'vol%s' % (i + 1) req = Request.blank('/volumes/%s?size=0' % volume_id, method='PUT') app(req) req = Request.blank('/volumes') resp = app(req) self.assertEquals(resp.status_int // 100, 2) info = json.loads(resp.body) expected = [ { 'id': 'vol1', 'size': 0, 'device_number': 9000 }, { 'id': 'vol2', 'size': 0, 'device_number': 9000 }, { 'id': 'vol3', 'size': 0, 'device_number': 9000 }, ] for volume in info: self.assert_(volume in expected) self.assertEquals(len(info), len(expected))
def test_list_empty_volumes(self): app = StorageWsgiApp(self.conf, urlmap, helper=self.mock_helper) req = Request.blank('/volumes') resp = app(req) info = json.loads(resp.body) self.assertEquals(resp.status_int // 100, 2) self.assertEquals(info, [])
def setUp(self): self.origISCSIDevice = volume.ISCSIDevice volume.ISCSIDevice = MockISCSIDevice super(WsgiTestBase, self).setUp() super(BaseHelper, self).setUp() self.app = StorageWsgiApp(self.conf, urlmap) def fake_node_request(*args, **kwargs): pass self.app.helper.node_request = fake_node_request def fake_api_request(*args, **kwargs): pass self.app.helper.make_api_request = fake_api_request def fake_scrub(snapshot, volume): pass self.app.helper.volumes.scrub.scrub_snapshot = fake_scrub self.lock = MockResourceLock() self.sourcevol_id = 'sourcevol' self.sourcevol = self.app.helper.volumes.create(self.sourcevol_id, lock=self.lock)
def test_create_volume_with_invalid_size(self): app = StorageWsgiApp(self.conf, urlmap, helper=self.mock_helper) req = Request.blank('/volumes/vol1', method='PUT', content_type='application/x-www-form-urlencoded', body=urlencode({'size': 'X'})) resp = app(req) self.assertEquals(resp.status_int // 100, 4)
def setUp(self): super(WsgiTestBase, self).setUp() super(BaseHelper, self).setUp() self.app = StorageWsgiApp(self.conf, urlmap) self.app.helper.cgroups = MockCgroupHelper() def mock_api_request(*args, **kwargs): pass self.app.helper.make_api_request = mock_api_request
def test_status_helper_not_found(self): urlmap = Mapper() urlmap.connect('/status/{helper_type}', controller=StatusController, action='show') self.app = StorageWsgiApp(self.test_conf, urlmap, MockHelper()) resp = self.request('/status/volumes') self.assertEquals(resp.code, 200) resp = self.request('/status/volume') # no trailing s self.assertEquals(resp.code, 404)
def test_invalid_method_on_volumes_collection(self): app = StorageWsgiApp(self.conf, urlmap, helper=self.mock_helper) req = Request.blank('/volumes', method='PUT') resp = app(req) self.assertEquals(resp.status_int, 405) req = Request.blank('/volumes', method='POST') resp = app(req) self.assertEquals(resp.status_int, 405) req = Request.blank('/volumes', method='DELETE') resp = app(req) self.assertEquals(resp.status_int, 405)
def test_create_volume(self): app = StorageWsgiApp(self.conf, urlmap, helper=self.mock_helper) req = Request.blank('/volumes/vol1?size=0', method='PUT') resp = app(req) expected = { 'id': 'vol1', 'size': 0, 'device_number': 9000, 'status': 'ACTIVE', } self.assertEquals(resp.status_int // 100, 2) info = json.loads(resp.body) self.assertEquals(info, expected)
def setUp(self): super(WsgiTestBase, self).setUp() super(BaseHelper, self).setUp() self.app = StorageWsgiApp(self.conf, urlmap) def fake_api_request(*args, **kwargs): pass self.app.helper.make_api_request = fake_api_request self.lock = MockResourceLock() self.volume1_id = str(uuid4()) self.volume1 = self.app.helper.volumes.create(self.volume1_id, lock=self.lock)
def test_status_mixed_results(self): class MixedHelper(MockHelper): def api_status(self): raise ServiceUnavaiable('can not contact api server') self.app = StorageWsgiApp(self.test_conf, urlmap, MixedHelper()) resp = self.request('/status') self.assertEquals(resp.code // 100, 5) self.assert_('can not contact' not in resp.body['reason']) resp = self.request('/status/api') self.assertEquals(resp.code // 100, 5) self.assert_('can not contact' not in resp.body['reason']) resp = self.request('/status/volumes') self.assertEquals(resp.code // 100, 2) self.assertEquals(resp.body, {'volumes_status': 'OK'})
def test_status_mixed_helper_results(self): class MixedHelper(MockHelper): def __init__(self): super(MixedHelper, self).__init__() self.volumes = ExplodingVolumeHelper() self.app = StorageWsgiApp(self.test_conf, urlmap, MixedHelper()) resp = self.request('/status') self.assertEquals(resp.code // 100, 5) self.assert_('volumes are not configured' in resp.body['reason']) resp = self.request('/status/api') self.assertEquals(resp.code // 100, 2) self.assertEquals(resp.body, {'api_status': 'OK'}) resp = self.request('/status/volumes') self.assertEquals(resp.code // 100, 5) self.assert_('volumes are not configured' in resp.body['reason'])
def test_status(self): self.app = StorageWsgiApp(self.test_conf, urlmap, MockHelper()) resp = self.request('/status') self.assertEquals(resp.code // 100, 2) expected = { 'api': { 'api_status': 'OK' }, 'volumes': { 'volumes_status': 'OK' }, 'exports': { 'exports_status': 'OK' }, 'backups': { 'backups_status': 'OK' }, } self.assertEquals(resp.body, expected)
def test_status_conf(self): self.app = StorageWsgiApp(self.test_conf, urlmap, MockHelper()) resp = self.request('/status/conf') self.assertEquals(resp.code // 100, 2) self.assertEquals(resp.body, self.test_conf.values)
def test_status_helper_route_not_found(self): self.app = StorageWsgiApp(self.test_conf, urlmap, MockHelper()) resp = self.request('/status/volume') # no trailing s self.assertEquals(resp.code, 404)
def test_status_unhandled_error(self): self.app = StorageWsgiApp(self.test_conf, urlmap, BadHelper()) resp = self.request('/status') self.assertEquals(resp.code // 100, 5) self.assert_( 'Something unexpected happened' not in resp.body['reason'])
def test_status_unavailable(self): self.app = StorageWsgiApp(self.test_conf, urlmap, ExplodingHelper()) resp = self.request('/status') self.assertEquals(resp.code // 100, 5) self.assert_('not configured' in resp.body['reason'])
def test_backup_status(self): self.app = StorageWsgiApp(self.test_conf, urlmap, MockHelper()) resp = self.request('/status/backups') self.assertEquals(resp.code // 100, 2) self.assertEquals(resp.body, {'backups_status': 'OK'})
def test_update_volume(self): app = StorageWsgiApp(self.conf, urlmap, helper=self.mock_helper) req = Request.blank('/volumes', method='POST') resp = app(req) self.assertEquals(resp.status_int, 405)
def test_delete_volume_not_found(self): app = StorageWsgiApp(self.conf, urlmap, helper=self.mock_helper) req = Request.blank('/volumes/vol1', method='DELETE') resp = app(req) self.assertEquals(resp.status_int, 404)
def test_invalid_path_not_found(self): app = StorageWsgiApp(self.conf, urlmap, helper=self.mock_helper) req = Request.blank('//') resp = app(req) self.assertEquals(resp.status_int, 404)