From 67f1d46c15f2f5696f42a55c30efb89299584228 Mon Sep 17 00:00:00 2001 From: Edouard Tisserant Date: Wed, 12 Oct 2016 00:04:17 +0200 Subject: [PATCH] Multi process test use now generator instead of sequence to describe the test, making easier to implement test logic and storage of intermediate results --- test/mp_sync_test.py | 67 ++++++++++++++++++++------------------------ test/multipEp.py | 58 +++++++++++++++++++++----------------- 2 files changed, 62 insertions(+), 63 deletions(-) diff --git a/test/mp_sync_test.py b/test/mp_sync_test.py index 77a55b0..db33c2a 100644 --- a/test/mp_sync_test.py +++ b/test/mp_sync_test.py @@ -9,46 +9,39 @@ python3.4 mp_sync_test.py """ -stored_message = [] - -def store_message(res, action): - stored_message.append(res) - -def print_res(res, action): - print(res) - from multipEp import * - #("instance name", [instance_action_func, [args], {kwargs}], result_func), - #(manager_action_func, [args], {kwargs}, result_func), -scenario0 = [ - ("GroupA1", [create_account, ["some.one@some.where", "Some One"]]), - ("SoloA", [create_account, ["some.other@else.where", "Some Other"]]), - # key exchange - ("SoloA", [send_message, ["some.other@else.where", "some.one@some.where", - "Hey Bro", "Heeeey Brooooo"]]), - ("GroupA1", [send_message, ["some.one@some.where", "some.other@else.where", - "Yo Dude", "Yooooo Duuuude"]]), - ("SoloA", [encrypted_message, ["some.other@else.where", +#("instance name", [instance_action_func, [args], {kwargs}], result_func), +#(manager_action_func, [args], {kwargs}, result_func), + +def scenario0(): + for action in [ + ("GroupA1", [create_account, ["some.one@some.where", "Some One"]]), + ("SoloA", [create_account, ["some.other@else.where", "Some Other"]]), + # key exchange + ("SoloA", [send_message, ["some.other@else.where", + "some.one@some.where", + "Hey Bro", "Heeeey Brooooo"]]), + ("GroupA1", [send_message, ["some.one@some.where", + "some.other@else.where", + "Yo Dude", "Yooooo Duuuude"]]) + ] : yield action + + enc_msg = yield ("SoloA", [encrypted_message, ["some.other@else.where", "some.one@some.where", - "read this", "this is a secret message"]], store_message), - ("GroupA1", [decrypt_message, [stored_message]], expect([6])), - (flush_all_mails,), - ("GroupA2", [create_account, ["some.one@some.where", "Some One"]]), - (cycle_until_no_change, ["GroupA1", "GroupA2"], expect(4)), - ("GroupA2", [decrypt_message, [stored_message]], expect([6])), - ("GroupA3", [create_account, ["some.one@some.where", "Some One"]]), - (cycle_until_no_change, ["GroupA1", "GroupA2", "GroupA3"], expect(3)), - # force consume messages - # ("GroupA3", [None, None, None, -60*15]), - ("GroupA3", [decrypt_message, [stored_message]], expect([6])) -] - -scenario1 = [ - #("instance name", [func, [args], {kwargs}]), - ("B", [send_message, ["some.other@else.where", "some.one@some.where", "Hey Bro", "Heeeey Brooooo"]]), - ("A", [send_message, ["some.one@some.where", "some.other@else.where", "Hey Bro", "Heeeey Brooooo"]]), -] + "read this", "this is a secret message"]]) + for action in [ + ("GroupA1", [decrypt_message, [enc_msg]], expect(6)), + (flush_all_mails,), + ("GroupA2", [create_account, ["some.one@some.where", "Some One"]]), + (cycle_until_no_change, ["GroupA1", "GroupA2"], expect(4)), + ("GroupA2", [decrypt_message, [enc_msg]], expect(6)), + ("GroupA3", [create_account, ["some.one@some.where", "Some One"]]), + (cycle_until_no_change, ["GroupA1", "GroupA2", "GroupA3"], expect(3)), + # force consume messages + # ("GroupA3", [None, None, None, -60*15]), + ("GroupA3", [decrypt_message, [enc_msg]], expect(6)) + ] : yield action if __name__ == "__main__": run_scenario(scenario0) diff --git a/test/multipEp.py b/test/multipEp.py index 83cf2e2..3c12291 100644 --- a/test/multipEp.py +++ b/test/multipEp.py @@ -57,19 +57,16 @@ def send_message(from_address, to_address, shortmsg, longmsg): msg = _encrypted_message(from_address, to_address, shortmsg, longmsg) _send_message(to_address, msg) -def decrypt_message(msgs): - res = [] - for msgstr in msgs: - msg = pEp.incoming_message(msgstr) - printi("--- decrypt()") - msg.recv = int(time.time()) - printmsg(msg) - msg2, keys, rating, consumed, flags = msg.decrypt() - res.append(rating) - printi("->-", rating, "->-") - printmsg(msg2) - printi("---") - return res +def decrypt_message(msgstr): + msg = pEp.incoming_message(msgstr) + printi("--- decrypt()") + msg.recv = int(time.time()) + printmsg(msg) + msg2, keys, rating, consumed, flags = msg.decrypt() + printi("->-", rating, "->-") + printmsg(msg2) + printi("---") + return rating def printi(*args): global indent @@ -109,7 +106,7 @@ def execute_order(order, handler): printheader("DECRYPT messages") # decrypt every non-consumed message for all instance accounts for own_address in own_addresses: - msgs_for_me = msgs_folders[own_address] + msgs_for_me = msgs_folders.get(own_address, []) for msgstr in msgs_for_me: msg = pEp.incoming_message(msgstr) printi("--- decrypt()") @@ -206,6 +203,7 @@ def pEp_instance_run(iname, conn, _msgs_folders, _handshakes_seen, _handshakes_v if order is None: break + print(order) res = execute_order(order, handler) conn.send(res) @@ -270,20 +268,28 @@ def run_scenario(scenario): handshakes_seen = manager.list() handshakes_validated = manager.list() - for action in scenario: - res = None - output = None - if len(action) > 1 and type(action[-1]) == types.FunctionType: - output = action[-1] - action = action[:-1] + sc = scenario() + try: + action = next(sc) + while True: + res = None + output = None + if len(action) > 1 and type(action[-1]) == types.FunctionType: + output = action[-1] + action = action[:-1] - if type(action[0]) == str: - res = run_instance_action(action) - else: - res = run_manager_action(action) + print(action) + if type(action[0]) == str: + res = run_instance_action(action) + else: + res = run_manager_action(action) + + if output is not None: + output(res, action) + + action = sc.send(res) + except StopIteration: pass - if output is not None: - output(res, action) if "wait_for_debug" in sys.argv: input("#"*80 + "\n" +