diff --git a/src/sakia/data/connectors/bma.py b/src/sakia/data/connectors/bma.py index 1d91c91967dc15f83b4c055fc813fb4b489432bf..0a3378b779bff2382ed1c68ac156561c302f00c2 100644 --- a/src/sakia/data/connectors/bma.py +++ b/src/sakia/data/connectors/bma.py @@ -165,7 +165,15 @@ class BmaConnector: async def _verified_request(self, node, request): try: - return await request + res = await request + self._nodes_processor.handle_success(node) + return res + except errors.DuniterError as e: + if e.ucode == errors.HTTP_LIMITATION: + self._logger.debug("Exception in responses : " + str(e)) + self._nodes_processor.handle_failure(node) + else: + return e except BaseException as e: self._logger.debug(str(e)) self._nodes_processor.handle_failure(node) @@ -233,6 +241,7 @@ class BmaConnector: else: return _best_answer(answers, answers_data, nb_verification) + nodes = self._nodes_processor.nodes(currency) raise NoPeerAvailable("", len(synced_nodes)) async def simple_get(self, currency, request, req_args): diff --git a/src/sakia/services/network.py b/src/sakia/services/network.py index 826d590cacfefa9d8013405a521dc84a73fe5d14..d52b28b2acffb976ad417d3e25e00bf0fc721bff 100644 --- a/src/sakia/services/network.py +++ b/src/sakia/services/network.py @@ -87,7 +87,7 @@ class NetworkService(QObject): sample.append(n) continue - for node in random.sample(sample, 6): + for node in random.sample(sample, min(len(sample), 6)): connectors.append(NodeConnector(node, app.parameters)) network = cls(app, currency, node_processor, connectors, blockchain_service, identities_service) return network @@ -176,7 +176,7 @@ class NetworkService(QObject): sample.append(n) continue - for node in random.sample(sample, 1): + for node in random.sample(sample, min(len(sample), 1)): self.add_connector(NodeConnector(node, self.app.parameters)) diff --git a/tests/conftest.py b/tests/conftest.py index c3df0702163faf08387d043ef02c2477a6c7eb85..adf119901e38ed47e99622ed3bc0bbc00104866a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -102,7 +102,7 @@ def fake_server(application, event_loop): uid="", current_buid=BlockUID.empty(), current_ts=0, - state=Node.ONLINE, + state=0, software="duniter", version="0.40.2")) application.instanciate_services() diff --git a/tests/functional/test_connection_cfg_dialog.py b/tests/functional/test_connection_cfg_dialog.py index 10599d381748e8ab0e917f35ee5f2239976424bb..54ebcf8204b20c24884d4c784d2cd4306fcc5e25 100644 --- a/tests/functional/test_connection_cfg_dialog.py +++ b/tests/functional/test_connection_cfg_dialog.py @@ -65,7 +65,7 @@ async def test_register_empty_blockchain(application, fake_server, bob, tmpdir): assert len(ConnectionsProcessor.instanciate(application).connections()) == 1 accept_dialog("Registration") - application.loop.call_later(10, close_dialog) + application.loop.call_later(30, close_dialog) asyncio.ensure_future(exec_test()) await connection_config_dialog.async_exec() await fake_server.close()