From 6493fc195214a27925800c529c33a57773b57eaa Mon Sep 17 00:00:00 2001 From: missytake Date: Fri, 8 Dec 2023 13:14:50 +0100 Subject: [PATCH 1/2] tests: xfailing test for forwarding sending errors to relay group --- tests/conftest.py | 4 +++- tests/test_bot.py | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index ab31b84..8e65c1b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -141,7 +141,9 @@ def outsider(tmpdir): def account(db_path, show_ffi=False): - token = os.environ.get("DCC_NEW_TMP_EMAIL", "https://nine.testrun.org/cgi-bin/newemail.py") + token = os.environ.get( + "DCC_NEW_TMP_EMAIL", "https://nine.testrun.org/cgi-bin/newemail.py" + ) print(token) ac = deltachat.Account(str(db_path)) credentials = requests.post(token).json() diff --git a/tests/test_bot.py b/tests/test_bot.py index 882faab..83ebed3 100644 --- a/tests/test_bot.py +++ b/tests/test_bot.py @@ -1,4 +1,5 @@ import os.path +import time import deltachat import pytest @@ -215,3 +216,29 @@ def test_change_avatar(relaycrew): confirmation_msg = user.wait_next_incoming_message() assert confirmation_msg.text == "Avatar changed to this image." assert botcontact.get_profile_image() + + +@pytest.mark.xfail(reason="Forwarding errors is not implemented yet") +def test_forward_sending_errors_to_relay_group(relaycrew): + usercrew = relaycrew.user.get_chats()[-1] + usercrew.send_text("/start_chat alice@example.org This_Message_will_fail test") + + while len(relaycrew.bot.get_chats()) < 3: + time.sleep(0.1) + out_chat = relaycrew.bot.get_chats()[-1] + outgoing_message = out_chat.get_messages()[-1] + print(outgoing_message) + begin = int(time.time()) + while not outgoing_message.is_out_failed() and int(time.time()) < begin + 10: + time.sleep(0.1) + assert outgoing_message.is_out_failed() + while len(out_chat.get_messages()) < 3 and int(time.time()) < begin + 10: + time.sleep(0.1) + assert ( + "Recipient address rejected: Domain example.org does not accept mail" + not in out_chat.get_messages()[-1].text + ) + assert ( + "Invalid unencrypted mail to " + in out_chat.get_messages()[-1].text + ) -- 2.43.5 From c8bc7f12c99c4a2b2ddbb0dc45b3fc326504d483 Mon Sep 17 00:00:00 2001 From: missytake Date: Fri, 8 Dec 2023 13:58:15 +0100 Subject: [PATCH 2/2] bot: forward sending errors to relay group --- src/teams_bot/bot.py | 20 ++++++++++++++++++++ tests/test_bot.py | 18 +++++++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/teams_bot/bot.py b/src/teams_bot/bot.py index e09cb88..4e72d59 100644 --- a/src/teams_bot/bot.py +++ b/src/teams_bot/bot.py @@ -1,4 +1,5 @@ import logging +import time from threading import Event import pickledb @@ -44,6 +45,25 @@ class RelayPlugin: if not kvstore.get("relays"): kvstore.set("relays", list()) + @account_hookimpl + def ac_outgoing_message(self, message: deltachat.Message): + while not message.is_out_delivered(): + time.sleep(0.1) + if message.is_out_failed(): + break + begin = int(time.time()) + while not message.is_out_failed(): + time.sleep(0.1) + if int(time.time()) < begin + 10: + break # it probably just worked. + else: + error = message.get_message_info() + logging.warning( + "Outgoing message failed. Forwarding error to relay group: %s", error + ) + relay_group = self.get_relay_group(message.chat.id) + relay_group.send_text(f"Sending Message failed:\n\n{error}") + @account_hookimpl def ac_incoming_message(self, message: deltachat.Message): """This method is called on every incoming message and decides what to do with it.""" diff --git a/tests/test_bot.py b/tests/test_bot.py index 83ebed3..fc3c51f 100644 --- a/tests/test_bot.py +++ b/tests/test_bot.py @@ -6,6 +6,9 @@ import pytest from deltachat.capi import lib as dclib +TIMEOUT = 20 + + @pytest.mark.timeout(60) def test_not_relay_groups(relaycrew, outsider): bot = relaycrew.bot @@ -218,7 +221,6 @@ def test_change_avatar(relaycrew): assert botcontact.get_profile_image() -@pytest.mark.xfail(reason="Forwarding errors is not implemented yet") def test_forward_sending_errors_to_relay_group(relaycrew): usercrew = relaycrew.user.get_chats()[-1] usercrew.send_text("/start_chat alice@example.org This_Message_will_fail test") @@ -229,16 +231,22 @@ def test_forward_sending_errors_to_relay_group(relaycrew): outgoing_message = out_chat.get_messages()[-1] print(outgoing_message) begin = int(time.time()) - while not outgoing_message.is_out_failed() and int(time.time()) < begin + 10: + while not outgoing_message.is_out_failed() and int(time.time()) < begin + TIMEOUT: time.sleep(0.1) assert outgoing_message.is_out_failed() - while len(out_chat.get_messages()) < 3 and int(time.time()) < begin + 10: + + while len(relaycrew.user.get_chats()) < 2 and int(time.time()) < begin + TIMEOUT: + time.sleep(0.1) + relay_group = relaycrew.user.get_chats()[-2] + + while len(relay_group.get_messages()) < 3 and int(time.time()) < begin + TIMEOUT: + print(relay_group.get_messages()[-1].text) time.sleep(0.1) assert ( "Recipient address rejected: Domain example.org does not accept mail" - not in out_chat.get_messages()[-1].text + not in relay_group.get_messages()[-1].text ) assert ( "Invalid unencrypted mail to " - in out_chat.get_messages()[-1].text + in relay_group.get_messages()[-1].text ) -- 2.43.5