예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
 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)
예제 #4
0
 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)
예제 #5
0
 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)
예제 #6
0
 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)
예제 #7
0
 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'])
예제 #8
0
 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)
예제 #9
0
 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)
예제 #10
0
 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)
예제 #11
0
 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'])