for forwarding sending errors to relay group #13
|
@ -1,4 +1,5 @@
|
||||||
import logging
|
import logging
|
||||||
|
import time
|
||||||
from threading import Event
|
from threading import Event
|
||||||
|
|
||||||
import pickledb
|
import pickledb
|
||||||
|
@ -44,6 +45,25 @@ class RelayPlugin:
|
||||||
if not kvstore.get("relays"):
|
if not kvstore.get("relays"):
|
||||||
kvstore.set("relays", list())
|
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
|
@account_hookimpl
|
||||||
def ac_incoming_message(self, message: deltachat.Message):
|
def ac_incoming_message(self, message: deltachat.Message):
|
||||||
"""This method is called on every incoming message and decides what to do with it."""
|
"""This method is called on every incoming message and decides what to do with it."""
|
||||||
|
|
|
@ -141,7 +141,9 @@ def outsider(tmpdir):
|
||||||
|
|
||||||
|
|
||||||
def account(db_path, show_ffi=False):
|
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)
|
print(token)
|
||||||
ac = deltachat.Account(str(db_path))
|
ac = deltachat.Account(str(db_path))
|
||||||
credentials = requests.post(token).json()
|
credentials = requests.post(token).json()
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
import os.path
|
import os.path
|
||||||
|
import time
|
||||||
|
|
||||||
import deltachat
|
import deltachat
|
||||||
import pytest
|
import pytest
|
||||||
from deltachat.capi import lib as dclib
|
from deltachat.capi import lib as dclib
|
||||||
|
|
||||||
|
|
||||||
|
TIMEOUT = 20
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.timeout(60)
|
@pytest.mark.timeout(60)
|
||||||
def test_not_relay_groups(relaycrew, outsider):
|
def test_not_relay_groups(relaycrew, outsider):
|
||||||
bot = relaycrew.bot
|
bot = relaycrew.bot
|
||||||
|
@ -215,3 +219,34 @@ def test_change_avatar(relaycrew):
|
||||||
confirmation_msg = user.wait_next_incoming_message()
|
confirmation_msg = user.wait_next_incoming_message()
|
||||||
assert confirmation_msg.text == "Avatar changed to this image."
|
assert confirmation_msg.text == "Avatar changed to this image."
|
||||||
assert botcontact.get_profile_image()
|
assert botcontact.get_profile_image()
|
||||||
|
|
||||||
|
|
||||||
|
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 + TIMEOUT:
|
||||||
|
time.sleep(0.1)
|
||||||
|
assert outgoing_message.is_out_failed()
|
||||||
|
|
||||||
|
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 relay_group.get_messages()[-1].text
|
||||||
|
)
|
||||||
|
assert (
|
||||||
|
"Invalid unencrypted mail to <alice@example.org>"
|
||||||
|
in relay_group.get_messages()[-1].text
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in a new issue