diff --git a/src/sakia/data/entities/certification.py b/src/sakia/data/entities/certification.py index 67e07044f8ac727ac458fa140bffe26e16385123..d59b7ff789e31ccdc2ab773bb8d4237173e613f3 100644 --- a/src/sakia/data/entities/certification.py +++ b/src/sakia/data/entities/certification.py @@ -10,4 +10,4 @@ class Certification: block = attr.ib(convert=int) timestamp = attr.ib(convert=int) signature = attr.ib(convert=str, cmp=False, hash=False) - written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False) + written_on = attr.ib(convert=int, default=0, cmp=False, hash=False) diff --git a/src/sakia/data/entities/identity.py b/src/sakia/data/entities/identity.py index 76dd814285924621cb14804ab0187850b082b011..445d8f5ecd1e6e019f75ff8a0c81d83604b564bd 100644 --- a/src/sakia/data/entities/identity.py +++ b/src/sakia/data/entities/identity.py @@ -10,6 +10,7 @@ class Identity: uid = attr.ib(convert=str, default="") blockstamp = attr.ib(convert=block_uid, default=BlockUID.empty()) signature = attr.ib(convert=str, default="", cmp=False, hash=False) + # Mediantime of the block referenced by blockstamp timestamp = attr.ib(convert=int, default=0, cmp=False, hash=False) written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False) revoked_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False) @@ -17,7 +18,7 @@ class Identity: membership_buid = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False) membership_timestamp = attr.ib(convert=int, default=0, cmp=False, hash=False) membership_type = attr.ib(convert=str, default='', validator=lambda s, a, t: t in ('', 'IN', 'OUT'), cmp=False, hash=False) - membership_written_on = attr.ib(convert=block_uid, default=BlockUID.empty(), cmp=False, hash=False) + membership_written_on = attr.ib(convert=int, default=0, cmp=False, hash=False) def document(self): """ diff --git a/src/sakia/data/processors/identities.py b/src/sakia/data/processors/identities.py index 8626fec2a73193f69ebecc1b87302557b6fec175..c20da37af8fa9b8e32d03792ad4614c14f80c7d4 100644 --- a/src/sakia/data/processors/identities.py +++ b/src/sakia/data/processors/identities.py @@ -150,7 +150,7 @@ class IdentitiesProcessor: if block_uid(memberships_data['sigDate']) == identity.blockstamp \ and memberships_data['uid'] == identity.uid: for ms in memberships_data['memberships']: - if block_uid(ms['written']) > identity.membership_written_on: + if ms['written'] > identity.membership_written_on: identity.membership_buid = BlockUID(ms['blockNumber'], ms['blockHash']) identity.membership_type = ms['membership'] @@ -166,7 +166,9 @@ class IdentitiesProcessor: requirements_data = await self._bma_connector.get(identity.currency, bma.wot.requirements, req_args={'search': identity.pubkey}) - identity.member = requirements_data['membershipExpiresIn'] > 0 and not requirements_data['outdistanced'] + identity_data = next((data for data in requirements_data["identities"] + if data["pubkey"] == identity.pubkey)) + identity.member = identity_data['membershipExpiresIn'] > 0 and not identity_data['outdistanced'] except errors.DuniterError as e: if e.ucode == errors.NO_MEMBER_MATCHING_PUB_OR_UID: pass diff --git a/src/sakia/data/repositories/meta.sql b/src/sakia/data/repositories/meta.sql index 902317994e6371af8a445750ded3d36d2cc8dcba..130c0817bf9d7a6604316df26ce14320f0e44637 100644 --- a/src/sakia/data/repositories/meta.sql +++ b/src/sakia/data/repositories/meta.sql @@ -6,12 +6,12 @@ CREATE TABLE IF NOT EXISTS identities( blockstamp VARCHAR(100), signature VARCHAR(100), ts INT, - written_on VARCHAR(100), - revoked_on VARCHAR(100), + written_on INT, + revoked_on INT, member BOOLEAN, ms_buid VARCHAR(100), ms_timestamp INT, - ms_written_on VARCHAR(100), + ms_written_on INT, ms_type VARCHAR(5), PRIMARY KEY (currency, pubkey, uid, blockstamp) ); @@ -62,7 +62,7 @@ CREATE TABLE IF NOT EXISTS certifications( block INT, ts INT, signature VARCHAR(100), - written_on VARCHAR(100), + written_on INT, PRIMARY KEY (currency, certifier, certified, block) ); diff --git a/src/sakia/gui/dialogs/certification/controller.py b/src/sakia/gui/dialogs/certification/controller.py index cba3047a05b17a43558b9d88ffde7af008ac4f3c..0b537e63db51744dbd15dcf246b22f88f9e788d5 100644 --- a/src/sakia/gui/dialogs/certification/controller.py +++ b/src/sakia/gui/dialogs/certification/controller.py @@ -40,7 +40,7 @@ class CertificationController(QObject): :return: a new Certification controller :rtype: CertificationController """ - view = CertificationView(parent.view, None, None) + view = CertificationView(parent.view if parent else None, None, None) model = CertificationModel(app) certification = cls(view, model, None, None) diff --git a/src/sakia/gui/dialogs/connection_cfg/controller.py b/src/sakia/gui/dialogs/connection_cfg/controller.py index c863915fd3a51d0a4fc8320abe11267c315c6af6..0901538858939c806e40a356c7b1a8caf3f7c846 100644 --- a/src/sakia/gui/dialogs/connection_cfg/controller.py +++ b/src/sakia/gui/dialogs/connection_cfg/controller.py @@ -159,7 +159,7 @@ class ConnectionConfigController(QObject): result, connection_identity = await self.model.publish_selfcert(self.model.connection.salt, password, self.view.scrypt_params) if result[0]: - self.view.show_success(self.model.notification()) + await self.view.show_success(self.model.notification()) else: self.view.show_error(self.model.notification(), result[1]) diff --git a/src/sakia/services/network.py b/src/sakia/services/network.py index 46b7502a324397fa3aeb31a58c6e6a2d55d259b6..118cca89b7c0fac6e302d4d0536509b76cf50343 100644 --- a/src/sakia/services/network.py +++ b/src/sakia/services/network.py @@ -74,10 +74,9 @@ class NetworkService(QObject): :return: """ connectors = [] - session = aiohttp.ClientSession() for node in node_processor.nodes(currency): - connectors.append(NodeConnector(node, session)) - network = cls(app, currency, node_processor, connectors, session, blockchain_service) + connectors.append(NodeConnector(node, None)) + network = cls(app, currency, node_processor, connectors, None, blockchain_service) return network def start_coroutines(self): @@ -181,6 +180,10 @@ class NetworkService(QObject): Start crawling which never stops. To stop this crawling, call "stop_crawling" method. """ + session = aiohttp.ClientSession() + for connector in self._connectors: + connector.session = session + self._must_crawl = True first_loop = True asyncio.ensure_future(self.discovery_loop()) diff --git a/src/sakia/tests/conftest.py b/src/sakia/tests/conftest.py index 1036ec13b371b360c9fba8a9a36bb5dbb6b34e77..eb5cf52bdad90b0bfce99e713e66f2e8591d0ba7 100644 --- a/src/sakia/tests/conftest.py +++ b/src/sakia/tests/conftest.py @@ -59,15 +59,6 @@ def app_data(sakia_options): def user_parameters(): return UserParameters() -@pytest.fixture -def connection(bob): - return Connection(currency="testcurrency", - pubkey=bob.key.pubkey, - salt=bob.salt, uid=bob.uid, - scrypt_N=4096, scrypt_r=4, scrypt_p=2, - blockstamp=bob.blockstamp, - password="bobpassword") - @pytest.fixture def application(event_loop, meta_repo, sakia_options, app_data, user_parameters): return Application(get_application(), event_loop, sakia_options, app_data, user_parameters, meta_repo, {}, {}, {}, {}, {}) @@ -88,6 +79,16 @@ def bob(): return mirage.User.create("testcurrency", "bob", "bobsalt", "bobpassword", BlockUID.empty()) +@pytest.fixture +def wrong_bob_uid(): + return mirage.User.create("testcurrency", "wrong_bob", "bobsalt", "bobpassword", BlockUID.empty()) + + +@pytest.fixture +def wrong_bob_pubkey(): + return mirage.User.create("testcurrency", "bob", "wrongbobsalt", "bobpassword", BlockUID.empty()) + + @pytest.fixture def simple_fake_server(fake_server, alice, bob): fake_server.forge.push(alice.identity()) @@ -99,23 +100,69 @@ def simple_fake_server(fake_server, alice, bob): fake_server.forge.forge_block() fake_server.forge.set_member(alice.key.pubkey, True) fake_server.forge.set_member(bob.key.pubkey, True) + fake_server.forge.generate_dividend() + fake_server.forge.forge_block() + fake_server.forge.forge_block() + fake_server.forge.generate_dividend() fake_server.forge.forge_block() fake_server.forge.forge_block() return fake_server @pytest.fixture -def application_with_one_connection(application, connection, simple_fake_server): +def application_with_one_connection(application, simple_fake_server, bob): + current_block = simple_fake_server.forge.blocks[-1] + last_ud_block = [b for b in simple_fake_server.forge.blocks if b.ud][-1] + previous_ud_block = [b for b in simple_fake_server.forge.blocks if b.ud][-2] + origin_block = simple_fake_server.forge.blocks[0] + connection = Connection(currency="testcurrency", + pubkey=bob.key.pubkey, + salt=bob.salt, uid=bob.uid, + scrypt_N=4096, scrypt_r=4, scrypt_p=2, + blockstamp=bob.blockstamp) application.db.connections_repo.insert(connection) + blockchain_parameters = BlockchainParameters(*origin_block.parameters) + blockchain = Blockchain(parameters=blockchain_parameters, + current_buid=current_block.blockUID, + current_members_count=current_block.members_count, + current_mass=simple_fake_server.forge.monetary_mass(current_block.number), + median_time=current_block.mediantime, + last_members_count=previous_ud_block.members_count, + last_ud=last_ud_block.ud, + last_ud_base=last_ud_block.unit_base, + last_ud_time=last_ud_block.mediantime, + previous_mass=simple_fake_server.forge.monetary_mass(previous_ud_block.number), + previous_members_count=previous_ud_block.members_count, + previous_ud=previous_ud_block.ud, + previous_ud_base=previous_ud_block.unit_base, + previous_ud_time=previous_ud_block.mediantime, + currency=simple_fake_server.forge.currency) + application.db.blockchains_repo.insert(blockchain) + bob_blockstamp = simple_fake_server.forge.user_identities[bob.key.pubkey].blockstamp + bob_user_identity = simple_fake_server.forge.user_identities[bob.key.pubkey] + bob_ms = bob_user_identity.memberships[-1] + bob_identity = Identity(currency=simple_fake_server.forge.currency, + pubkey=bob.key.pubkey, + uid=bob.uid, + blockstamp=bob_blockstamp, + signature=bob_user_identity.signature, + timestamp=simple_fake_server.forge.blocks[bob_blockstamp.number].mediantime, + written_on=None, + revoked_on=bob_user_identity.revoked_on, + member=bob_user_identity.member, + membership_buid=bob_ms.blockstamp, + membership_timestamp=simple_fake_server.forge.blocks[bob_ms.blockstamp.number].mediantime, + membership_type=bob_ms.type, + membership_written_on=simple_fake_server.forge.blocks[bob_ms.written_on].number) + application.db.identities_repo.insert(bob_identity) application.instanciate_services() application.db.nodes_repo.insert(Node(currency=simple_fake_server.forge.currency, pubkey=simple_fake_server.forge.key.pubkey, endpoints=simple_fake_server.peer_doc().endpoints, - peer_blockstamp=simple_fake_server.peer_doc().blockstamp, - uid=simple_fake_server.peer_doc.uid, - current_buid=BlockUID(simple_fake_server.current_block(None)["number"], - simple_fake_server.current_block(None)["hash"]), - current_ts=simple_fake_server.current_block(None)["medianTime"], + peer_blockstamp=simple_fake_server.peer_doc().blockUID, + uid="", + current_buid=BlockUID(current_block.number, current_block.sha_hash), + current_ts=current_block.mediantime, state=Node.ONLINE, software="duniter", version="0.40.2")) diff --git a/src/sakia/tests/functional/process_cfg_community/__init__.py b/src/sakia/tests/functional/process_cfg_community/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/sakia/tests/functional/process_cfg_community/test_add_community.py b/src/sakia/tests/functional/process_cfg_community/test_add_community.py deleted file mode 100644 index 25bb02af9a52bd0ea5109b9fc5a4b9c798141fee..0000000000000000000000000000000000000000 --- a/src/sakia/tests/functional/process_cfg_community/test_add_community.py +++ /dev/null @@ -1,235 +0,0 @@ -import asyncio -import time -import unittest - -from PyQt5.QtCore import QLocale, Qt -from PyQt5.QtTest import QTest -from PyQt5.QtWidgets import QDialog -from sakia.gui.process_cfg_community import ProcessConfigureCommunity - -from sakia.app import Application -from sakia.core.account import Account -from sakia.core.registry.identities import IdentitiesRegistry -from sakia.gui.password_asker import PasswordAskerDialog -from sakia.tests import QuamashTest -from sakia.tests.mocks.bma import new_blockchain, nice_blockchain - - -class ProcessAddCommunity(unittest.TestCase, QuamashTest): - def setUp(self): - self.setUpQuamash() - QLocale.setDefault(QLocale("en_GB")) - self.identities_registry = IdentitiesRegistry({}) - - self.application = Application(self.qapplication, self.lp, self.identities_registry) - self.application.preferences['notifications'] = False - # Salt/password : "testsakia/testsakia" - # Pubkey : 7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ - self.account = Account("testsakia", "7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ", - "john", [], [], [], self.identities_registry) - self.password_asker = PasswordAskerDialog(self.account) - self.password_asker.password = "testsakia" - self.password_asker.remember = True - - def tearDown(self): - self.tearDownQuamash() - - def test_register_community_empty_blockchain(self): - mock = new_blockchain.get_mock(self.lp) - time.sleep(2) - process_community = ProcessConfigureCommunity(self.application, - self.account, - None, self.password_asker) - - def close_dialog(): - if process_community.isVisible(): - process_community.close() - - async def exec_test(): - srv, port, url = await mock.create_server() - self.addCleanup(srv.close) - await asyncio.sleep(1) - QTest.mouseClick(process_community.lineedit_server, Qt.LeftButton) - QTest.keyClicks(process_community.lineedit_server, "127.0.0.1") - QTest.mouseDClick(process_community.spinbox_port, Qt.LeftButton) - process_community.spinbox_port.setValue(port) - self.assertEqual(process_community.stacked_pages.currentWidget(), - process_community.page_node, - msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName())) - self.assertEqual(process_community.lineedit_server.text(), "127.0.0.1") - self.assertEqual(process_community.spinbox_port.value(), port) - QTest.mouseClick(process_community.button_register, Qt.LeftButton) - await asyncio.sleep(1) - self.assertEqual(process_community.label_error.text(), "Broadcasting identity...") - await asyncio.sleep(1) - - self.assertEqual(process_community.stacked_pages.currentWidget(), - process_community.page_add_nodes, - msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName())) - await mock.close() - QTest.mouseClick(process_community.button_next, Qt.LeftButton) - - self.lp.call_later(15, close_dialog) - asyncio.ensure_future(exec_test()) - self.lp.run_until_complete(process_community.async_exec()) - self.assertEqual(process_community.result(), QDialog.Accepted) - - def test_connect_community_empty_blockchain(self): - mock = new_blockchain.get_mock(self.lp) - time.sleep(2) - process_community = ProcessConfigureCommunity(self.application, - self.account, - None, self.password_asker) - - def close_dialog(): - if process_community.isVisible(): - process_community.close() - - async def exec_test(): - srv, port, url = await mock.create_server() - self.addCleanup(srv.close) - - await asyncio.sleep(1) - QTest.mouseClick(process_community.lineedit_server, Qt.LeftButton) - QTest.keyClicks(process_community.lineedit_server, "127.0.0.1") - QTest.mouseDClick(process_community.spinbox_port, Qt.LeftButton) - process_community.spinbox_port.setValue(port) - self.assertEqual(process_community.stacked_pages.currentWidget(), - process_community.page_node, - msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName())) - self.assertEqual(process_community.lineedit_server.text(), "127.0.0.1") - self.assertEqual(process_community.spinbox_port.value(), port) - QTest.mouseClick(process_community.button_connect, Qt.LeftButton) - await asyncio.sleep(2) - self.assertEqual(mock.get_request(0).method, 'GET') - self.assertEqual(mock.get_request(0).url, '/network/peering') - self.assertEqual(process_community.stacked_pages.currentWidget(), - process_community.page_node, - msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName())) - self.assertEqual(process_community.label_error.text(), "Could not find your identity on the network.") - await mock.close() - process_community.close() - - self.lp.call_later(15, close_dialog) - asyncio.ensure_future(exec_test()) - self.lp.run_until_complete(process_community.async_exec()) - - def test_connect_community_wrong_pubkey(self): - mock = nice_blockchain.get_mock(self.lp) - time.sleep(2) - self.account.pubkey = "wrong_pubkey" - process_community = ProcessConfigureCommunity(self.application, - self.account, - None, self.password_asker) - - def close_dialog(): - if process_community.isVisible(): - process_community.close() - - async def exec_test(): - srv, port, url = await mock.create_server() - self.addCleanup(srv.close) - await asyncio.sleep(1) - QTest.mouseClick(process_community.lineedit_server, Qt.LeftButton) - QTest.keyClicks(process_community.lineedit_server, "127.0.0.1") - QTest.mouseDClick(process_community.spinbox_port, Qt.LeftButton) - process_community.spinbox_port.setValue(port) - self.assertEqual(process_community.stacked_pages.currentWidget(), - process_community.page_node, - msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName())) - self.assertEqual(process_community.lineedit_server.text(), "127.0.0.1") - self.assertEqual(process_community.spinbox_port.value(), port) - QTest.mouseClick(process_community.button_connect, Qt.LeftButton) - await asyncio.sleep(1) - self.assertEqual(mock.get_request(0).method, 'GET') - self.assertEqual(mock.get_request(0).url, '/network/peering') - self.assertEqual(mock.get_request(1).method, 'GET') - self.assertEqual(mock.get_request(1).url, - '/wot/certifiers-of/wrong_pubkey') - self.assertEqual(process_community.label_error.text(), """Your pubkey or UID is different on the network. -Yours : wrong_pubkey, the network : 7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ""") - await mock.close() - process_community.close() - - self.lp.call_later(15, close_dialog) - asyncio.ensure_future(exec_test()) - self.lp.run_until_complete(process_community.async_exec()) - self.assertEqual(process_community.result(), QDialog.Rejected) - - def test_connect_community_wrong_uid(self): - mock = nice_blockchain.get_mock(self.lp) - time.sleep(2) - self.account.name = "wrong_uid" - process_community = ProcessConfigureCommunity(self.application, - self.account, - None, self.password_asker) - - def close_dialog(): - if process_community.isVisible(): - process_community.close() - - async def exec_test(): - srv, port, url = await mock.create_server() - self.addCleanup(srv.close) - await asyncio.sleep(1) - QTest.mouseClick(process_community.lineedit_server, Qt.LeftButton) - QTest.keyClicks(process_community.lineedit_server, "127.0.0.1") - QTest.mouseDClick(process_community.spinbox_port, Qt.LeftButton) - process_community.spinbox_port.setValue(port) - self.assertEqual(process_community.stacked_pages.currentWidget(), - process_community.page_node, - msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName())) - self.assertEqual(process_community.lineedit_server.text(), "127.0.0.1") - self.assertEqual(process_community.spinbox_port.value(), port) - QTest.mouseClick(process_community.button_connect, Qt.LeftButton) - await asyncio.sleep(1) - self.assertEqual(mock.get_request(0).method, 'GET') - self.assertEqual(mock.get_request(0).url, '/network/peering') - self.assertEqual(process_community.label_error.text(), """Your pubkey or UID is different on the network. -Yours : wrong_uid, the network : john""") - await mock.close() - process_community.close() - - self.lp.call_later(15, close_dialog) - asyncio.ensure_future(exec_test()) - self.lp.run_until_complete(process_community.async_exec()) - self.assertEqual(process_community.result(), QDialog.Rejected) - - def test_connect_community_success(self): - mock = nice_blockchain.get_mock(self.lp) - time.sleep(2) - process_community = ProcessConfigureCommunity(self.application, - self.account, - None, self.password_asker) - - def close_dialog(): - if process_community.isVisible(): - process_community.close() - - async def exec_test(): - srv, port, url = await mock.create_server() - QTest.mouseClick(process_community.lineedit_server, Qt.LeftButton) - QTest.keyClicks(process_community.lineedit_server, "127.0.0.1") - QTest.mouseDClick(process_community.spinbox_port, Qt.LeftButton) - process_community.spinbox_port.setValue(port) - self.assertEqual(process_community.stacked_pages.currentWidget(), - process_community.page_node, - msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName())) - self.assertEqual(process_community.lineedit_server.text(), "127.0.0.1") - self.assertEqual(process_community.spinbox_port.value(), port) - QTest.mouseClick(process_community.button_connect, Qt.LeftButton) - await asyncio.sleep(1) - self.assertEqual(mock.get_request(0).method, 'GET') - self.assertEqual(mock.get_request(0).url, '/network/peering') - self.assertEqual(mock.get_request(1).method, 'GET') - self.assertEqual(mock.get_request(1).url, - '/wot/certifiers-of/7Aqw6Efa9EzE7gtsc8SveLLrM7gm6NEGoywSv4FJx6pZ') - self.assertEqual(process_community.stacked_pages.currentWidget(), - process_community.page_add_nodes, - msg="Current widget : {0}".format(process_community.stacked_pages.currentWidget().objectName())) - await mock.close() - QTest.mouseClick(process_community.button_next, Qt.LeftButton) - - self.lp.call_later(15, close_dialog) - asyncio.ensure_future(exec_test()) - self.lp.run_until_complete(process_community.async_exec()) \ No newline at end of file diff --git a/src/sakia/tests/functional/test_certification_dialog.py b/src/sakia/tests/functional/test_certification_dialog.py new file mode 100644 index 0000000000000000000000000000000000000000..a95f107c68f76181e7f9429b509c5050a4288d9a --- /dev/null +++ b/src/sakia/tests/functional/test_certification_dialog.py @@ -0,0 +1,30 @@ +import asyncio +import pytest +from duniterpy.documents import Certification +from PyQt5.QtCore import QLocale, Qt +from PyQt5.QtTest import QTest +from PyQt5.QtWidgets import QDialogButtonBox, QApplication, QMessageBox +from sakia.gui.dialogs.certification.controller import CertificationController + + +@pytest.mark.asyncio +async def test_certification_init_community(application_with_one_connection, fake_server, bob, alice): + certification_dialog = CertificationController.create(None, application_with_one_connection) + + def close_dialog(): + if certification_dialog.view.isVisible(): + certification_dialog.view.close() + + async def exec_test(): + certification_dialog.model.connection.password = bob.password + certification_dialog.view.radio_pubkey.setChecked(True) + assert certification_dialog.view.edit_pubkey.isEnabled() is True + QTest.keyClicks(certification_dialog.view.edit_pubkey, alice.key.pubkey) + QTest.mouseClick(certification_dialog.view.button_box.button(QDialogButtonBox.Ok), Qt.LeftButton) + await asyncio.sleep(0.1) + assert Certification is type(fake_server.forge.pool[0]) + + application_with_one_connection.loop.call_later(10, close_dialog) + asyncio.ensure_future(exec_test()) + await certification_dialog.async_exec() + await fake_server.close() diff --git a/src/sakia/tests/functional/test_connection_cfg_dialog.py b/src/sakia/tests/functional/test_connection_cfg_dialog.py index 03c41d68ca1bf7edcfea991cdb222076a5335ed8..d7f4212400b5608b4c177c783e841b44aa961c2c 100644 --- a/src/sakia/tests/functional/test_connection_cfg_dialog.py +++ b/src/sakia/tests/functional/test_connection_cfg_dialog.py @@ -1,8 +1,6 @@ import asyncio -import logging -import sys import pytest -from PyQt5.QtCore import QLocale, Qt +from PyQt5.QtCore import Qt from PyQt5.QtTest import QTest from sakia.data.processors import ConnectionsProcessor from sakia.gui.dialogs.connection_cfg import ConnectionConfigController @@ -85,3 +83,60 @@ async def test_connect(application, simple_fake_server, bob): asyncio.ensure_future(exec_test()) await connection_config_dialog.async_exec() await simple_fake_server.close() + + +@pytest.mark.asyncio +async def test_connect_wrong_uid(application, simple_fake_server, wrong_bob_uid, bob): + connection_config_dialog = ConnectionConfigController.create_connection(None, application) + + def close_dialog(): + if connection_config_dialog.view.isVisible(): + connection_config_dialog.view.close() + + async def exec_test(): + await asyncio.sleep(1) + QTest.keyClicks(connection_config_dialog.view.edit_server, simple_fake_server.peer_doc().endpoints[0].ipv4) + connection_config_dialog.view.spinbox_port.setValue(simple_fake_server.peer_doc().endpoints[0].port) + assert connection_config_dialog.view.stacked_pages.currentWidget() == connection_config_dialog.view.page_node + QTest.mouseClick(connection_config_dialog.view.button_connect, Qt.LeftButton) + await asyncio.sleep(1) + assert connection_config_dialog.view.stacked_pages.currentWidget() == connection_config_dialog.view.page_connection + assert_key_parameters_behaviour(connection_config_dialog, wrong_bob_uid) + QTest.mouseClick(connection_config_dialog.view.button_next, Qt.LeftButton) + assert connection_config_dialog.view.label_info.text(), """Your pubkey or UID is different on the network. +Yours : {0}, the network : {1}""".format(wrong_bob_uid.uid, bob.uid) + connection_config_dialog.view.close() + + application.loop.call_later(10, close_dialog) + asyncio.ensure_future(exec_test()) + await connection_config_dialog.async_exec() + await simple_fake_server.close() + + +@pytest.mark.asyncio +async def test_connect_wrong_pubkey(application, simple_fake_server, wrong_bob_pubkey, bob): + connection_config_dialog = ConnectionConfigController.create_connection(None, application) + + def close_dialog(): + if connection_config_dialog.view.isVisible(): + connection_config_dialog.view.close() + + async def exec_test(): + await asyncio.sleep(1) + QTest.keyClicks(connection_config_dialog.view.edit_server, simple_fake_server.peer_doc().endpoints[0].ipv4) + connection_config_dialog.view.spinbox_port.setValue(simple_fake_server.peer_doc().endpoints[0].port) + assert connection_config_dialog.view.stacked_pages.currentWidget() == connection_config_dialog.view.page_node + QTest.mouseClick(connection_config_dialog.view.button_connect, Qt.LeftButton) + await asyncio.sleep(1) + assert connection_config_dialog.view.stacked_pages.currentWidget() == connection_config_dialog.view.page_connection + assert_key_parameters_behaviour(connection_config_dialog, wrong_bob_pubkey) + QTest.mouseClick(connection_config_dialog.view.button_next, Qt.LeftButton) + assert connection_config_dialog.view.label_info.text(), """Your pubkey or UID is different on the network. +Yours : {0}, the network : {1}""".format(wrong_bob_pubkey.pubkey, bob.pubkey) + connection_config_dialog.view.close() + + application.loop.call_later(10, close_dialog) + asyncio.ensure_future(exec_test()) + await connection_config_dialog.async_exec() + await simple_fake_server.close() +