From f229bd10da3cd6d9d06ffeb287dc476a54a014d1 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Wed, 10 Dec 2014 12:02:37 +0100 Subject: [PATCH] Add file transfer message test in Python. --- tools/python/unittests/linphonetester.py | 14 +++--- tools/python/unittests/test_message.py | 61 ++++++++++++++++++++++++ 2 files changed, 67 insertions(+), 8 deletions(-) diff --git a/tools/python/unittests/linphonetester.py b/tools/python/unittests/linphonetester.py index a8a43e4e6..76564d9b8 100644 --- a/tools/python/unittests/linphonetester.py +++ b/tools/python/unittests/linphonetester.py @@ -267,6 +267,8 @@ class CoreManagerStats: self.number_of_LinphoneCallEncryptedOn = 0 self.number_of_LinphoneCallEncryptedOff = 0 + self.last_received_chat_message = None + class CoreManager: @@ -465,8 +467,10 @@ class CoreManager: linphonetester_logger.info("[TESTER] Message from [{from_str}] is [{text_str}], external URL [{external_body_url}]".format( from_str=from_str, text_str=text_str, external_body_url=external_body_url)) manager.stats.number_of_LinphoneMessageReceived += 1 - - if message.external_body_url is not None: + manager.stats.last_received_chat_message = message + if message.file_transfer_information is not None: + manager.stats.number_of_LinphoneMessageReceivedWithFile += 1 + elif message.external_body_url is not None: manager.stats.number_of_LinphoneMessageExtBodyReceived += 1 @classmethod @@ -553,12 +557,6 @@ class CoreManager: vtable['call_state_changed'] = CoreManager.call_state_changed if not vtable.has_key('message_received'): vtable['message_received'] = CoreManager.message_received - #if not vtable.has_key('file_transfer_recv'): - #vtable['file_transfer_recv'] = CoreManager.file_transfer_recv - #if not vtable.has_key('file_transfer_send'): - #vtable['file_transfer_send'] = CoreManager.file_transfer_send - #if not vtable.has_key('file_transfer_progress_indication'): - #vtable['file_transfer_progress_indication'] = CoreManager.file_transfer_progress_indication #if not vtable.has_key('is_composing_received'): #vtable['is_composing_received'] = CoreManager.is_composing_received if not vtable.has_key('new_subscription_requested'): diff --git a/tools/python/unittests/test_message.py b/tools/python/unittests/test_message.py index 2e12793c0..ebd53fc66 100644 --- a/tools/python/unittests/test_message.py +++ b/tools/python/unittests/test_message.py @@ -8,6 +8,35 @@ import time class TestMessage: + @classmethod + def msg_state_changed(cls, msg, state): + stats = msg.chat_room.core.user_data.stats + linphonetester_logger.info("[TESTER] Message [{text}] [{state}]".format(text=msg.text, state=linphone.ChatMessageState.string(state))) + if state == linphone.ChatMessageState.ChatMessageStateDelivered: + stats.number_of_LinphoneMessageDelivered += 1 + elif state == linphone.ChatMessageState.ChatMessageStateNotDelivered: + stats.number_of_LinphoneMessageNotDelivered += 1 + elif state == linphone.ChatMessageState.ChatMessageStateInProgress: + stats.number_of_LinphoneMessageInProgress += 1 + elif state == linphone.ChatMessageState.ChatMessageStateFileTransferError: + stats.number_of_LinphoneMessageNotDelivered += 1 + else: + linphonetester_logger.error("[TESTER] Unexpected state [{state}] for message [{msg}]".format(msg=msg, state=linphone.ChatMessageState.string(state))) + + @classmethod + def file_transfer_received(cls, msg, content, buf, size): + print buf, size + stats = msg.chat_room.core.user_data.stats + if msg.user_data is None: + msg.user_data = open('receive_file.dump', 'wb') + msg.user_data.write(buf) + else: + if size == 0: # Transfer complete + stats.number_of_LinphoneMessageExtBodyReceived += 1 + msg.user_data.close() + else: # Store content + msg.user_data.write(buf) + def wait_for_server_to_purge_messages(self, manager1, manager2): # Wait a little bit just to have time to purge message stored in the server CoreManager.wait_for_until(manager1, manager2, lambda manager1, manager2: False, 100) @@ -39,3 +68,35 @@ class TestMessage: assert marie.lc.get_chat_room(pauline.identity) is not None marie.stop() pauline.stop() + + def test_file_transfer_message(self): + big_file = "big file" + marie = CoreManager('marie_rc') + pauline = CoreManager('pauline_rc') + while len(big_file) < 128000: + big_file += big_file + l = list(big_file) + l[0] = 'S' + l[-1] = 'E' + big_file = ''.join(l) + pauline.lc.file_transfer_server = "https://www.linphone.org:444/lft.php" + chat_room = pauline.lc.get_chat_room(marie.identity) + content = pauline.lc.create_content() + content.type = 'text' + content.subtype = 'plain' + content.size = len(big_file) # total size to be transfered + content.name = 'bigfile.txt' + message = chat_room.create_file_transfer_message(content) + self.wait_for_server_to_purge_messages(marie, pauline) + message.callbacks.msg_state_changed = TestMessage.msg_state_changed + chat_room.send_chat_message(message) + assert_equals(CoreManager.wait_for(pauline, marie, lambda pauline, marie: marie.stats.number_of_LinphoneMessageReceivedWithFile == 1), True) + if marie.stats.last_received_chat_message is not None: + cbs = marie.stats.last_received_chat_message.callbacks + cbs.msg_state_changed = TestMessage.msg_state_changed + cbs.file_transfer_recv = TestMessage.file_transfer_received + marie.stats.last_received_chat_message.download_file() + assert_equals(CoreManager.wait_for(pauline, marie, lambda pauline, marie: marie.stats.number_of_LinphoneMessageExtBodyReceived == 1), True) + assert_equals(pauline.stats.number_of_LinphoneMessageInProgress, 1) + assert_equals(pauline.stats.number_of_LinphoneMessageDelivered, 1) + assert_equals(marie.stats.number_of_LinphoneMessageExtBodyReceived, 1)