test ChatroomSetup: # Local chatrooms spawn as p1 with p1: send "create-identity Device1 Owner1" send "chatroom-create first" send "chatroom-create second" send "chatroom-list-local" expect /chatroom-list-item ([a-z0-9#]+) first sub true/ capture first expect /chatroom-list-item [a-z0-9#]+ second sub true/ local: expect /chatroom-list-(.*)/ capture done guard (done == "done") expect /chatroom-create-done ([a-z0-9#]+) first.*/ from p1 capture first expect /chatroom-create-done ([a-z0-9#]+) second.*/ from p1 capture second # Send chatrooms to new peers spawn as p2 send "create-identity Device2 Owner2" to p2 spawn as p3 send "create-identity Device3 Owner3" to p3 for p in [ p1, p2, p3 ]: with p: send "chatroom-watch-local" send "start-server" for p in [ p2, p3 ]: with p: expect /chatroom-watched-added [a-z0-9#]+ first sub false/ expect /chatroom-watched-added [a-z0-9#]+ second sub false/ # Subscribe and unsubscribe with p1: send "chatroom-unsubscribe $first" expect /chatroom-watched-updated [a-z0-9#]+ first sub false .*/ send "chatroom-subscribe $first" expect /chatroom-watched-updated [a-z0-9#]+ first sub true .*/ with p2: send "chatroom-list-local" expect /chatroom-list-item ([a-z0-9#]+) first sub false/ capture p2_first expect /chatroom-list-item ([a-z0-9#]+) second sub false/ capture p2_second local: expect /chatroom-list-(.*)/ capture done guard (done == "done") send "chatroom-subscribe $p2_first" send "chatroom-subscribe $p2_second" expect /chatroom-watched-updated [a-z0-9#]+ first sub true .*/ expect /chatroom-watched-updated [a-z0-9#]+ second sub true .*/ send "chatroom-unsubscribe $p2_first" send "chatroom-unsubscribe $p2_second" expect /chatroom-watched-updated [a-z0-9#]+ first sub false .*/ expect /chatroom-watched-updated [a-z0-9#]+ second sub false .*/ # Create and sync additional chatrooms send "chatroom-create third" to p1 send "chatroom-create fourth" to p2 send "chatroom-create fifth" to p3 expect /chatroom-create-done ([a-z0-9#]+) fourth.*/ from p2 capture fourth expect /chatroom-create-done ([a-z0-9#]+) fifth.*/ from p3 capture fifth for p in [ p1, p2, p3 ]: with p: expect /chatroom-watched-added [a-z0-9#]+ third sub [a-z]+/ expect /chatroom-watched-added [a-z0-9#]+ fourth sub [a-z]+/ expect /chatroom-watched-added [a-z0-9#]+ fifth sub [a-z]+/ # Update chatroom name send "chatroom-set-name $first first2" to p1 for p in [ p1, p2, p3 ]: with p: expect /chatroom-watched-updated [a-z0-9#]+ first2.*/ send "chatroom-set-name $fourth fourth2" to p2 send "chatroom-set-name $fifth fifth2" to p3 for p in [ p1, p2, p3 ]: with p: expect /chatroom-watched-updated [a-z0-9#]+ fourth2.*/ expect /chatroom-watched-updated [a-z0-9#]+ fifth2.*/ test ChatroomMessages: spawn as p1 spawn as p2 send "create-identity Device1 Owner1" to p1 send "create-identity Device2 Owner2" to p2 for p in [ p1, p2 ]: with p: send "chatroom-watch-local" send "start-server" send "chatroom-create first_room" to p1 expect /chatroom-create-done ([a-z0-9#]+) first_room.*/ from p1 capture room1_p1 expect /chatroom-watched-added [a-z0-9#]+ first_room sub true/ from p1 expect /chatroom-watched-added ([a-z0-9#]+) first_room sub false/ from p2 capture room1_p2 send "chatroom-message-send $room1_p1 message1" to p1 expect /chatroom-message-new $room1_p1 room first_room from Owner1 text message1/ from p1 send "chatroom-message-send $room1_p1 message2" to p1 local: expect /chatroom-message-new $room1_p1 room first_room from Owner1 text (.*)/ from p1 capture msg guard (msg == "message2") # Subscribe to chatroom send "chatroom-subscribe $room1_p2" to p2 expect /chatroom-watched-updated [a-z0-9#]+ first_room sub true .*/ from p2 with p2: expect /chatroom-message-new $room1_p2 room first_room from Owner1 text (.*)/ capture msg guard (msg == "message1") with p2: expect /chatroom-message-new $room1_p2 room first_room from Owner1 text (.*)/ capture msg guard (msg == "message2") send "chatroom-message-send $room1_p2 message3" to p2 for p in [ p1, p2 ]: with p: expect /chatroom-message-new [a-z0-9#]+ room first_room from Owner2 text message3/ send "chatroom-message-send $room1_p1 message4" to p1 for p in [ p1, p2 ]: with p: expect /chatroom-message-new [a-z0-9#]+ room first_room from Owner1 text message4/ # Multiple rooms send "chatroom-create second_room" to p1 expect /chatroom-create-done ([a-z0-9#]+) second_room.*/ from p1 capture room2_p1 send "chatroom-create third_room" to p2 expect /chatroom-create-done ([a-z0-9#]+) third_room.*/ from p2 capture room3_p2 expect /chatroom-watched-added $room2_p1 second_room sub true/ from p1 expect /chatroom-watched-added $room3_p2 third_room sub true/ from p2 expect /chatroom-watched-added ([a-z0-9#]+) second_room sub false/ from p2 capture room2_p2 expect /chatroom-watched-added ([a-z0-9#]+) third_room sub false/ from p1 capture room3_p1 spawn as p3 send "create-identity Device3 Owner3" to p3 send "chatroom-watch-local" to p3 send "start-server" to p3 expect /chatroom-watched-added ([a-z0-9#]+) first_room sub false/ from p3 capture room1_p3 expect /chatroom-watched-added ([a-z0-9#]+) second_room sub false/ from p3 capture room2_p3 expect /chatroom-watched-added ([a-z0-9#]+) third_room sub false/ from p3 capture room3_p3 with p3: for room in [ room1_p3, room2_p3, room3_p3 ]: send "chatroom-subscribe $room" expect /chatroom-watched-updated $room [a-z_]+ sub true .*/ for i in [1..4]: expect /chatroom-message-new $room1_p3 room first_room from Owner. text (.*)/ capture message guard (message == "message$i") with p2: send "chatroom-message-send $room2_p2 msg_r2_1" send "chatroom-message-send $room2_p2 msg_r2_2" send "chatroom-message-send $room2_p2 msg_r2_3" expect /chatroom-message-new $room2_p2 room second_room from Owner2 text msg_r2_1/ expect /chatroom-message-new $room2_p2 room second_room from Owner2 text msg_r2_2/ expect /chatroom-message-new $room2_p2 room second_room from Owner2 text msg_r2_3/ send "chatroom-message-send $room3_p2 msg_r3_1" send "chatroom-message-send $room3_p2 msg_r3_2" send "chatroom-message-send $room3_p2 msg_r3_3" expect /chatroom-message-new $room3_p2 room third_room from Owner2 text msg_r3_1/ expect /chatroom-message-new $room3_p2 room third_room from Owner2 text msg_r3_2/ expect /chatroom-message-new $room3_p2 room third_room from Owner2 text msg_r3_3/ with p1: local: expect /chatroom-message-new [a-z0-9#]+ room ([a-z_]+) from Owner2 text ([a-z0-9_]+)/ capture room, message guard (room == "second_room") guard (message == "msg_r2_1") local: expect /chatroom-message-new [a-z0-9#]+ room ([a-z_]+) from Owner2 text ([a-z0-9_]+)/ capture room, message guard (room == "second_room") guard (message == "msg_r2_2") local: expect /chatroom-message-new [a-z0-9#]+ room ([a-z_]+) from Owner2 text ([a-z0-9_]+)/ capture room, message guard (room == "second_room") guard (message == "msg_r2_3") with p3: expect /chatroom-message-new $room2_p3 room second_room from Owner2 text msg_r2_1/ expect /chatroom-message-new $room2_p3 room second_room from Owner2 text msg_r2_2/ expect /chatroom-message-new $room2_p3 room second_room from Owner2 text msg_r2_3/ expect /chatroom-message-new $room3_p3 room third_room from Owner2 text msg_r3_1/ expect /chatroom-message-new $room3_p3 room third_room from Owner2 text msg_r3_2/ expect /chatroom-message-new $room3_p3 room third_room from Owner2 text msg_r3_3/ # Unsubscribe send "chatroom-unsubscribe $room1_p1" to p1 expect /chatroom-watched-updated $room1_p1 [a-z_]+ sub false .*/ from p1 send "chatroom-unsubscribe $room1_p3" to p3 expect /chatroom-watched-updated $room1_p3 [a-z_]+ sub false .*/ from p3 send "chatroom-unsubscribe $room2_p3" to p3 expect /chatroom-watched-updated $room2_p3 [a-z_]+ sub false .*/ from p3 with p2: send "chatroom-message-send $room1_p2 msg_r1_4" expect /chatroom-message-new $room1_p2 room first_room from Owner2 text msg_r1_4/ send "chatroom-message-send $room2_p2 msg_r2_4" expect /chatroom-message-new $room2_p2 room second_room from Owner2 text msg_r2_4/ send "chatroom-message-send $room3_p2 msg_r3_4" expect /chatroom-message-new $room3_p2 room third_room from Owner2 text msg_r3_4/ with p1: local: expect /chatroom-message-new [a-z0-9#]+ room ([a-z_]+) from Owner2 text ([a-z0-9_]+)/ capture room, message guard (room == "second_room") guard (message == "msg_r2_4") with p3: local: expect /chatroom-message-new [a-z0-9#]+ room ([a-z_]+) from Owner2 text ([a-z0-9_]+)/ capture room, message guard (room == "third_room") guard (message == "msg_r3_4") test ChatroomSubscribedBeforeStart: spawn as p1 spawn as p2 send "create-identity Device1 Owner1" to p1 send "create-identity Device2 Owner2" to p2 for p in [ p1, p2 ]: with p: send "chatroom-watch-local" send "start-server" send "chatroom-create first_room" to p1 expect /chatroom-create-done ([a-z0-9#]+) first_room.*/ from p1 capture room1_p1 expect /chatroom-watched-added [a-z0-9#]+ first_room sub true/ from p1 expect /chatroom-watched-added ([a-z0-9#]+) first_room sub false/ from p2 capture room1_p2 with p2: send "chatroom-subscribe $room1_p2" expect /chatroom-watched-updated [a-z0-9#]+ first_room sub true .*/ for p in [p1, p2]: with p: send "stop-server" for p in [p1, p2]: with p: expect /stop-server-done/ for p in [p1, p2]: with p: send "start-server" send "chatroom-message-send $room1_p1 message1" to p1 expect /chatroom-message-new $room1_p1 room first_room from Owner1 text message1/ from p1 expect /chatroom-message-new $room1_p2 room first_room from Owner1 text message1/ from p2 send "chatroom-message-send $room1_p2 message2" to p2 expect /chatroom-message-new $room1_p1 room first_room from Owner2 text message2/ from p1 expect /chatroom-message-new $room1_p2 room first_room from Owner2 text message2/ from p2 test ParallelThreads: spawn as p1 spawn as p2 send "create-identity Device1 Owner1" to p1 send "create-identity Device2 Owner2" to p2 for p in [ p1, p2 ]: with p: send "chatroom-watch-local" send "start-server" send "chatroom-create first_room" to p1 expect /chatroom-create-done ([a-z0-9#]+) first_room.*/ from p1 capture room1_p1 expect /chatroom-watched-added [a-z0-9#]+ first_room sub true/ from p1 expect /chatroom-watched-added ([a-z0-9#]+) first_room sub false/ from p2 capture room1_p2 with p2: send "chatroom-subscribe $room1_p2" expect /chatroom-watched-updated [a-z0-9#]+ first_room sub true .*/ for p in [p1, p2]: with p: send "stop-server" for p in [p1, p2]: with p: expect /stop-server-done/ send "chatroom-message-send $room1_p1 message1A" to p1 send "chatroom-message-send $room1_p1 message1B" to p1 send "chatroom-message-send $room1_p2 message2A" to p2 send "chatroom-message-send $room1_p2 message2B" to p2 with p1: expect /chatroom-message-new $room1_p1 room first_room from Owner. text message(..)/ capture msg guard (msg == "1A") with p1: expect /chatroom-message-new $room1_p1 room first_room from Owner. text message(..)/ capture msg guard (msg == "1B") with p2: expect /chatroom-message-new $room1_p2 room first_room from Owner. text message(..)/ capture msg guard (msg == "2A") with p2: expect /chatroom-message-new $room1_p2 room first_room from Owner. text message(..)/ capture msg guard (msg == "2B") for p in [p1, p2]: with p: send "start-server" with p1: expect /chatroom-message-new $room1_p1 room first_room from Owner. text message(..)/ capture msg guard (msg == "2A") with p1: expect /chatroom-message-new $room1_p1 room first_room from Owner. text message(..)/ capture msg guard (msg == "2B") with p2: expect /chatroom-message-new $room1_p2 room first_room from Owner. text message(..)/ capture msg guard (msg == "1A") with p2: expect /chatroom-message-new $room1_p2 room first_room from Owner. text message(..)/ capture msg guard (msg == "1B") test ChatroomMembers: spawn as p1 spawn as p2 spawn as p3 send "create-identity Device1 Owner1" to p1 send "create-identity Device2 Owner2" to p2 send "create-identity Device3 Owner3" to p3 for p in [ p1, p2, p3 ]: with p: send "chatroom-watch-local" send "start-server" send "chatroom-create first_room" to p1 expect /chatroom-create-done ([a-z0-9#]+) first_room.*/ from p1 capture room1_p1 expect /chatroom-watched-added $room1_p1 first_room sub true/ from p1 expect /chatroom-watched-added ([a-z0-9#]+) first_room sub false/ from p2 capture room1_p2 expect /chatroom-watched-added ([a-z0-9#]+) first_room sub false/ from p3 capture room1_p3 local: send "chatroom-members $room1_p1" to p1 expect /chatroom-members-([a-z]+)/ from p1 capture done guard (done == "done") local: send "chatroom-members $room1_p2" to p2 expect /chatroom-members-([a-z]+)/ from p2 capture done guard (done == "done") send "chatroom-message-send $room1_p1 message1" to p1 send "chatroom-message-send $room1_p1 message2" to p1 send "chatroom-join $room1_p2" to p2 send "chatroom-message-send $room1_p2 message3" to p2 send "chatroom-join $room1_p3" to p3 with p1: expect /chatroom-message-new $room1_p1 room first_room from Owner1 text message2/ expect /chatroom-message-new $room1_p1 room first_room from Owner2 text message3/ expect /chatroom-message-new $room1_p1 room first_room from Owner3/ with p2: expect /chatroom-message-new $room1_p2 room first_room from Owner1 text message2/ expect /chatroom-message-new $room1_p2 room first_room from Owner2 text message3/ expect /chatroom-message-new $room1_p2 room first_room from Owner3/ with p3: expect /chatroom-message-new $room1_p3 room first_room from Owner1 text message2/ expect /chatroom-message-new $room1_p3 room first_room from Owner2 text message3/ expect /chatroom-message-new $room1_p3 room first_room from Owner3/ local: send "chatroom-members $room1_p1" to p1 expect /chatroom-members-item Owner1/ from p1 expect /chatroom-members-item Owner2/ from p1 expect /chatroom-members-item Owner3/ from p1 expect /chatroom-members-([a-z]+)/ from p1 capture done guard (done == "done") local: send "chatroom-members $room1_p2" to p2 expect /chatroom-members-item Owner1/ from p2 expect /chatroom-members-item Owner2/ from p2 expect /chatroom-members-item Owner3/ from p2 expect /chatroom-members-([a-z]+)/ from p2 capture done guard (done == "done") send "chatroom-leave $room1_p1" to p1 send "chatroom-leave $room1_p3" to p3 for p in [ p1, p2 ]: with p: expect /chatroom-message-new [a-z0-9#]+ room first_room from Owner1 leave/ for p in [ p2, p3 ]: with p: expect /chatroom-message-new [a-z0-9#]+ room first_room from Owner3 leave/ send "chatroom-members $room1_p1" to p1 send "chatroom-members $room1_p2" to p2 send "chatroom-members $room1_p3" to p3 for p in [ p1, p2, p3 ]: with p: expect /chatroom-members-item Owner2/ expect /chatroom-members-([a-z]+)/ capture done guard (done == "done") test ChatroomIdentity: spawn as p1 spawn as p2 send "create-identity Device1 Owner1" to p1 send "create-identity Device2 Owner2" to p2 for p in [ p1, p2 ]: with p: send "chatroom-watch-local" send "start-server" send "chatroom-create first_room" to p1 expect /chatroom-create-done ([a-z0-9#]+) first_room.*/ from p1 capture room1_p1 expect /chatroom-watched-added ([a-z0-9#]+) first_room sub false/ from p2 capture room1_p2 send "chatroom-join-as $room1_p1 Custom1" to p1 expect /chatroom-join-as-done $room1_p1/ from p1 send "chatroom-join-as $room1_p2 Custom2" to p2 expect /chatroom-join-as-done $room1_p2/ from p2 send "chatroom-message-send $room1_p1 message1" to p1 send "chatroom-message-send $room1_p2 message2" to p2 for p in [ p1, p2 ]: with p: expect /chatroom-message-new [a-z0-9#]+ room first_room from ([^ ]+) text message1/ capture name1 guard (name1 == "Custom1") expect /chatroom-message-new [a-z0-9#]+ room first_room from ([^ ]+) text message2/ capture name2 guard (name2 == "Custom2") spawn as p1b on p1.node spawn as p2b on p2.node for p in [ p1b, p2b ]: with p: send "chatroom-watch-local" send "chatroom-message-send $room1_p1 message3" to p1b send "chatroom-message-send $room1_p2 message4" to p2b for p in [ p1, p2, p1b, p2b ]: with p: expect /chatroom-message-new [a-z0-9#]+ room first_room from ([^ ]+) text message3/ capture name1 guard (name1 == "Custom1") expect /chatroom-message-new [a-z0-9#]+ room first_room from ([^ ]+) text message4/ capture name2 guard (name2 == "Custom2")