Ejemplo n.º 1
0
 def test_softlayer_api_error(self):
     error = SoftLayer.SoftLayerAPIError('Exception', 'Exception Text')
     self.env.get_module_name.side_effect = error
     self.assertRaises(SystemExit,
                       core.main,
                       args=['vs', 'list'],
                       env=self.env)
Ejemplo n.º 2
0
    def test_error(self):
        exception = SoftLayer.SoftLayerAPIError(500, 'Error')
        mock = self.set_mock('SoftLayer_Resource_Metadata', 'getUserMetadata')
        mock.side_effect = exception

        self.assertRaises(SoftLayer.SoftLayerAPIError, self.metadata.get,
                          'user_data')
Ejemplo n.º 3
0
    def test_sl_error(self, stdoutmock, climock):
        ex = SoftLayer.SoftLayerAPIError('SoftLayer_Exception', 'Not found')
        climock.side_effect = ex

        self.assertRaises(SystemExit, core.main)

        self.assertIn("SoftLayerAPIError(SoftLayer_Exception): Not found",
                      stdoutmock.getvalue())
Ejemplo n.º 4
0
 def test_softlayer_api_error_authentication_error(self):
     error = SoftLayer.SoftLayerAPIError('SoftLayerException',
                                         'Invalid API Token')
     self.env.get_module_name.side_effect = error
     self.assertRaises(SystemExit,
                       core.main,
                       args=['vs', 'list'],
                       env=self.env)
Ejemplo n.º 5
0
 def test_softlayer_api_error(self):
     e = SoftLayer.SoftLayerAPIError('fault code', 'fault string')
     self.assertEqual(e.faultCode, 'fault code')
     self.assertEqual(e.faultString, 'fault string')
     self.assertEqual(e.reason, 'fault string')
     self.assertEqual(repr(e),
                      "<SoftLayerAPIError(fault code): fault string>")
     self.assertEqual(str(e), "SoftLayerAPIError(fault code): fault string")
Ejemplo n.º 6
0
    def test_auth_error(self, stdoutmock, climock):
        ex = SoftLayer.SoftLayerAPIError('SoftLayer_Exception',
                                         'Invalid API token.')
        climock.side_effect = ex

        self.assertRaises(SystemExit, core.main)

        self.assertIn("Authentication Failed:", stdoutmock.getvalue())
        self.assertIn("use 'slcli config setup'", stdoutmock.getvalue())
Ejemplo n.º 7
0
    def test_delete_guest(self):
        result = self.dedicated_host._delete_guest(123)
        self.assertEqual(result, 'Cancelled')

        # delete_guest should return the exception message in case it fails
        error_raised = SoftLayer.SoftLayerAPIError('SL Exception', 'SL message')
        self.dedicated_host.guest = mock.Mock()
        self.dedicated_host.guest.deleteObject.side_effect = error_raised

        result = self.dedicated_host._delete_guest(369)
        self.assertEqual(result, 'Exception: SL message')
Ejemplo n.º 8
0
    def test_create_subnet_no_prices_found(self):
        item_mock = self.set_mock('SoftLayer_Product_Package', 'getItems')
        item_mock.return_value = SoftLayer_Product_Package.getItems

        verify_mock = self.set_mock('SoftLayer_Product_Order', 'verifyOrder')
        verify_mock.side_effect = SoftLayer.SoftLayerAPIError('SoftLayer_Exception', 'Price not found')

        result = self.run_command(['subnet', 'create', '--v6', 'public', '32', '12346', '--test'])

        self.assertRaises(SoftLayer.SoftLayerAPIError, verify_mock)
        self.assertIn('Unable to order 32 public ipv6', result.exception.message, )
Ejemplo n.º 9
0
    def test_on_get_fail(self):
        client, env = get_client_env()
        vgbdtg = client['Virtual_Guest_Block_Device_Template_Group']
        error = SoftLayer.SoftLayerAPIError(
            "SoftLayer_Exception_ObjectNotFound",
            "Unable to find object with id of '1'")
        vgbdtg.getObject.side_effect = error

        req = api.Request(env, sl_client=client)
        resp = falcon.Response()

        self.assertRaises(SoftLayer.SoftLayerAPIError,
                          images.ImageV1(self.app).on_get, req, resp, '1')
Ejemplo n.º 10
0
 def test_on_post_create_fail(self, vsMock):
     client, env = get_client_env(body='{"createImage": \
     {"name": "foobar"}}')
     vg_clientMock = client['Virtual_Guest']
     e = SoftLayer.SoftLayerAPIError(123, 'abc')
     vg_clientMock.createArchiveTransaction.side_effect = e
     req = api.Request(env, sl_client=client)
     resp = falcon.Response()
     instance = servers.ServerActionV2(app=mock.MagicMock(),
                                       flavors=FLAVOR_LIST)
     instance.on_post(req, resp, TENANT_ID, INSTANCE_ID)
     self.assertRaises(SoftLayer.SoftLayerAPIError,
                       vg_clientMock.createArchiveTransaction)
     self.assertEqual(resp.status, 500)
Ejemplo n.º 11
0
 def test_on_get_no_block_devices(self):
     client, env = get_client_env()
     vg_clientMock = client['Virtual_Guest']
     gbdMock = vg_clientMock.getBlockDevices
     gbdMock.side_effect = SoftLayer.SoftLayerAPIError(
         404, 'No Block Devices', None)
     req = api.Request(env, sl_client=client)
     resp = falcon.Response()
     instance = volumes.OSVolumeAttachmentV2()
     instance.on_get(req, resp, TENANT_ID, INSTANCE_ID, VOLUME_ID)
     self.assertEqual(
         resp.body,
         {'volumeFault': {
             'message': 'No Block Devices',
             'code': '500'
         }})
Ejemplo n.º 12
0
 def test_on_get_fail_block_devices_exception(self):
     client, env = get_client_env()
     vg_clientMock = client['Virtual_Guest']
     gbdMock = vg_clientMock.getBlockDevices
     gbdMock.side_effect = SoftLayer.SoftLayerAPIError(
         404, 'No Block Devices', None)
     vdi_clientMock = client['Virtual_Disk_Image']
     req = falcon.Request(env)
     resp = falcon.Response()
     instance = volumes.OSVolumeAttachmentsV2()
     instance.on_get(req, resp, TENANT_ID, INSTANCE_ID)
     self.assertEquals(
         resp.body,
         {'volumeFault': {
             'message': 'No Block Devices',
             'code': '500'
         }})
Ejemplo n.º 13
0
 def test_on_delete_fail_detach_getObject_exception(self):
     client, env = get_client_env()
     vdi_clientMock = client['Virtual_Disk_Image']
     vdi_clientMock.getObject.side_effect = (SoftLayer.SoftLayerAPIError(
         404, 'No Object', None))
     req = api.Request(env, sl_client=client)
     resp = falcon.Response()
     instance = volumes.OSVolumeAttachmentV2()
     instance.on_delete(req, resp, TENANT_ID, INSTANCE_ID, VOLUME_ID)
     vdi_clientMock.getObject.assert_called_with(id=VOLUME_ID,
                                                 mask='blockDevices')
     self.assertEqual(
         resp.body,
         {'volumeFault': {
             'message': 'No Object',
             'code': '500'
         }})
Ejemplo n.º 14
0
        def _match_portable_storage_prices(packageId, size, exact_capacity):
            # match the SL portable storage capacity that closet
            # to the requested size and return the prices

            prod_pkg = client['Product_Package']
            price_list = prod_pkg.getItems(id=packageId,
                                           mask='prices.id')
            # each item in price_list looks like this:
            # {'capacity': '150',
            # 'description': '150 GB (SAN)',
            # 'id': 1221,
            # 'prices': [{'id': 2262}],
            # 'softwareDescriptionId': '',
            # 'units': 'GB',
            # 'upgradeItemId': ''}
            price_matrix = {}
            for x in price_list:
                price_matrix.update({int(x['capacity']): x['prices']})
            # find the closet capacity to the requested size
            if exact_capacity:
                ret = False
                for x in price_matrix:
                    if size == x:
                        ret = True
                        capacity_idx = x
                        break
                if not ret:
                    raise SoftLayer.SoftLayerAPIError(
                        HTTP.BAD_REQUEST,
                        'volume_types: extra_specs: '
                        'drivers:exact_capacity is set to'
                        ' True and there is no volume with'
                        ' matching capacity')
            else:
                capacity_idx = min(price_matrix, key=lambda x: abs(x - size))

            return price_matrix[capacity_idx]
Ejemplo n.º 15
0
 def test_on_delete_fail_detach_exception(self):
     client, env = get_client_env()
     vg_clientMock = client['Virtual_Guest']
     deiMock = vg_clientMock.detachDiskImage
     deiMock.side_effect = (SoftLayer.SoftLayerAPIError(
         404, 'Detach Error', None))
     vdi_clientMock = client['Virtual_Disk_Image']
     vdi_clientMock.getObject.return_value = {
         'blockDevices': [{
             'guestId': INSTANCE_ID
         }]
     }
     req = api.Request(env, sl_client=client)
     resp = falcon.Response()
     instance = volumes.OSVolumeAttachmentV2()
     instance.on_delete(req, resp, TENANT_ID, INSTANCE_ID, VOLUME_ID)
     vg_clientMock.detachDiskImage.assert_called_with(VOLUME_ID,
                                                      id=INSTANCE_ID)
     self.assertEqual(
         resp.body,
         {'volumeFault': {
             'message': 'Detach Error',
             'code': '500'
         }})
Ejemplo n.º 16
0
    def test_404(self):
        mock = self.set_mock('SoftLayer_Resource_Metadata', 'getUserMetadata')
        mock.side_effect = SoftLayer.SoftLayerAPIError(404, 'Not Found')
        resp = self.metadata.get('user_data')

        self.assertEqual(None, resp)
Ejemplo n.º 17
0
def set_SL_client(req, operation=OP_CODE['GOOD_PATH']['SIMPLE']):
    if operation == OP_CODE['GOOD_PATH']['SIMPLE']:
        # simple good path testing, use default sl_client
        return
    elif operation == OP_CODE['BAD_PATH']['VIRT_DISK_IMG_OBJ_INVALID']:
        # Virtual_Disk_Image.getObject failure.
        req.sl_client['Virtual_Disk_Image'].getObject = \
            mock.MagicMock(
                side_effect=SoftLayer.SoftLayerAPIError(400,
                                                        "MockFault",
                                                        None))
    elif operation == OP_CODE['BAD_PATH']['GET_VIRT_DISK_IMGS_API']:
        # getVirtualDiskImages() SLAPI failure
        setattr(
            req.sl_client['Account'], 'getVirtualDiskImages',
            mock.MagicMock(side_effect=SoftLayer.SoftLayerAPIError(
                400, "MockFault", None)))
    elif operation == OP_CODE['GOOD_PATH']['RET_VIRT_DISK_IMGS']:

        def _return_disk_imgs(*args, **kwargs):
            return [
                # This will not be returned because it's a local disk.
                {
                    'typeId': volumes.VIRTUAL_DISK_IMAGE_TYPE['SYSTEM'],
                    'blockDevices': [mock.MagicMock()],
                    'localDiskFlag': True,
                },
                # This will not be returned because it's not a system disk
                # image.
                {
                    'typeId': volumes.VIRTUAL_DISK_IMAGE_TYPE['SWAP'],
                    'blockDevices': [mock.MagicMock()],
                    'localDiskFlag': False,
                },
                # This will be the single volume returned since it's a
                # non-local system disk image.
                {
                    'typeId':
                    volumes.VIRTUAL_DISK_IMAGE_TYPE['SYSTEM'],
                    'localDiskFlag':
                    False,
                    'blockDevices': [{
                        'guestId': GUEST_ID,
                        'diskImageId': DISK_IMG_ID,
                        'device': BLKDEV_MOUNT_ID,
                    }],
                },
            ]

        setattr(req.sl_client['Account'], 'getVirtualDiskImages',
                mock.MagicMock(side_effect=_return_disk_imgs))
    elif operation == OP_CODE['GOOD_PATH']['RET_VIRT_DISK_IMG']:

        def _return_disk_img(*args, **kwargs):
            return {
                'typeId': volumes.VIRTUAL_DISK_IMAGE_TYPE['SYSTEM'],
                'blockDevices': [mock.MagicMock()],
                'localDiskFlag': False,
            }
        req.sl_client['Virtual_Disk_Image'].getObject = \
            mock.MagicMock(side_effect=_return_disk_img)
    elif operation == OP_CODE['BAD_PATH']['RET_BAD_VIRT_GUEST']:

        def _return_disk_img_1(*args, **kwargs):
            return {
                'typeId':
                volumes.VIRTUAL_DISK_IMAGE_TYPE['SYSTEM'],
                'blockDevices': [{
                    'guestId': GUEST_ID,
                    'diskImageId': DISK_IMG_ID,
                    'device': BLKDEV_MOUNT_ID,
                }],
            }
        req.sl_client['Virtual_Disk_Image'].getObject = \
            mock.MagicMock(side_effect=_return_disk_img_1)
        req.sl_client['Virtual_Guest'].getObject = \
            mock.MagicMock(
                side_effect=SoftLayer.SoftLayerAPIError(400,
                                                        "MockFault",
                                                        None))
    elif operation == OP_CODE['GOOD_PATH']['RET_VIRT_DISK_BILL']:

        def _return_billing_item(*args, **kwargs):
            return {'billingItem': mock.MagicMock()}
        req.sl_client['Virtual_Disk_Image'].getObject = \
            mock.MagicMock(side_effect=_return_billing_item)
    elif operation == OP_CODE['BAD_PATH']['RET_VIRT_DISK_EXCP']:
        req.sl_client['Virtual_Disk_Image'].getObject = \
            mock.MagicMock(
                side_effect=SoftLayer.SoftLayerAPIError(400,
                                                        "MockFault",
                                                        None))
    elif operation == OP_CODE['GOOD_PATH']['CREATE_VOLUME']:

        def _return_all_objects(*args, **kwargs):
            return [{
                'name': 'Portable Storage',
                'isActive': 1,
                'id': PROD_PKG_ID
            }]

        def _return_prices(*args, **kwargs):
            return [{
                'id': PROD_PKG_ID,
                'capacity': DISK_CAPACITY,
                'prices': [{
                    'id': PRICE_ID
                }]
            }]

        def _return_disk_img_2(*args, **kwargs):
            return {
                'typeId':
                volumes.VIRTUAL_DISK_IMAGE_TYPE['SYSTEM'],
                'blockDevices': [{
                    'guestId': GUEST_ID,
                    'diskImageId': DISK_IMG_ID,
                    'device': BLKDEV_MOUNT_ID,
                }],
            }

        req.sl_client['Product_Package'].getAllObjects = \
            mock.MagicMock(side_effect=_return_all_objects)
        req.sl_client['Product_Package'].getItems = \
            mock.MagicMock(side_effect=_return_prices)
        req.sl_client['Location_Datacenter'].getDatacenters = \
            mock.MagicMock(return_value=[{'name': DATACENTER_NAME,
                                         'id': DATACENTER_ID}])
        req.sl_client['Billing_Order'].getOrderTopLevelItems = \
            mock.MagicMock(
                return_value=[{'billingItem': {'resourceTableId':
                                               DISK_IMG_ID}}])
        req.sl_client['Virtual_Disk_Image'].getObject = \
            mock.MagicMock(side_effect=_return_disk_img_2)
        req.sl_client['Product_Order'].placeOrder = \
            mock.MagicMock(return_value={'orderId': ORDERID})
Ejemplo n.º 18
0
 def test_raise_error(self, make_api_call):
     make_api_call.side_effect = SoftLayer.SoftLayerAPIError(
         'faultCode', 'faultString')
     self.assertRaises(
         SoftLayer.SoftLayerAPIError,
         self.metadata.make_request, 'something.json')
Ejemplo n.º 19
0
 def test_raise_404_error(self, make_api_call):
     make_api_call.side_effect = SoftLayer.SoftLayerAPIError(404,
                                                             'faultString')
     r = self.metadata.make_request('something.json')
     self.assertEqual(r, None)