Example #1
0
    def test_stop_handles_actor_already_being_stopped(self):
        self.mock.stopping = False
        self.mock.actor_ref = Mock()
        self.mock.actor_ref.stop.side_effect = pykka.ActorDeadError()
        self.mock._sock = Mock(spec=socket.SocketType)

        network.Connection.stop(self.mock, sentinel.reason)
        self.mock.actor_ref.stop.assert_called_once_with(block=False)
Example #2
0
    def test_recv_callback_handles_dead_actors(self):
        self.mock._sock = Mock(spec=socket.SocketType)
        self.mock._sock.recv.return_value = b"data"
        self.mock.actor_ref = Mock()
        self.mock.actor_ref.tell.side_effect = pykka.ActorDeadError()

        assert network.Connection.recv_callback(self.mock, sentinel.fd,
                                                GLib.IO_IN)
        self.mock.stop.assert_called_once_with(any_unicode)
Example #3
0
    def test_recv_callback_handles_dead_actors(self):
        self.mock.sock = Mock(spec=socket.SocketType)
        self.mock.sock.recv.return_value = 'data'
        self.mock.actor_ref = Mock()
        self.mock.actor_ref.send_one_way.side_effect = pykka.ActorDeadError()

        self.assertTrue(
            network.Connection.recv_callback(self.mock, sentinel.fd,
                                             gobject.IO_IN))
        self.mock.stop.assert_called_once_with(any_unicode)
Example #4
0
        def waiter(timeout):
            time_start = time.monotonic()

            while not self._instance:
                if self._instance_dead:
                    raise pykka.ActorDeadError("{} ({}) was stopped".format(
                        self.actor_class.__name__, self._instance_urn))

                elapsed = time.monotonic() - time_start
                if elapsed >= timeout:
                    raise pykka.Timeout(f"{elapsed} seconds")

                time.sleep(1)

            return self._instance
Example #5
0
    def retrieve_service(self) -> pykka.Future[ActorTypeVar]:
        future = self.actor_class._create_future()

        if self._instance:
            if self._instance.actor_ref.is_alive():
                future.set(self._instance)
                return future
            else:
                self._actor_stopped()

        if self._instance_dead:
            future.set_exception((
                pykka.ActorDeadError,
                pykka.ActorDeadError("{} ({}) was stopped".format(
                    self.actor_class.__name__, self._instance_urn)),
                None,
            ))
            return future

        def waiter(timeout):
            time_start = time.monotonic()

            while not self._instance:
                if self._instance_dead:
                    raise pykka.ActorDeadError("{} ({}) was stopped".format(
                        self.actor_class.__name__, self._instance_urn))

                elapsed = time.monotonic() - time_start
                if elapsed >= timeout:
                    raise pykka.Timeout(f"{elapsed} seconds")

                time.sleep(1)

            return self._instance

        future.set_get_hook(waiter)
        return future