failing test for sending out a file twice

This commit is contained in:
holger krekel
2019-12-05 22:35:48 +01:00
parent c0a425c26d
commit 7f4e68f21c
2 changed files with 26 additions and 30 deletions

View File

@@ -70,19 +70,6 @@ class Message(object):
mtype = ffi.NULL if mime_type is None else as_dc_charpointer(mime_type) mtype = ffi.NULL if mime_type is None else as_dc_charpointer(mime_type)
if not os.path.exists(path): if not os.path.exists(path):
raise ValueError("path does not exist: {!r}".format(path)) raise ValueError("path does not exist: {!r}".format(path))
blobdir = self.account.get_blobdir()
if not path.startswith(blobdir):
for i in range(50):
ext = "" if i == 0 else "-" + str(i)
dest = os.path.join(blobdir, os.path.basename(path) + ext)
if os.path.exists(dest):
continue
shutil.copyfile(path, dest)
break
else:
raise ValueError("could not create blobdir-path for {}".format(path))
path = dest
assert path.startswith(blobdir), path
lib.dc_msg_set_file(self._dc_msg, as_dc_charpointer(path), mtype) lib.dc_msg_set_file(self._dc_msg, as_dc_charpointer(path), mtype)
@props.with_doc @props.with_doc

View File

@@ -442,32 +442,41 @@ class TestOnlineAccount:
assert self_addr not in ev[2] assert self_addr not in ev[2]
ev = ac1._evlogger.get_matching("DC_EVENT_DELETED_BLOB_FILE") ev = ac1._evlogger.get_matching("DC_EVENT_DELETED_BLOB_FILE")
def test_prepare_file_with_unicode(self, acfactory, lp): def test_send_file_twice_unicode_filename_mangling(self, tmpdir, acfactory, lp):
ac1, ac2 = acfactory.get_two_online_accounts() ac1, ac2 = acfactory.get_two_online_accounts()
chat = self.get_chat(ac1, ac2) chat = self.get_chat(ac1, ac2)
lp.sec("ac1: prepare and send attachment + text to ac2") basename = "somedäüta.html.zip"
blobdir = ac1.get_blobdir() p = os.path.join(tmpdir.strpath, basename)
basename = "somedäüta.txt"
p = os.path.join(blobdir, basename)
with open(p, "w") as f: with open(p, "w") as f:
f.write("some data") f.write("some data")
msg = Message.new_empty(ac1, "file")
msg.set_text("hello ä world")
msg.set_file(p)
message = chat.prepare_message(msg)
assert message.is_out_preparing()
assert message.text == "hello ä world"
chat.send_prepared(message)
lp.sec("ac2: receive message") def send_and_receive_message():
ev = ac2._evlogger.get_matching("DC_EVENT_INCOMING_MSG|DC_EVENT_MSGS_CHANGED") lp.sec("ac1: prepare and send attachment + text to ac2")
assert ev[2] > const.DC_CHAT_ID_LAST_SPECIAL msg = Message.new_empty(ac1, "file")
msg = ac2.get_message_by_id(ev[1]) msg.set_text("withfile")
assert msg.text == "hello ä world" msg.set_file(p)
message = chat.prepare_message(msg)
assert message.is_out_preparing()
assert message.text == "withfile"
chat.send_prepared(message)
lp.sec("ac2: receive message")
ev = ac2._evlogger.get_matching("DC_EVENT_INCOMING_MSG|DC_EVENT_MSGS_CHANGED")
assert ev[2] > const.DC_CHAT_ID_LAST_SPECIAL
return ac2.get_message_by_id(ev[1])
msg = send_and_receive_message()
assert msg.text == "withfile"
assert open(msg.filename).read() == "some data" assert open(msg.filename).read() == "some data"
assert msg.filename.endswith(basename) assert msg.filename.endswith(basename)
msg2 = send_and_receive_message()
assert msg2.text == "withfile"
assert open(msg2.filename).read() == "some data"
assert msg2.filename.endswith("html.zip")
assert msg.filename != msg2.filename
def test_mvbox_sentbox_threads(self, acfactory, lp): def test_mvbox_sentbox_threads(self, acfactory, lp):
lp.sec("ac1: start with mvbox thread") lp.sec("ac1: start with mvbox thread")
ac1 = acfactory.get_online_configuring_account(mvbox=True, sentbox=True) ac1 = acfactory.get_online_configuring_account(mvbox=True, sentbox=True)