From f93a863f5f087cf91453e3efa1e5f9ff82fc2bcc Mon Sep 17 00:00:00 2001 From: holger krekel Date: Tue, 9 Jun 2020 09:30:48 +0200 Subject: [PATCH] fix and steamline tests and test setup --- python/src/deltachat/testplugin.py | 2 + python/tests/test_account.py | 105 +++++++---------------------- 2 files changed, 28 insertions(+), 79 deletions(-) diff --git a/python/src/deltachat/testplugin.py b/python/src/deltachat/testplugin.py index 933b2c874..591cd6a9e 100644 --- a/python/src/deltachat/testplugin.py +++ b/python/src/deltachat/testplugin.py @@ -403,6 +403,8 @@ def acfactory(pytestconfig, tmpdir, request, session_liveconfig, data): if sending: chat.send_text("hi") acc2._evtracker.wait_next_incoming_message() + acc2.create_chat(acc).send_text("hi back") + acc._evtracker.wait_next_incoming_message() am = AccountMaker() request.addfinalizer(am.finalize) diff --git a/python/tests/test_account.py b/python/tests/test_account.py index 94546cf81..9276a876a 100644 --- a/python/tests/test_account.py +++ b/python/tests/test_account.py @@ -201,9 +201,7 @@ class TestOfflineChat: def test_group_chat_creation(self, ac1): contact1 = ac1.create_contact("some1@hello.com", name="some1") contact2 = ac1.create_contact("some2@hello.com", name="some2") - chat = ac1.create_group_chat(name="title1") - chat.add_contact(contact1) - chat.add_contact(contact2) + chat = ac1.create_group_chat(name="title1", contacts=[contact1, contact2]) assert chat.get_name() == "title1" assert contact1 in chat.get_contacts() assert contact2 in chat.get_contacts() @@ -233,9 +231,7 @@ class TestOfflineChat: ac1._evtracker.get_matching("DC_EVENT_WARNING") contact1 = ac1.create_contact("some1@hello.com", name="some1") contact2 = ac1.create_contact("some2@hello.com", name="some2") - chat = ac1.create_group_chat(name="title1") - chat.add_contact(contact1) - chat.add_contact(contact2) + chat = ac1.create_group_chat(name="title1", contacts=[contact1, contact2]) assert chat.get_name() == "title1" assert contact1 in chat.get_contacts() assert contact2 in chat.get_contacts() @@ -1336,7 +1332,6 @@ class TestOnlineAccount: def test_add_remove_member_remote_events(self, acfactory, lp): ac1, ac2 = acfactory.get_two_online_accounts() ac1_addr = ac1.get_config("addr") - ac2_addr = ac2.get_config("addr") # activate local plugin for ac2 in_list = queue.Queue() @@ -1366,9 +1361,7 @@ class TestOnlineAccount: ac2.add_account_plugin(InPlugin()) lp.sec("ac1: create group chat with ac2") - chat = ac1.create_group_chat("hello") - contact = ac1.create_contact(ac2_addr) - chat.add_contact(contact) + chat = ac1.create_group_chat("hello", contacts=[ac2]) lp.sec("ac1: send a message to group chat to promote the group") chat.send_text("afterwards promoted") @@ -1381,14 +1374,13 @@ class TestOnlineAccount: lp.sec("ac1: add address2") # note that if the above create_chat() would not # happen we would not receive a proper member_added event - contact2 = ac1.create_contact(addr="notexistingaccountihope@testrun.org") - chat.add_contact(contact2) + contact2 = chat.add_contact("devnull@testrun.org") ev = in_list.get(timeout=10) assert ev.action == "chat-modified" ev = in_list.get(timeout=10) assert ev.action == "added" assert ev.message.get_sender_contact().addr == ac1_addr - assert ev.contact.addr == "notexistingaccountihope@testrun.org" + assert ev.contact.addr == "devnull@testrun.org" lp.sec("ac1: remove address2") chat.remove_contact(contact2) @@ -1400,7 +1392,7 @@ class TestOnlineAccount: assert ev.message.get_sender_contact().addr == ac1_addr lp.sec("ac1: remove ac2 contact from chat") - chat.remove_contact(contact) + chat.remove_contact(ac2) ev = in_list.get(timeout=10) assert ev.action == "chat-modified" ev = in_list.get(timeout=10) @@ -1428,13 +1420,11 @@ class TestOnlineAccount: assert chat.get_profile_image() lp.sec("ac2: check that initial message arrived") - c1 = ac2.create_contact(addr=ac1.get_config("addr")) - c1.create_chat() + ac2.create_contact(ac1).create_chat() ac2._evtracker.get_matching("DC_EVENT_MSGS_CHANGED") lp.sec("ac1: add ac2 to promoted group chat") - c2 = ac1.create_contact(addr=ac2.get_config("addr")) - chat.add_contact(c2) # sends one message + chat.add_contact(ac2) # sends one message lp.sec("ac1: send a first message to ac2") chat.send_text("hi") # sends another message @@ -1518,38 +1508,21 @@ class TestOnlineAccount: """ lp.sec("creating and configuring three accounts") - ac1, ac2, ac3 = acfactory.get_many_online_accounts(3, quiet=False) + ac1, ac2, ac3 = acfactory.get_many_online_accounts(3) - chat12, chat21 = acfactory.get_chats(ac1, ac2) - chat13, chat31 = acfactory.get_chats(ac1, ac3) - - contact2 = ac1.create_contact(ac2.get_config("addr")) - contact3 = ac1.create_contact(ac3.get_config("addr")) - - lp.sec("sending keys to ac1") - chat21.send_text("hi 1") - msg = ac1._evtracker.wait_next_incoming_message() - assert msg.text == "hi 1" - - chat31.send_text("hi 2") - msg = ac1._evtracker.wait_next_incoming_message() - assert msg.text == "hi 2" - - lp.sec("ac3 stops") - ac3.stop_io() + acfactory.accept_each_other([ac1, ac2, ac3], sending=True) lp.sec("ac3 reinstalls DC and generates a new key") + ac3.stop_io() ac4 = acfactory.clone_online_account(ac3, pre_generated_key=False) ac4.wait_configure_finish() # Create contacts to make sure incoming messages are not treated as contact requests - chat41 = acfactory.get_chat(ac4, ac1) - chat42 = acfactory.get_chat(ac4, ac2) + chat41 = ac4.create_chat(ac1) + chat42 = ac4.create_chat(ac2) ac4.start_io() lp.sec("ac1: creating group chat with 2 other members") - chat = ac1.create_group_chat("title") - chat.add_contact(contact2) - chat.add_contact(contact3) + chat = ac1.create_group_chat("title", contacts=[ac2, ac3]) lp.sec("ac1: send message to new group chat") msg = chat.send_text("hello") @@ -1580,20 +1553,18 @@ class TestOnlineAccount: lp.sec("ac4: replying to ac1 and ac2") # Otherwise reply becomes a contact request. - chat24 = acfactory.get_chat(ac2, ac4) - chat41.send_text("I can't decrypt your message, ac1!") chat42.send_text("I can't decrypt your message, ac2!") msg = ac1._evtracker.wait_next_incoming_message() assert msg.text == "I can't decrypt your message, ac1!" assert msg.is_encrypted(), "Message is not encrypted" - assert msg.chat == chat13 + assert msg.chat == ac1.create_chat(ac3) msg = ac2._evtracker.wait_next_incoming_message() assert msg.text == "I can't decrypt your message, ac2!" assert msg.is_encrypted(), "Message is not encrypted" - assert msg.chat == chat24 + assert msg.chat == ac2.create_chat(ac4) class TestGroupStressTests: @@ -1671,66 +1642,42 @@ class TestGroupStressTests: Then it removes ac2, removes ac3 and adds ac2 back. ac2 did not see that ac3 is removed, so it should rebuild member list from scratch. """ - lp.sec("creating and configuring five accounts") - accounts = [acfactory.get_online_configuring_account() for i in range(3)] - for acc in accounts: - acc.wait_configure_finish() - acc.start_io() - ac1 = accounts.pop() - - lp.sec("ac1: setting up contacts with 2 other members") - contacts = [] - for acc, name in zip(accounts, ["ac2", "ac3"]): - contact = ac1.create_contact(acc.get_config("addr"), name=name) - contacts.append(contact) - - # make sure we accept the "hi" message - contact.create_chat() - - # make sure the other side accepts our messages - chat1 = acc.create_chat(ac1) - - # send a message to get the contact key via autocrypt header - chat1.send_text("hi") - msg = ac1._evtracker.wait_next_incoming_message() - assert msg.text == "hi" - - ac2, ac3 = accounts + lp.sec("setting up accounts, accepted with each other") + accounts = acfactory.get_many_online_accounts(3) + acfactory.accept_each_other(accounts, sending=True) + ac1, ac2, ac3 = accounts lp.sec("ac1: creating group chat with 2 other members") - chat = ac1.create_group_chat("title1") - for contact in contacts: - chat.add_contact(contact) + chat = ac1.create_group_chat("title1", contacts=[ac2, ac3]) assert not chat.is_promoted() lp.sec("ac1: send message to new group chat") msg = chat.send_text("hello") - assert chat.is_promoted() - assert msg.is_encrypted() + assert chat.is_promoted() and msg.is_encrypted() num_contacts = len(chat.get_contacts()) assert num_contacts == 3 lp.sec("checking that the chat arrived correctly") - for ac in accounts: + for ac in accounts[1:]: msg = ac._evtracker.wait_next_incoming_message() assert msg.text == "hello" print("chat is", msg.chat) assert len(msg.chat.get_contacts()) == 3 lp.sec("ac1: removing ac2") - chat.remove_contact(contacts[0]) + chat.remove_contact(ac2) lp.sec("ac2: wait for a message about removal from the chat") msg = ac2._evtracker.wait_next_incoming_message() lp.sec("ac1: removing ac3") - chat.remove_contact(contacts[1]) + chat.remove_contact(ac3) lp.sec("ac1: adding ac2 back") # Group is promoted, message is sent automatically assert chat.is_promoted() - chat.add_contact(contacts[0]) + chat.add_contact(ac2) lp.sec("ac2: check that ac3 is removed") msg = ac2._evtracker.wait_next_incoming_message()