summaryrefslogtreecommitdiff
path: root/test/chatroom.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/chatroom.test')
-rw-r--r--test/chatroom.test479
1 files changed, 479 insertions, 0 deletions
diff --git a/test/chatroom.test b/test/chatroom.test
new file mode 100644
index 0000000..4dda21e
--- /dev/null
+++ b/test/chatroom.test
@@ -0,0 +1,479 @@
+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")