mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-17 19:18:06 +00:00
Add file transfer message test in Python.
This commit is contained in:
parent
110d44b87c
commit
f229bd10da
2 changed files with 67 additions and 8 deletions
|
|
@ -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'):
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue