def setup_routes(app, disp): # V2 Routes disp.set_handler('v2_volumes', volumes.VolumesV2()) disp.set_handler('v2_os_volumes', volumes.VolumesV2()) disp.set_handler('v2_volumes_detail', volumes.VolumesV2()) # Load volume type list json_file = app.config.volume.volume_types if not os.path.exists(json_file): json_file = app.config.find_file(json_file) if json_file is None: raise ValueError('volume_types.json not found') with open(json_file) as jf: json_str = jf.read() vtl = volume_types_loader.VolumeTypesLoader(json_str) volume_types = vtl.get_volume_types() # V1 Routes disp.set_handler('v1_volumes_detail', volumes.VolumesV1(volume_types)) disp.set_handler('v1_volume', volumes.VolumeV1()) disp.set_handler('v1_volumes', volumes.VolumesV1(volume_types)) disp.set_handler('v1_volume_types', volumes.VolumeTypesV1(volume_types)) sl_common.add_hooks(app)
def setup_routes(app, disp): # V2 Routes disp.set_handler('index', index.Index(app)) disp.set_handler('v2_detail', versionv2.VersionV2(app)) disp.set_handler('v2_volume', volumesv2.VolumesV2()) # Need to implement at a later date # disp.set_handler('v2_volumes', volumesv2.VolumesV2()) disp.set_handler('v2_volumes_detail', volumesv2.VolumesV2()) # Load volume type list json_file = os.path.join('/opt/app-root/src/jumpgate', app.config.get("volume", "volume_types")) if not os.path.exists(json_file): json_file = app.config.find_file(json_file) if json_file is None: raise ValueError('volume_types.json not found') with open(json_file) as jf: json_str = jf.read() vtl = volume_types_loader.VolumeTypesLoader(json_str) volume_types = vtl.get_volume_types() # V1 Routes disp.set_handler('v1_volumes_detail', volumes.VolumesV1(volume_types)) disp.set_handler('v1_volume', volumes.VolumeV1()) disp.set_handler('v1_volumes', volumes.VolumesV1(volume_types)) disp.set_handler('v1_volume_types', volumes.VolumeTypesV1(volume_types)) sl_common.add_hooks(app)
def test_on_get_for_volume_list_good(self): """Test the good path of list volumes""" client, env, req, resp = _set_up_req_resp_body() self.vtl, volume_types = _set_up_vol_types_vtl(json.dumps(EXPECTED)) app = volumes.VolumesV1(volume_types) app.on_get(req, resp, TENANT_ID) self.assertEqual(resp.status, 200)
def test_on_post_volume_create_bad_request(self): self.body = {'volume': {'size': 'abcdh'}} client, env, req, resp = _set_up_req_resp_body( body=json.dumps(self.body)) self.vtl, volume_types = _set_up_vol_types_vtl(json.dumps(EXPECTED)) app = volumes.VolumesV1(volume_types) app.on_post(req, resp, TENANT_ID) self.assertEqual(resp.status, 400)
def test_on_post_volume_create_v_type_present_name_valid(self): client, env, req, resp =\ _set_up_req_resp_body(body=json.dumps(self.body)) set_SL_client(req, operation=OP_CODE['GOOD_PATH']['CREATE_VOLUME']) self.vtl, volume_types = _set_up_vol_types_vtl(json.dumps(EXPECTED)) app = volumes.VolumesV1(volume_types) app.on_post(req, resp, TENANT_ID) self.assertEqual(list(resp.body.keys()), ["volume"]) self.assertEqual(resp.status, 202)
def test_on_get_for_volume_list_SoftLayerAPIError(self): """Test the bad path of list volumes with SLAPI exception""" client, env, req, resp = _set_up_req_resp_body() self.vtl, volume_types = _set_up_vol_types_vtl(json.dumps(EXPECTED)) app = volumes.VolumesV1(volume_types) set_SL_client(req, operation=OP_CODE['BAD_PATH']['GET_VIRT_DISK_IMGS_API']) app.on_get(req, resp, TENANT_ID) self.assertRaises(SoftLayer.SoftLayerAPIError)
def test_on_get_for_volume_list_good_format_volumes(self): """ Test the good path of format_volume func during show volume""" client, env, req, resp = _set_up_req_resp_body() self.vtl, volume_types = _set_up_vol_types_vtl(json.dumps(EXPECTED)) app = volumes.VolumesV1(volume_types) set_SL_client( req, operation=OP_CODE['GOOD_PATH']['RET_VIRT_DISK_IMGS']) app.on_get(req, resp, TENANT_ID) self.assertEquals(list(resp.body.keys()), ['volumes'])
def test_on_post_volume_create_good_v_type_round_size(self): self.body['volume']['size'] = 1 client, env, req, resp =\ _set_up_req_resp_body(body=json.dumps(self.body)) set_SL_client(req, operation=OP_CODE['GOOD_PATH']['CREATE_VOLUME']) self.vtl, volume_types = _set_up_vol_types_vtl(json.dumps(EXPECTED)) app = volumes.VolumesV1(volume_types) app.on_post(req, resp, TENANT_ID) self.assertEqual(list(resp.body.keys()), ["volume"]) self.assertIn('size', resp.body['volume']) self.assertNotEqual(resp.body['volume']['size'], 1) self.assertEqual(resp.status, 202)
def test_on_post_volume_create_v_type_exact_size_fail(self): self.body['volume']['size'] = 1 client, env, req, resp =\ _set_up_req_resp_body(body=json.dumps(self.body)) set_SL_client(req, operation=OP_CODE['GOOD_PATH']['CREATE_VOLUME']) modify_expected = EXPECTED.copy() me = modify_expected['volume_types'][0]['extra_specs'] me['drivers:exact_capacity'] = True self.vtl, volume_types = _set_up_vol_types_vtl( json.dumps(modify_expected)) app = volumes.VolumesV1(volume_types) app.on_post(req, resp, TENANT_ID) self.assertEqual(resp.status, 400)
def test_on_post_volume_create_v_type_present_name_invalid( self, mock_bad_req, ): self.body['volume']['volume_type'] = 'bad' client, env, req, resp =\ _set_up_req_resp_body(body=json.dumps(self.body)) set_SL_client(req, operation=OP_CODE['GOOD_PATH']['CREATE_VOLUME']) self.vtl, volume_types = _set_up_vol_types_vtl(json.dumps(EXPECTED)) app = volumes.VolumesV1(volume_types) app.on_post(req, resp, TENANT_ID) mock_bad_req.assert_called_with( resp, 'Specify a volume with' ' a valid name') self.assertEqual(resp.status, 400)
def test_on_get_for_volume_list_good_format_volumes(self): """Test the good path of format_volume func during show volume""" client, env, req, resp = _set_up_req_resp_body() self.vtl, volume_types = _set_up_vol_types_vtl(json.dumps(EXPECTED)) app = volumes.VolumesV1(volume_types) set_SL_client(req, operation=OP_CODE['GOOD_PATH']['RET_VIRT_DISK_IMGS']) app.on_get(req, resp, TENANT_ID) self.assertEqual(list(resp.body.keys()), ['volumes']) # There should be a single volume. vols = resp.body['volumes'] self.assertEqual(1, len(vols)) volume = vols[0] # The volume should have a single attachment. self.assertEqual(1, len(volume['attachments'])) attachment = volume['attachments'][0] # Assert the expected attachment details. self.assertEqual(DISK_IMG_ID, attachment['id']) self.assertEqual(str(GUEST_ID), attachment['server_id']) self.assertEqual(volumes.MOUNTPOINT[BLKDEV_MOUNT_ID], attachment['device']) # Since we're not getting volume details we don't get the attached # guest (virtual server) hostname. self.assertEqual('', attachment['host_name'])