Esempio n. 1
0
def main():
    options = get_options()
    client = Client(options.host, options.port)
    # show
    if options.show:
        reply = Document(client.show())
        display(reply)
        return reply.code
    # load
    path = options.load
    if path:
        reply = Document(client.load(path))
        display(reply)
        return reply.code
    path = options.reload
    # reload
    if path:
        reply = Document(client.reload(path))
        display(reply)
        return reply.code
    # unload
    path = options.unload
    if path:
        reply = Document(client.unload(path))
        display(reply)
        return reply.code
Esempio n. 2
0
 def __call__(self, *args, **kwargs):
     try:
         result = self.call(*args, **kwargs)
     except Exception, e:
         reply = Document()
         reply.code = 1
         reply.result = utf8(e)
         result = reply
Esempio n. 3
0
 def __call__(self, *args, **kwargs):
     try:
         result = self.call(*args, **kwargs)
     except Exception, e:
         reply = Document()
         reply.code = 1
         reply.result = utf8(e)
         result = reply
Esempio n. 4
0
 def __call__(self, *args, **kwargs):
     try:
         result = self.call(*args, **kwargs)
     except Exception as e:
         reply = Document()
         reply.code = 1
         reply.result = str(e)
         result = reply
     return result
Esempio n. 5
0
 def __call__(self, *args, **kwargs):
     try:
         result = self.call(*args, **kwargs)
     except Exception as e:
         reply = Document()
         reply.code = 1
         reply.result = str(e)
         result = reply
     return result
Esempio n. 6
0
 def dispatch(self, call):
     """
     Dispatch the call to the handler.
     :param call: A *call* document.
     :type call: Document
     """
     reply = Document()
     try:
         method = getattr(self.handler, call.name)
         result = method(*call.args, **call.kwargs)
         reply.code = 0
         reply.result = result
     except Exception, e:
         reply.code = 1
         reply.result = utf8(e)
Esempio n. 7
0
 def accepted(self, client):
     """
     Process the request on the accepted socket.
     :param client: A client socket.
     :type client: socket.socket
     """
     try:
         client.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
         client.setsockopt(SOL_SOCKET, SO_LINGER, struct.pack('ii', 1, 1))
         message = client.recv(4096)
         call = Document()
         call.load(message)
         reply = self.dispatch(call)
         client.send(reply)
     except Exception, e:
         log.error(utf8(e))
Esempio n. 8
0
 def test_trash(self, _document):
     _document.return_value = Document()
     message = 123
     document, original, signature = peal(message)
     self.assertEqual(document, _document.return_value)
     self.assertEqual(original, message)
     self.assertEqual(signature, None)
Esempio n. 9
0
 def accepted(self, client):
     """
     Process the request on the accepted socket.
     :param client: A client socket.
     :type client: socket.socket
     """
     try:
         client.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
         client.setsockopt(SOL_SOCKET, SO_LINGER, struct.pack('ii', 1, 1))
         message = client.recv(4096)
         call = Document()
         call.load(message)
         reply = self.dispatch(call)
         client.send(reply)
     except Exception, e:
         log.error(utf8(e))
Esempio n. 10
0
 def test_validation_failed_document_passed(self):
     details = 'just failed'
     document = Document(sn=1)
     f = ValidationFailed(details=details, document=document)
     self.assertEqual(f.code, ValidationFailed.CODE)
     self.assertEqual(f.document, document)
     self.assertEqual(f.args[0], ' : '.join((ValidationFailed.DESCRIPTION, details)))
Esempio n. 11
0
 def dispatch(self, request):
     """
     Dispatch (invoke) the specified RMI request.
     :param request: An RMI request
     :type request: gofer.Document
     :return: The RMI returned.
     """
     dispatcher = self.dispatcher
     call = Document(request.request)
     if not self.provides(call.classname):
         for plugin in Plugin.all():
             if plugin == self:
                 continue
             if not plugin.provides(call.classname):
                 # not provided
                 continue
             valid = set()
             valid.add('*')
             valid.add(plugin.name)
             if not valid.intersection(self.forward):
                 # (forwarding) not approved
                 continue
             valid = set()
             valid.add('*')
             valid.add(self.name)
             if not valid.intersection(plugin.accept):
                 # (accept) not approved
                 continue
             dispatcher = plugin.dispatcher
             break
     return dispatcher.dispatch(request)
Esempio n. 12
0
    def test_run(self, builtin, pending, task, select_plugin, tx, aborted):
        builtin.return_value = Mock(name='builtin')
        plugin = Mock(name='plugin')
        task_list = [
            Mock(name='task-1'),
            Mock(name='task-2'),
        ]
        tx_list = [
            Mock(name='tx-1'),
            Mock(name='tx-2'),
        ]
        request_list = [
            Document(sn=1),
            Document(sn=2),
        ]
        task.side_effect = task_list
        tx.side_effect = tx_list
        aborted.side_effect = [False, False, True]
        pending.return_value.get.side_effect = request_list
        builtin.return_value.provides.side_effect = [True, False]
        select_plugin.side_effect = [builtin.return_value, plugin]

        # test
        scheduler = Scheduler(plugin)
        scheduler.run()

        # validation
        builtin.return_value.pool.run.assert_called_once_with(task_list[0])
        plugin.pool.run.assert_called_once_with(task_list[1])
        self.assertEqual(
            select_plugin.call_args_list,
            [
                ((request_list[0],), {}),
                ((request_list[1],), {}),
            ])
        self.assertEqual(
            tx.call_args_list,
            [
                ((builtin.return_value, pending.return_value, request_list[0]), {}),
                ((plugin, pending.return_value, request_list[1]), {})
            ])
        self.assertEqual(
            task.call_args_list,
            [
                ((tx_list[0],), {}),
                ((tx_list[1],), {}),
            ])
Esempio n. 13
0
 def _read(path):
     """
     Read a request.
     :param path: The path to the journal file.
     :type path: str
     :return: The read request.
     :rtype: Document
     """
     with open(path) as fp:
         try:
             request = Document()
             body = fp.read()
             request.load(body)
             log.debug('read [%s]: %s', path, body)
             return request
         except ValueError:
             log.error('%s corrupt (discarded)', path)
             unlink(path)
Esempio n. 14
0
 def call(self, *args, **kwargs):
     """
     Remote call.
     """
     socket = Socket(AF_INET, SOCK_STREAM)
     socket.connect(self.address)
     try:
         method = Document()
         method.name = self.name
         method.args = args
         method.kwargs = kwargs
         socket.send(method.dump())
         reply = socket.recv(4096)
         result = Document()
         result.load(reply)
         return result
     finally:
         socket.close()
Esempio n. 15
0
 def _rejected(self, code, description, document, details):
     """
     Called to process the received (invalid) document.
     This method intended to be overridden by subclasses.
     :param code: The rejection code.
     :type code: str
     :param description: rejection description
     :type description: str
     :param document: The received (json) document.
     :type document: str
     :param details: The explanation.
     :type details: str
     """
     details = dict(
         code=code,
         description=description,
         details=details)
     request = Document()
     request.load(document)
     self._send(request, 'rejected', **details)
Esempio n. 16
0
    def test_validate_failed(self, _document):
        _document.return_value = Document()
        message = '[]'
        authenticator = Mock()
        authenticator.validate.side_effect = ValidationFailed

        # functional test
        try:
            validate(authenticator, message)
            self.assertTrue(False, msg='validation exception expected')
        except ValidationFailed as e:
            self.assertEqual(e.document, _document.return_value)
Esempio n. 17
0
    def test_send_not_addressed(self, send):
        node = Queue()
        plugin = Mock(url='')
        request = Document(replyto=None)
        status = 'rejected'
        consumer = RequestConsumer(node, plugin)

        # Test
        consumer.send(request, status)

        # Validation
        self.assertFalse(send.called)
Esempio n. 18
0
 def _read(path):
     """
     Read a request.
     :param path: The path to the journal file.
     :type path: str
     :return: The read request.
     :rtype: Document
     """
     fp = open(path)
     try:
         try:
             request = Document()
             body = fp.read()
             request.load(body)
             log.debug('read [%s]: %s', path, body)
             return request
         except ValueError:
             log.error('%s corrupt (discarded)', path)
             os.unlink(path)
     finally:
         fp.close()
Esempio n. 19
0
 def test_dispatch(self):
     request = Document(routing=['A', 'B'],
                        request={
                            'classname': 'Admin',
                            'method': 'hello',
                            'args': [],
                            'keywords': {}
                        })
     plugin = Mock()
     builtin = Builtin(plugin)
     result = builtin.dispatch(request)
     self.assertEqual(result.retval, Admin().hello())
Esempio n. 20
0
    def test_run_raised(self, aborted, select_plugin, pending):
        plugin = Mock()
        sn = 1234
        pending.return_value.get.return_value = Document(sn=sn)
        select_plugin.side_effect = ValueError
        aborted.side_effect = [False, True]

        # test
        scheduler = Scheduler(plugin)
        scheduler.run()

        # validation
        pending.return_value.commit.assert_called_once_with(sn)
Esempio n. 21
0
    def test_dispatch(self):
        node = Queue()
        plugin = Mock(url='')
        request = Document()
        consumer = RequestConsumer(node, plugin)
        consumer.send = Mock()

        # Test
        consumer.dispatch(request)

        # Validation
        consumer.send.assert_called_once_with(request, 'accepted')
        plugin.scheduler.add.assert_called_once_with(request)
Esempio n. 22
0
 def select_plugin(self, request):
     """
     Select the plugin based on the request.
     :param request: A request to be scheduled.
     :rtype request: gofer.messaging.Document
     :return: The appropriate plugin.
     :rtype: gofer.agent.plugin.Plugin
     """
     call = Document(request.request)
     if self.builtin.provides(call.classname):
         plugin = self.builtin
     else:
         plugin = self.plugin
     return plugin
Esempio n. 23
0
    def test_validate_exception(self, _document):
        _document.return_value = Document()
        message = '[]'
        reason = 'this is bad'
        authenticator = Mock()
        authenticator.validate.side_effect = ValueError(reason)

        # functional test
        try:
            validate(authenticator, message)
            self.assertTrue(False, msg='validation exception expected')
        except ValidationFailed as e:
            self.assertEqual(e.details, reason)
            self.assertEqual(e.document, _document.return_value)
Esempio n. 24
0
    def test_send(self, ts, _open, _close, send):
        send.side_effect = ValueError
        node = Queue()
        plugin = Mock(url='')
        request = Document(sn=1, replyto='elmer', data=123)
        status = 'rejected'
        details = dict(a=1)
        consumer = RequestConsumer(node, plugin)

        # Test
        consumer.send(request, status, **details)

        # Validation
        _open.assert_called_once_with()
        _close.assert_called_once_with()
Esempio n. 25
0
 def call(self, *args, **kwargs):
     """
     Remote call.
     """
     socket = Socket(AF_INET, SOCK_STREAM)
     socket.connect(self.address)
     try:
         method = Document()
         method.name = self.name
         method.args = args
         method.kwargs = kwargs
         socket.send(method.dump())
         reply = socket.recv(4096)
         result = Document()
         result.load(reply)
         return result
     finally:
         socket.close()
Esempio n. 26
0
 def dispatch(self, call):
     """
     Dispatch the call to the handler.
     :param call: A *call* document.
     :type call: Document
     """
     reply = Document()
     try:
         method = getattr(self.handler, call.name)
         result = method(*call.args, **call.kwargs)
         reply.code = 0
         reply.result = result
     except Exception as e:
         reply.code = 1
         reply.result = str(e)
     return reply.dump()
Esempio n. 27
0
 def test_select_plugin(self, builtin):
     plugin = Mock()
     request = Document(request={'classname': 'A'})
     scheduler = Scheduler(plugin)
     # find builtin
     builtin.return_value.provides.return_value = True
     selected = scheduler.select_plugin(request)
     self.assertEqual(selected, builtin.return_value)
     # find plugin
     builtin.return_value.provides.return_value = False
     selected = scheduler.select_plugin(request)
     self.assertEqual(selected, plugin)
     self.assertEqual(
         builtin.return_value.provides.call_args_list,
         [
             (('A',), {}),
             (('A',), {})
         ])
Esempio n. 28
0
    def test_rejected(self):
        node = Queue()
        plugin = Mock(url='')
        code = '401'
        description = 'failed'
        details = dict(msg='failed')
        document = Document(field='value')
        consumer = RequestConsumer(node, plugin)
        consumer.send = Mock()

        # Test
        consumer.rejected(code, description, document, details)

        # Validation
        consumer.send.assert_called_once_with(
            document, 'rejected', **{
                'code': code,
                'description': description,
                'details': details,
            })
Esempio n. 29
0
    def test_send(self, ts, _open, _close, send):
        node = Queue()
        plugin = Mock(url='')
        request = Document(sn=1, replyto='elmer', data=123)
        status = 'rejected'
        details = dict(a=1)
        consumer = RequestConsumer(node, plugin)

        # Test
        consumer.send(request, status, **details)

        # Validation
        _open.assert_called_once_with()
        send.assert_called_once_with(request.replyto,
                                     sn=request.sn,
                                     data=request.data,
                                     status=status,
                                     timestamp=ts.return_value,
                                     **details)
        _close.assert_called_once_with()
Esempio n. 30
0
    FinalReply,
    Failed,
    Succeeded,
    Accepted,
    Rejected,
    Started,
    Progress,
)

document = Document(sn='123',
                    routing=['A', 'B'],
                    timestamp='XX',
                    data={'msg': 'Hello' + chr(255)},
                    result={
                        'xmodule': ValueError.__module__,
                        'xclass': ValueError.__name__,
                        'xargs': 'Failed' + chr(255),
                        'xstate': {},
                    },
                    total=100,
                    completed=10,
                    details='Done' + chr(255))


class Listener(object):
    def __init__(self):
        self.accepted = Mock()
        self.rejected = Mock()
        self.started = Mock()
        self.progress = Mock()
        self.succeeded = Mock()