fix and steamline tests and test setup

This commit is contained in:
holger krekel
2020-06-09 09:30:48 +02:00
parent f263843c5f
commit f93a863f5f
2 changed files with 28 additions and 79 deletions

View File

@@ -403,6 +403,8 @@ def acfactory(pytestconfig, tmpdir, request, session_liveconfig, data):
if sending: if sending:
chat.send_text("hi") chat.send_text("hi")
acc2._evtracker.wait_next_incoming_message() acc2._evtracker.wait_next_incoming_message()
acc2.create_chat(acc).send_text("hi back")
acc._evtracker.wait_next_incoming_message()
am = AccountMaker() am = AccountMaker()
request.addfinalizer(am.finalize) request.addfinalizer(am.finalize)

View File

@@ -201,9 +201,7 @@ class TestOfflineChat:
def test_group_chat_creation(self, ac1): def test_group_chat_creation(self, ac1):
contact1 = ac1.create_contact("some1@hello.com", name="some1") contact1 = ac1.create_contact("some1@hello.com", name="some1")
contact2 = ac1.create_contact("some2@hello.com", name="some2") contact2 = ac1.create_contact("some2@hello.com", name="some2")
chat = ac1.create_group_chat(name="title1") chat = ac1.create_group_chat(name="title1", contacts=[contact1, contact2])
chat.add_contact(contact1)
chat.add_contact(contact2)
assert chat.get_name() == "title1" assert chat.get_name() == "title1"
assert contact1 in chat.get_contacts() assert contact1 in chat.get_contacts()
assert contact2 in chat.get_contacts() assert contact2 in chat.get_contacts()
@@ -233,9 +231,7 @@ class TestOfflineChat:
ac1._evtracker.get_matching("DC_EVENT_WARNING") ac1._evtracker.get_matching("DC_EVENT_WARNING")
contact1 = ac1.create_contact("some1@hello.com", name="some1") contact1 = ac1.create_contact("some1@hello.com", name="some1")
contact2 = ac1.create_contact("some2@hello.com", name="some2") contact2 = ac1.create_contact("some2@hello.com", name="some2")
chat = ac1.create_group_chat(name="title1") chat = ac1.create_group_chat(name="title1", contacts=[contact1, contact2])
chat.add_contact(contact1)
chat.add_contact(contact2)
assert chat.get_name() == "title1" assert chat.get_name() == "title1"
assert contact1 in chat.get_contacts() assert contact1 in chat.get_contacts()
assert contact2 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): def test_add_remove_member_remote_events(self, acfactory, lp):
ac1, ac2 = acfactory.get_two_online_accounts() ac1, ac2 = acfactory.get_two_online_accounts()
ac1_addr = ac1.get_config("addr") ac1_addr = ac1.get_config("addr")
ac2_addr = ac2.get_config("addr")
# activate local plugin for ac2 # activate local plugin for ac2
in_list = queue.Queue() in_list = queue.Queue()
@@ -1366,9 +1361,7 @@ class TestOnlineAccount:
ac2.add_account_plugin(InPlugin()) ac2.add_account_plugin(InPlugin())
lp.sec("ac1: create group chat with ac2") lp.sec("ac1: create group chat with ac2")
chat = ac1.create_group_chat("hello") chat = ac1.create_group_chat("hello", contacts=[ac2])
contact = ac1.create_contact(ac2_addr)
chat.add_contact(contact)
lp.sec("ac1: send a message to group chat to promote the group") lp.sec("ac1: send a message to group chat to promote the group")
chat.send_text("afterwards promoted") chat.send_text("afterwards promoted")
@@ -1381,14 +1374,13 @@ class TestOnlineAccount:
lp.sec("ac1: add address2") lp.sec("ac1: add address2")
# note that if the above create_chat() would not # note that if the above create_chat() would not
# happen we would not receive a proper member_added event # happen we would not receive a proper member_added event
contact2 = ac1.create_contact(addr="notexistingaccountihope@testrun.org") contact2 = chat.add_contact("devnull@testrun.org")
chat.add_contact(contact2)
ev = in_list.get(timeout=10) ev = in_list.get(timeout=10)
assert ev.action == "chat-modified" assert ev.action == "chat-modified"
ev = in_list.get(timeout=10) ev = in_list.get(timeout=10)
assert ev.action == "added" assert ev.action == "added"
assert ev.message.get_sender_contact().addr == ac1_addr 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") lp.sec("ac1: remove address2")
chat.remove_contact(contact2) chat.remove_contact(contact2)
@@ -1400,7 +1392,7 @@ class TestOnlineAccount:
assert ev.message.get_sender_contact().addr == ac1_addr assert ev.message.get_sender_contact().addr == ac1_addr
lp.sec("ac1: remove ac2 contact from chat") lp.sec("ac1: remove ac2 contact from chat")
chat.remove_contact(contact) chat.remove_contact(ac2)
ev = in_list.get(timeout=10) ev = in_list.get(timeout=10)
assert ev.action == "chat-modified" assert ev.action == "chat-modified"
ev = in_list.get(timeout=10) ev = in_list.get(timeout=10)
@@ -1428,13 +1420,11 @@ class TestOnlineAccount:
assert chat.get_profile_image() assert chat.get_profile_image()
lp.sec("ac2: check that initial message arrived") lp.sec("ac2: check that initial message arrived")
c1 = ac2.create_contact(addr=ac1.get_config("addr")) ac2.create_contact(ac1).create_chat()
c1.create_chat()
ac2._evtracker.get_matching("DC_EVENT_MSGS_CHANGED") ac2._evtracker.get_matching("DC_EVENT_MSGS_CHANGED")
lp.sec("ac1: add ac2 to promoted group chat") lp.sec("ac1: add ac2 to promoted group chat")
c2 = ac1.create_contact(addr=ac2.get_config("addr")) chat.add_contact(ac2) # sends one message
chat.add_contact(c2) # sends one message
lp.sec("ac1: send a first message to ac2") lp.sec("ac1: send a first message to ac2")
chat.send_text("hi") # sends another message chat.send_text("hi") # sends another message
@@ -1518,38 +1508,21 @@ class TestOnlineAccount:
""" """
lp.sec("creating and configuring three accounts") 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) acfactory.accept_each_other([ac1, ac2, ac3], sending=True)
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()
lp.sec("ac3 reinstalls DC and generates a new key") lp.sec("ac3 reinstalls DC and generates a new key")
ac3.stop_io()
ac4 = acfactory.clone_online_account(ac3, pre_generated_key=False) ac4 = acfactory.clone_online_account(ac3, pre_generated_key=False)
ac4.wait_configure_finish() ac4.wait_configure_finish()
# Create contacts to make sure incoming messages are not treated as contact requests # Create contacts to make sure incoming messages are not treated as contact requests
chat41 = acfactory.get_chat(ac4, ac1) chat41 = ac4.create_chat(ac1)
chat42 = acfactory.get_chat(ac4, ac2) chat42 = ac4.create_chat(ac2)
ac4.start_io() ac4.start_io()
lp.sec("ac1: creating group chat with 2 other members") lp.sec("ac1: creating group chat with 2 other members")
chat = ac1.create_group_chat("title") chat = ac1.create_group_chat("title", contacts=[ac2, ac3])
chat.add_contact(contact2)
chat.add_contact(contact3)
lp.sec("ac1: send message to new group chat") lp.sec("ac1: send message to new group chat")
msg = chat.send_text("hello") msg = chat.send_text("hello")
@@ -1580,20 +1553,18 @@ class TestOnlineAccount:
lp.sec("ac4: replying to ac1 and ac2") lp.sec("ac4: replying to ac1 and ac2")
# Otherwise reply becomes a contact request. # Otherwise reply becomes a contact request.
chat24 = acfactory.get_chat(ac2, ac4)
chat41.send_text("I can't decrypt your message, ac1!") chat41.send_text("I can't decrypt your message, ac1!")
chat42.send_text("I can't decrypt your message, ac2!") chat42.send_text("I can't decrypt your message, ac2!")
msg = ac1._evtracker.wait_next_incoming_message() msg = ac1._evtracker.wait_next_incoming_message()
assert msg.text == "I can't decrypt your message, ac1!" assert msg.text == "I can't decrypt your message, ac1!"
assert msg.is_encrypted(), "Message is not encrypted" 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() msg = ac2._evtracker.wait_next_incoming_message()
assert msg.text == "I can't decrypt your message, ac2!" assert msg.text == "I can't decrypt your message, ac2!"
assert msg.is_encrypted(), "Message is not encrypted" assert msg.is_encrypted(), "Message is not encrypted"
assert msg.chat == chat24 assert msg.chat == ac2.create_chat(ac4)
class TestGroupStressTests: class TestGroupStressTests:
@@ -1671,66 +1642,42 @@ class TestGroupStressTests:
Then it removes ac2, removes ac3 and adds ac2 back. 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. ac2 did not see that ac3 is removed, so it should rebuild member list from scratch.
""" """
lp.sec("creating and configuring five accounts") lp.sec("setting up accounts, accepted with each other")
accounts = [acfactory.get_online_configuring_account() for i in range(3)] accounts = acfactory.get_many_online_accounts(3)
for acc in accounts: acfactory.accept_each_other(accounts, sending=True)
acc.wait_configure_finish() ac1, ac2, ac3 = accounts
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("ac1: creating group chat with 2 other members") lp.sec("ac1: creating group chat with 2 other members")
chat = ac1.create_group_chat("title1") chat = ac1.create_group_chat("title1", contacts=[ac2, ac3])
for contact in contacts:
chat.add_contact(contact)
assert not chat.is_promoted() assert not chat.is_promoted()
lp.sec("ac1: send message to new group chat") lp.sec("ac1: send message to new group chat")
msg = chat.send_text("hello") msg = chat.send_text("hello")
assert chat.is_promoted() assert chat.is_promoted() and msg.is_encrypted()
assert msg.is_encrypted()
num_contacts = len(chat.get_contacts()) num_contacts = len(chat.get_contacts())
assert num_contacts == 3 assert num_contacts == 3
lp.sec("checking that the chat arrived correctly") lp.sec("checking that the chat arrived correctly")
for ac in accounts: for ac in accounts[1:]:
msg = ac._evtracker.wait_next_incoming_message() msg = ac._evtracker.wait_next_incoming_message()
assert msg.text == "hello" assert msg.text == "hello"
print("chat is", msg.chat) print("chat is", msg.chat)
assert len(msg.chat.get_contacts()) == 3 assert len(msg.chat.get_contacts()) == 3
lp.sec("ac1: removing ac2") 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") lp.sec("ac2: wait for a message about removal from the chat")
msg = ac2._evtracker.wait_next_incoming_message() msg = ac2._evtracker.wait_next_incoming_message()
lp.sec("ac1: removing ac3") lp.sec("ac1: removing ac3")
chat.remove_contact(contacts[1]) chat.remove_contact(ac3)
lp.sec("ac1: adding ac2 back") lp.sec("ac1: adding ac2 back")
# Group is promoted, message is sent automatically # Group is promoted, message is sent automatically
assert chat.is_promoted() assert chat.is_promoted()
chat.add_contact(contacts[0]) chat.add_contact(ac2)
lp.sec("ac2: check that ac3 is removed") lp.sec("ac2: check that ac3 is removed")
msg = ac2._evtracker.wait_next_incoming_message() msg = ac2._evtracker.wait_next_incoming_message()