diff --git a/python/tests/conftest.py b/python/tests/conftest.py index f0fec7c7c..05896cb8c 100644 --- a/python/tests/conftest.py +++ b/python/tests/conftest.py @@ -85,16 +85,21 @@ class SessionLiveConfigFromFile: class SessionLiveConfigFromURL: def __init__(self, url, create_token): self.configlist = [] - for i in range(2): - res = requests.post(url, json={"token_create_user": int(create_token)}) + self.url = url + self.create_token = create_token + + def get(self, index): + try: + return self.configlist[index] + except IndexError: + assert index == len(self.configlist), index + res = requests.post(self.url, json={"token_create_user": int(self.create_token)}) if res.status_code != 200: pytest.skip("creating newtmpuser failed {!r}".format(res)) d = res.json() config = dict(addr=d["email"], mail_pw=d["password"]) self.configlist.append(config) - - def get(self, index): - return self.configlist[index] + return config def exists(self): return bool(self.configlist) diff --git a/python/tests/test_account.py b/python/tests/test_account.py index cc6db441f..352661501 100644 --- a/python/tests/test_account.py +++ b/python/tests/test_account.py @@ -382,6 +382,22 @@ class TestOfflineChat: assert not res.is_ask_verifygroup() assert res.contact_id == 10 + def test_group_chat_many_members_add_remove(self, ac1, lp): + lp.sec("ac1: creating group chat with 10 other members") + chat = ac1.create_group_chat(name="title1") + contacts = [] + for i in range(10): + contact = ac1.create_contact("some{}@example.org".format(i)) + contacts.append(contact) + chat.add_contact(contact) + + num_contacts = len(chat.get_contacts()) + assert num_contacts == 11 + + lp.sec("ac1: removing two contacts and checking things are right") + chat.remove_contact(contacts[9]) + chat.remove_contact(contacts[3]) + assert len(chat.get_contacts()) == 9 class TestOnlineAccount: def get_chat(self, ac1, ac2, both_created=False): @@ -1057,6 +1073,48 @@ class TestOnlineAccount: assert not locations3 +class TestGroupStressTests: + def test_group_many_members_add_leave_remove(self, acfactory, lp): + lp.sec("creating and configuring five accounts") + ac1 = acfactory.get_online_configuring_account() + accounts = [acfactory.get_online_configuring_account() for i in range(3)] + wait_configuration_progress(ac1, 1000) + for acc in accounts: + wait_configuration_progress(acc, 1000) + + lp.sec("ac1: creating group chat with 3 other members") + chat = ac1.create_group_chat("title1") + contacts = [] + chars = list("äöüsr") + for acc in accounts: + contact = ac1.create_contact(acc.get_config("addr"), name=chars.pop()) + contacts.append(contact) + chat.add_contact(contact) + # make sure the other side accepts our messages + c1 = acc.create_contact(ac1.get_config("addr"), "ä member") + acc.create_chat_by_contact(c1) + + assert not chat.is_promoted() + + lp.sec("ac1: send mesage to new group chat") + chat.send_text("hello") + assert chat.is_promoted() + + num_contacts = len(chat.get_contacts()) + assert num_contacts == 3 + 1 + + lp.sec("ac2: checking that the chat arrived correctly") + ac2 = accounts[0] + msg = ac2.wait_next_incoming_message() + assert msg.text == "hello" + print("chat is", msg.chat) + assert len(msg.chat.get_contacts()) == 4 + + lp.sec("ac1: removing one contacts and checking things are right") + msg.chat.remove_contact(msg.chat.get_contacts()[-1]) + assert 0 + + class TestOnlineConfigureFails: def test_invalid_password(self, acfactory): ac1, configdict = acfactory.get_online_config()