예제 #1
0
    def test_receiver_create_unapplicable_action(self, mock_enforce):
        self._mock_enforce_setup(mock_enforce, 'create', True)
        action = 'BAD'
        body = {
            'receiver': {
                'name': 'test_receiver',
                'type': 'webhook',
                'cluster_id': 'FAKE_CLUSTER',
                'action': action,
            }
        }
        req = self._post('/receivers', jsonutils.dumps(body))

        msg = 'Action BAD is not applicable clusters.'
        error = senlin_exc.BadRequest(msg=msg)
        mock_call = self.patchobject(rpc_client.EngineClient,
                                     'call',
                                     side_effect=error)

        resp = shared.request_with_middleware(fault.FaultWrapper,
                                              self.controller.create,
                                              req,
                                              body=body)

        expected = body['receiver']
        type_name = expected.pop('type')
        expected['type_name'] = type_name
        expected['actor'] = None
        expected['params'] = None
        mock_call.assert_called_once_with(req.context,
                                          ('receiver_create', expected))
        self.assertEqual(400, resp.json['code'])
        self.assertEqual('BadRequest', resp.json['error']['type'])
예제 #2
0
    def test_receiver_create_with_bad_type(self, mock_enforce):
        self._mock_enforce_setup(mock_enforce, 'create', True)
        r_type = 'unsupported'
        body = {
            'receiver': {
                'name': 'test_receiver',
                'type': r_type,
                'cluster_id': 'FAKE_CLUSTER',
                'action': 'test_action',
            }
        }
        req = self._post('/receivers', jsonutils.dumps(body))

        msg = _('receiver obj_type (%s) is unsupported.') % r_type
        error = senlin_exc.BadRequest(msg=msg)
        mock_call = self.patchobject(rpc_client.EngineClient,
                                     'call',
                                     side_effect=error)

        resp = shared.request_with_middleware(fault.FaultWrapper,
                                              self.controller.create,
                                              req,
                                              body=body)

        expected_args = body['receiver']
        type_name = expected_args.pop('type')
        expected_args['type_name'] = type_name
        expected_args['actor'] = None
        expected_args['params'] = None
        mock_call.assert_called_once_with(req.context,
                                          ('receiver_create', expected_args))
        self.assertEqual(400, resp.json['code'])
        self.assertEqual('BadRequest', resp.json['error']['type'])
예제 #3
0
    def test_node_adopt_failed_preview(self, mock_preview, mock_create):
        req = orno.NodeAdoptRequest(identity='FAKE_ID', type='FAKE_TYPE')
        mock_preview.side_effect = exc.BadRequest(msg='boom')

        ex = self.assertRaises(rpc.ExpectedException,
                               self.eng.node_adopt,
                               self.ctx, req.obj_to_primitive())

        mock_preview.assert_called_once_with(self.ctx, mock.ANY)
        self.assertIsInstance(mock_preview.call_args[0][1],
                              orno.NodeAdoptRequest)

        self.assertEqual(exc.BadRequest, ex.exc_info[0])
        self.assertEqual("boom.", six.text_type(ex.exc_info[1]))
예제 #4
0
def get_path_parser(path):
    """Get a JsonPath parser based on a path string.

    :param path: A string containing a JsonPath.
    :returns: A parser used for path matching.
    :raises: An exception of `BadRequest` if the path fails validation.
    """
    try:
        expr = parse(path)
    except Exception as ex:
        error_text = six.text_type(ex)
        error_msg = error_text.split(':', 1)[1]
        raise exception.BadRequest(msg=_("Invalid attribute path - %s") %
                                   error_msg.strip())

    return expr
예제 #5
0
파일: worker.py 프로젝트: albertjone/senlin
 def _set_cluster_dependents(self, obj):
     ctx = context.get_service_context(user_id=obj.user,
                                       project_id=obj.project)
     master = self.properties[self.MASTER_CLUSTER]
     try:
         master_cluster = cluster_obj.Cluster.find(ctx, master)
     except exc.ResourceNotFound:
         msg = _("Cannot find the given cluster: %s") % master
         raise exc.BadRequest(msg=msg)
     if master_cluster:
         # configure kube master dependents, kube master record kube node
         # cluster uuid
         master_dependents = master_cluster.dependents
         master_dependents['kube-node'] = obj.id
         cluster_obj.Cluster.update(ctx, master_cluster.id,
                                    {'dependents': master_dependents})
예제 #6
0
파일: worker.py 프로젝트: albertjone/senlin
    def _del_cluster_dependents(self, obj):
        ctx = context.get_service_context(user_id=obj.user,
                                          project_id=obj.project)
        master = self.properties[self.MASTER_CLUSTER]
        try:
            master_cluster = cluster_obj.Cluster.find(ctx, master)
        except exc.ResourceNotFound:
            msg = _("Cannot find the given cluster: %s") % master
            raise exc.BadRequest(msg=msg)

        if master_cluster:
            # remove kube master record kube node dependents
            master_dependents = master_cluster.dependents
            if master_dependents and 'kube-node' in master_dependents:
                master_dependents.pop('kube-node')
                cluster_obj.Cluster.update(ctx, master_cluster.id,
                                           {'dependents': master_dependents})
예제 #7
0
    def test_create_from_exception(self):
        ex = None
        pload = None

        try:
            {}['key']
        except Exception:
            ex = exception.BadRequest(msg="It is really bad.")
            pload = base.ExceptionPayload.from_exception(ex)

        self.assertIsNotNone(ex)
        self.assertIsNotNone(pload)

        # 'senlin.tests.unit.objects.notifications.test_exception',
        self.assertEqual(self.__module__, pload.module)
        self.assertEqual('test_create_from_exception', pload.function)
        self.assertEqual('BadRequest', pload.exception)
        self.assertEqual("It is really bad.", pload.message)
예제 #8
0
    def test_node_index_cluster_not_found(self, mock_call, mock_parse,
                                          mock_enforce):
        self._mock_enforce_setup(mock_enforce, 'index', True)
        cluster_id = 'non-existent'
        req = self._get('/nodes', {'cluster_id': cluster_id})

        obj = mock.Mock()
        mock_parse.return_value = obj
        msg = "Cannot find the given cluster: non-existent"
        error = senlin_exc.BadRequest(msg=msg)
        mock_call.side_effect = shared.to_remote_error(error)

        resp = shared.request_with_middleware(fault.FaultWrapper,
                                              self.controller.index, req)
        self.assertEqual(400, resp.json['code'])
        self.assertEqual('BadRequest', resp.json['error']['type'])
        mock_parse.assert_called_once_with('NodeListRequest', mock.ANY, {
            'cluster_id': 'non-existent',
            'project_safe': True
        })
        mock_call.assert_called_once_with(req.context, 'node_list2', obj)