summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/attach.et47
-rw-r--r--test/attach.test43
-rw-r--r--test/chatroom.et (renamed from test/chatroom.test)254
-rw-r--r--test/common.et6
-rw-r--r--test/contact.et (renamed from test/contact.test)12
-rw-r--r--test/deferred.et198
-rw-r--r--test/discovery.et366
-rw-r--r--test/graph.et327
-rw-r--r--test/invite.et194
-rw-r--r--test/message.et457
-rw-r--r--test/message.test149
-rw-r--r--test/network.et539
-rw-r--r--test/network.test382
-rw-r--r--test/storage.et (renamed from test/storage.test)313
-rw-r--r--test/sync.et (renamed from test/sync.test)12
15 files changed, 2706 insertions, 593 deletions
diff --git a/test/attach.et b/test/attach.et
new file mode 100644
index 0000000..e925116
--- /dev/null
+++ b/test/attach.et
@@ -0,0 +1,47 @@
+module attach
+
+test Attach:
+ let services = "attach,sync"
+
+ spawn as p1
+ spawn as p2
+ send "create-identity Device1 Owner" to p1
+ send "create-identity Device2" to p2
+ send "watch-local-identity" to p1
+ send "watch-local-identity" to p2
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+ expect from p1:
+ /local-identity Device1 Owner/
+ /peer 1 addr ${p2.node.ip} 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /local-identity Device2/
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1 Owner/
+
+ send "attach-to 1" to p2
+ expect /attach-request 1 .*/ from p1
+ expect /attach-response 1 .*/ from p2
+ send "attach-reject 1" to p1
+ expect /attach-request-failed 1 user/ from p1
+ expect /attach-response-failed 1 rejected/ from p2
+
+ send "attach-to 1" to p2
+ expect /attach-request 1 .*/ from p1
+ expect /attach-response 1 .*/ from p2
+ send "attach-reject 1" to p2
+ expect /attach-request-failed 1 rejected/ from p1
+ expect /attach-response-failed 1 user/ from p2
+
+ send "attach-to 1" to p2
+ expect /attach-request 1 ([0-9]*)/ from p1 capture code1
+ expect /attach-response 1 ([0-9]*)/ from p2 capture code2
+ guard (code1 == code2)
+
+ send "attach-accept 1" to p1
+ send "attach-accept 1" to p2
+ expect /attach-request-done 1/ from p1
+ expect /attach-response-done 1/ from p2
+ expect /local-identity Device2 Owner/ from p2
+ expect /peer 1 id Device2 Owner/ from p1
diff --git a/test/attach.test b/test/attach.test
deleted file mode 100644
index 33a1483..0000000
--- a/test/attach.test
+++ /dev/null
@@ -1,43 +0,0 @@
-test:
- spawn as p1
- spawn as p2
- send "create-identity Device1 Owner" to p1
- send "create-identity Device2" to p2
- send "watch-local-identity" to p1
- send "watch-local-identity" to p2
- send "start-server" to p1
- send "start-server" to p2
- expect from p1:
- /local-identity Device1 Owner/
- /peer 1 addr ${p2.node.ip} 29665/
- /peer 1 id Device2/
- expect from p2:
- /local-identity Device2/
- /peer 1 addr ${p1.node.ip} 29665/
- /peer 1 id Device1 Owner/
-
- send "attach-to 1" to p2
- expect /attach-request 1 .*/ from p1
- expect /attach-response 1 .*/ from p2
- send "attach-reject 1" to p1
- expect /attach-request-failed 1 user/ from p1
- expect /attach-response-failed 1 rejected/ from p2
-
- send "attach-to 1" to p2
- expect /attach-request 1 .*/ from p1
- expect /attach-response 1 .*/ from p2
- send "attach-reject 1" to p2
- expect /attach-request-failed 1 rejected/ from p1
- expect /attach-response-failed 1 user/ from p2
-
- send "attach-to 1" to p2
- expect /attach-request 1 ([0-9]*)/ from p1 capture code1
- expect /attach-response 1 ([0-9]*)/ from p2 capture code2
- guard (code1 == code2)
-
- send "attach-accept 1" to p1
- send "attach-accept 1" to p2
- expect /attach-request-done 1/ from p1
- expect /attach-response-done 1/ from p2
- expect /local-identity Device2 Owner/ from p2
- expect /peer 1 id Device2 Owner/ from p1
diff --git a/test/chatroom.test b/test/chatroom.et
index 93de1ff..e49b4b8 100644
--- a/test/chatroom.test
+++ b/test/chatroom.et
@@ -1,4 +1,10 @@
+module chatroom
+
+def refpat = /blake2#[0-9a-f]+/
+
test ChatroomSetup:
+ let services = "chatroom"
+
# Local chatrooms
spawn as p1
@@ -30,7 +36,7 @@ test ChatroomSetup:
for p in [ p1, p2, p3 ]:
with p:
send "chatroom-watch-local"
- send "start-server"
+ send "start-server services $services"
for p in [ p2, p3 ]:
with p:
@@ -97,6 +103,8 @@ test ChatroomSetup:
test ChatroomMessages:
+ let services = "chatroom"
+
spawn as p1
spawn as p2
@@ -106,7 +114,7 @@ test ChatroomMessages:
for p in [ p1, p2 ]:
with p:
send "chatroom-watch-local"
- send "start-server"
+ send "start-server services $services"
send "chatroom-create first_room" to p1
expect /chatroom-create-done ([a-z0-9#]+) first_room.*/ from p1 capture room1_p1
@@ -159,7 +167,7 @@ test ChatroomMessages:
spawn as p3
send "create-identity Device3 Owner3" to p3
send "chatroom-watch-local" to p3
- send "start-server" to p3
+ send "start-server services $services" 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
@@ -242,6 +250,8 @@ test ChatroomMessages:
test ChatroomSubscribedBeforeStart:
+ let services = "chatroom"
+
spawn as p1
spawn as p2
@@ -251,7 +261,7 @@ test ChatroomSubscribedBeforeStart:
for p in [ p1, p2 ]:
with p:
send "chatroom-watch-local"
- send "start-server"
+ send "start-server services $services"
send "chatroom-create first_room" to p1
expect /chatroom-create-done ([a-z0-9#]+) first_room.*/ from p1 capture room1_p1
@@ -271,7 +281,7 @@ test ChatroomSubscribedBeforeStart:
expect /stop-server-done/
for p in [p1, p2]:
with p:
- send "start-server"
+ send "start-server services $services"
send "chatroom-message-send $room1_p1 message1" to p1
expect /chatroom-message-new $room1_p1 room first_room from Owner1 text message1/ from p1
@@ -283,6 +293,8 @@ test ChatroomSubscribedBeforeStart:
test ParallelThreads:
+ let services = "chatroom"
+
spawn as p1
spawn as p2
@@ -292,7 +304,7 @@ test ParallelThreads:
for p in [ p1, p2 ]:
with p:
send "chatroom-watch-local"
- send "start-server"
+ send "start-server services $services"
send "chatroom-create first_room" to p1
expect /chatroom-create-done ([a-z0-9#]+) first_room.*/ from p1 capture room1_p1
@@ -330,7 +342,7 @@ test ParallelThreads:
for p in [p1, p2]:
with p:
- send "start-server"
+ send "start-server services $services"
with p1:
expect /chatroom-message-new $room1_p1 room first_room from Owner. text message(..)/ capture msg
@@ -347,6 +359,8 @@ test ParallelThreads:
test ChatroomMembers:
+ let services = "chatroom"
+
spawn as p1
spawn as p2
spawn as p3
@@ -358,7 +372,7 @@ test ChatroomMembers:
for p in [ p1, p2, p3 ]:
with p:
send "chatroom-watch-local"
- send "start-server"
+ send "start-server services $services"
send "chatroom-create first_room" to p1
expect /chatroom-create-done ([a-z0-9#]+) first_room.*/ from p1 capture room1_p1
@@ -413,9 +427,12 @@ test ChatroomMembers:
send "chatroom-leave $room1_p1" to p1
send "chatroom-leave $room1_p3" to p3
- for p in [ p1, p2, 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
@@ -426,3 +443,222 @@ test ChatroomMembers:
expect /chatroom-members-item Owner2/
expect /chatroom-members-([a-z]+)/ capture done
guard (done == "done")
+
+
+test ChatroomIdentity:
+ let services = "chatroom"
+
+ 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 services $services"
+
+ 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")
+
+
+test ChatroomDelete:
+ let services = "chatroom"
+
+ node n1
+ node n2
+ node n3
+
+ # Create and sync chatrooms on n1 and sync to n2
+ local:
+ spawn as p1 on n1
+ with p1:
+ send "create-identity Device1 Owner1"
+ expect /create-identity-done .*/
+
+ send "chatroom-watch-local"
+ send "start-server services $services"
+
+ send "chatroom-create first"
+ send "chatroom-create second"
+ expect /chatroom-create-done $refpat first.*/
+ expect /chatroom-create-done $refpat second.*/
+
+
+ spawn as p2 on n2
+ with p2:
+ send "create-identity Device2 Owner2"
+ expect /create-identity-done .*/
+
+ send "chatroom-watch-local"
+ send "start-server services $services"
+
+ expect /chatroom-watched-added ($refpat) first sub false/ capture first
+ expect /chatroom-watched-added ($refpat) second sub false/ capture second
+
+ send "chatroom-subscribe $first"
+ send "chatroom-subscribe $second"
+ expect /chatroom-watched-updated $first first sub true .*/
+ expect /chatroom-watched-updated $second second sub true .*/
+
+ local:
+ spawn as p3 on n3
+ with p3:
+ send "create-identity Device3 Owner3"
+ expect /create-identity-done .*/
+
+ local:
+ spawn as p1 on n1
+ spawn as p2 on n2
+ spawn as p3 on n3
+
+ # Delete first chatroom from n1
+ with p1:
+ send "chatroom-watch-local"
+ send "start-server services $services"
+
+ send "chatroom-list-local"
+ expect /chatroom-list-item ($refpat) first sub true/ capture first
+ expect /chatroom-list-item $refpat second sub true/
+ local:
+ expect /chatroom-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "chatroom-delete $first"
+ expect /chatroom-delete-done .*/
+
+ # Setup n3
+ with p3:
+ send "chatroom-watch-local"
+ send "start-server services $services"
+
+ expect /chatroom-watched-added $refpat second sub false/
+
+ # Check that both n1 and n3 see only the second chatroom
+ for p in [ p1, p3 ]:
+ with p:
+ send "chatroom-list-local"
+ expect /chatroom-list-item $refpat second .*/
+ local:
+ expect /chatroom-list-(.*)/ capture done
+ guard (done == "done")
+
+ # Reactive server on n2 and create third chatroom
+ with p2:
+ send "chatroom-watch-local"
+ send "start-server services $services"
+
+ send "chatroom-create third"
+ expect /chatroom-create-done $refpat third.*/
+
+ # Verify that first chatroom appears only on n3 ...
+ with p3:
+ expect /chatroom-watched-added $refpat first sub false/
+ expect /chatroom-watched-added $refpat third sub false/
+
+ send "chatroom-list-local"
+ expect /chatroom-list-item $refpat first .*/
+ expect /chatroom-list-item $refpat second .*/
+ expect /chatroom-list-item $refpat third .*/
+ local:
+ expect /chatroom-list-(.*)/ capture done
+ guard (done == "done")
+
+ # ... and not on n1
+ with p1:
+ expect /chatroom-watched-added ($refpat) third sub false/ capture third
+ send "chatroom-subscribe $third"
+ expect /chatroom-watched-updated $third third sub true .*/
+
+ send "chatroom-list-local"
+ expect /chatroom-list-item $refpat second .*/
+ expect /chatroom-list-item $refpat third .*/
+ local:
+ expect /chatroom-list-(.*)/ capture done
+ guard (done == "done")
+
+ # Delete second chatroom on n2
+ with p2:
+ send "chatroom-list-local"
+ expect /chatroom-list-item $refpat first .*/
+ expect /chatroom-list-item ($refpat) second .*/ capture second
+ expect /chatroom-list-item $refpat third .*/
+ local:
+ expect /chatroom-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "chatroom-delete $second"
+ expect /chatroom-delete-done .*/
+
+ # Send messages
+ with p3:
+ send "chatroom-list-local"
+ expect /chatroom-list-item ($refpat) first .*/ capture first
+ expect /chatroom-list-item ($refpat) second .*/ capture second
+ expect /chatroom-list-item ($refpat) third .*/ capture third
+ local:
+ expect /chatroom-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "chatroom-message-send $first message_first"
+ send "chatroom-message-send $second message_second"
+ send "chatroom-message-send $third message_third"
+
+ # Receive only to non-deleted ones
+ with p1:
+ expect /chatroom-message-new $refpat room second from Owner3 text message_second/
+ expect /chatroom-message-new $refpat room ([a-z]+) from Owner3 text ([a-z_]+)/ capture room, msg
+ guard (room == "third")
+ guard (msg == "message_third")
+
+ send "chatroom-list-local"
+ expect /chatroom-list-item $refpat second .*/
+ expect /chatroom-list-item $refpat third .*/
+ local:
+ expect /chatroom-list-(.*)/ capture done
+ guard (done == "done")
+ with p2:
+ expect /chatroom-message-new $refpat room first from Owner3 text message_first/
+ expect /chatroom-message-new $refpat room ([a-z]+) from Owner3 text ([a-z_]+)/ capture room, msg
+ guard (room == "third")
+ guard (msg == "message_third")
+
+ send "chatroom-list-local"
+ expect /chatroom-list-item $refpat first .*/
+ expect /chatroom-list-item $refpat third .*/
+ local:
+ expect /chatroom-list-(.*)/ capture done
+ guard (done == "done")
diff --git a/test/common.et b/test/common.et
new file mode 100644
index 0000000..bf3b935
--- /dev/null
+++ b/test/common.et
@@ -0,0 +1,6 @@
+module common
+
+export tag HsToDo
+export tag CppToDo
+
+export def refpat = /blake2#[0-9a-f]*/
diff --git a/test/contact.test b/test/contact.et
index 438aa1f..0f967a6 100644
--- a/test/contact.test
+++ b/test/contact.et
@@ -1,4 +1,8 @@
+module contact
+
test Contact:
+ let services = "attach,contact,sync"
+
spawn as p1
spawn as p2
spawn as p3
@@ -9,10 +13,10 @@ test Contact:
send "create-identity Device3 Owner3" to p3
send "create-identity Device4" to p4
- send "start-server" to p1
- send "start-server" to p2
- send "start-server" to p3
- send "start-server" to p4
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+ send "start-server services $services" to p3
+ send "start-server services $services" to p4
expect from p1:
/peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer1_2
diff --git a/test/deferred.et b/test/deferred.et
new file mode 100644
index 0000000..35585cd
--- /dev/null
+++ b/test/deferred.et
@@ -0,0 +1,198 @@
+module deferred
+
+import common
+
+test OnDemandLoad:
+ let services = "test"
+
+ spawn as p1
+ spawn as p2
+
+ send "create-identity Device1" to p1
+ send "create-identity Device2" to p2
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+ expect from p1:
+ /peer 1 addr ${p2.node.ip} 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1/
+
+ with p1:
+ send "store blob"
+ send "test"
+ send ""
+ expect /store-done ($refpat)/ capture blob_ref
+
+ send "store ondemand"
+ send "12"
+ send "$blob_ref"
+ send ""
+ expect /store-done ($refpat)/ capture ondemand_ref
+
+ send "test-message-send 1 $ondemand_ref"
+ expect /test-message-send done/
+ with p2:
+ expect /test-message-received ondemand [0-9]+ $ondemand_ref/
+ expect /test-ondemand-received 0 [0-9]+ $blob_ref/
+
+ send "load-type $ondemand_ref"
+ expect /load-type ondemand/
+
+ send "load-type $blob_ref"
+ expect /load-type-failed/
+
+ send "load-deferred 0"
+ expect /load-deferred-done 0 blob [0-9]+/
+
+ send "load-type $blob_ref"
+ expect /load-type blob/
+
+test OnDemandValidity:
+ let services = "test"
+
+ spawn as p1
+ spawn as p2
+
+ send "create-identity Device1" to p1
+ send "create-identity Device2" to p2
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+ expect from p1:
+ /peer 1 addr ${p2.node.ip} 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1/
+
+ with p1:
+ send "store blob"
+ send "test"
+ send ""
+ expect /store-done ($refpat)/ capture ref
+
+ let size = 12
+
+ send "store ondemand"
+ send "${size - 1}"
+ send "$ref"
+ send ""
+ expect /store-done ($refpat)/ capture ondemand_ref_small
+
+ send "store ondemand"
+ send "$size"
+ send "$ref"
+ send ""
+ expect /store-done ($refpat)/ capture ondemand_ref_correct
+
+ send "store ondemand"
+ send "${size + 1}"
+ send "$ref"
+ send ""
+ expect /store-done ($refpat)/ capture ondemand_ref_big
+
+ send "test-message-send 1 $ondemand_ref_small"
+ expect /test-message-send done/
+ with p2:
+ expect /test-message-received ondemand [0-9]+ $ondemand_ref_small/
+ expect /test-ondemand-received ([0-9]+) [0-9]+ $ref/ capture idx
+ send "load-deferred $idx"
+ expect /load-deferred-invalid $idx/
+
+ send "test-message-send 1 $ondemand_ref_correct"
+ expect /test-message-send done/
+ with p2:
+ expect /test-message-received ondemand [0-9]+ $ondemand_ref_correct/
+ expect /test-ondemand-received ([0-9]+) [0-9]+ $ref/ capture idx
+ send "load-deferred $idx"
+ expect /load-deferred-done $idx blob [0-9]+/
+
+ send "test-message-send 1 $ondemand_ref_big"
+ expect /test-message-send done/
+ with p2:
+ expect /test-message-received ondemand [0-9]+ $ondemand_ref_big/
+ expect /test-ondemand-received ([0-9]+) [0-9]+ $ref/ capture idx
+ send "load-deferred $idx"
+ expect /load-deferred-invalid $idx/
+
+ with p1:
+ send "store rec"
+ send "r:t root1"
+ send ""
+ expect /store-done ($refpat)/ capture rec_root_1
+
+ send "store rec"
+ send "r:t root2"
+ send ""
+ expect /store-done ($refpat)/ capture rec_root_2
+
+ send "store rec"
+ send "r:r $rec_root_1"
+ send ""
+ expect /store-done ($refpat)/ capture rec_merge_1
+
+ send "store rec"
+ send "r:r $rec_root_1"
+ send "r:r $rec_root_2"
+ send "r:t merge2"
+ send ""
+ expect /store-done ($refpat)/ capture rec_merge_2
+
+ send "store rec"
+ send "r:r $rec_root_1"
+ send "r:r $rec_root_2"
+ send "r:t merge3"
+ send ""
+ expect /store-done ($refpat)/ capture rec_merge_3
+
+ send "store rec"
+ send "r:r $rec_merge_1"
+ send "r:r $rec_merge_2"
+ send "r:r $rec_merge_3"
+ send ""
+ expect /store-done ($refpat)/ capture ref
+
+ let size = 695
+
+ send "store ondemand"
+ send "${size - 1}"
+ send "$ref"
+ send ""
+ expect /store-done ($refpat)/ capture ondemand_ref_small
+
+ send "store ondemand"
+ send "$size"
+ send "$ref"
+ send ""
+ expect /store-done ($refpat)/ capture ondemand_ref_correct
+
+ send "store ondemand"
+ send "${size + 1}"
+ send "$ref"
+ send ""
+ expect /store-done ($refpat)/ capture ondemand_ref_big
+
+ send "test-message-send 1 $ondemand_ref_small"
+ expect /test-message-send done/
+ with p2:
+ expect /test-message-received ondemand [0-9]+ $ondemand_ref_small/
+ expect /test-ondemand-received ([0-9]+) [0-9]+ $ref/ capture idx
+ send "load-deferred $idx"
+ expect /load-deferred-invalid $idx/
+
+ send "test-message-send 1 $ondemand_ref_correct"
+ expect /test-message-send done/
+ with p2:
+ expect /test-message-received ondemand [0-9]+ $ondemand_ref_correct/
+ expect /test-ondemand-received ([0-9]+) [0-9]+ $ref/ capture idx
+ send "load-deferred $idx"
+ expect /load-deferred-done $idx [a-z]+ [0-9]+/
+
+ send "test-message-send 1 $ondemand_ref_big"
+ expect /test-message-send done/
+ with p2:
+ expect /test-message-received ondemand [0-9]+ $ondemand_ref_big/
+ expect /test-ondemand-received ([0-9]+) [0-9]+ $ref/ capture idx
+ send "load-deferred $idx"
+ expect /load-deferred-invalid $idx/
diff --git a/test/discovery.et b/test/discovery.et
new file mode 100644
index 0000000..1115887
--- /dev/null
+++ b/test/discovery.et
@@ -0,0 +1,366 @@
+module discovery
+
+def refpat = /blake2#[0-9a-f]*/
+
+test ManualDiscovery:
+ let services = "discovery"
+
+ subnet sd
+ subnet s1
+ subnet s2
+
+ spawn as pd on sd
+ spawn as p1 on s1
+ spawn as p2 on s2
+ send "create-identity Discovery" to pd
+ send "create-identity Device1 Owner1" to p1
+ send "create-identity Device2 Owner2" to p2
+
+ expect /create-identity-done ref ($refpat).*/ from p1 capture p1id
+ send "identity-info $p1id" to p1
+ expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner
+ send "identity-info $p1owner" to p1
+ expect /identity-info ref $p1owner base ($refpat).*/ from p1 capture p1obase
+
+ expect /create-identity-done ref $refpat.*/ from p2
+ expect /create-identity-done ref $refpat.*/ from pd
+
+ # Test discovery using owner and device identities:
+ for id in [ p1obase, p1base ]:
+ for p in [ pd, p1, p2 ]:
+ send "start-server services $services" to p
+
+ for p in [ p1, p2 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [12] addr ${p.node.ip} 29665/
+ /peer [12] id .*/
+
+ send "discovery-connect $id" to p2
+
+ expect from p1:
+ /peer [0-9]+ addr ${p2.node.ip} 29665/
+ /peer [0-9]+ id Device2 Owner2/
+ expect from p2:
+ /peer [0-9]+ addr ${p1.node.ip} 29665/
+ /peer [0-9]+ id Device1 Owner1/
+
+ for p in [ pd, p1, p2 ]:
+ send "stop-server" to p
+ for p in [ pd, p1, p2 ]:
+ expect /stop-server-done/ from p
+
+ # Test delayed discovery with new peer
+ for id in [ p1obase ]:
+ for p in [ pd, p1, p2 ]:
+ send "start-server services $services" to p
+
+ with p1:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [12] addr ${p1.node.ip} 29665/
+ /peer [12] id Device1 Owner1/
+
+ send "discovery-connect $id" to p2
+
+ with p2:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [12] addr ${p2.node.ip} 29665/
+ /peer [12] id Device2 Owner2/
+
+ expect from p1:
+ /peer [0-9]+ addr ${p2.node.ip} 29665/
+ /peer [0-9]+ id Device2 Owner2/
+ expect from p2:
+ /peer [0-9]+ addr ${p1.node.ip} 29665/
+ /peer [0-9]+ id Device1 Owner1/
+
+ for p in [ pd, p1, p2 ]:
+ send "stop-server" to p
+ for p in [ pd, p1, p2 ]:
+ expect /stop-server-done/ from p
+
+
+test DiscoveryJoinedAfter:
+ let services = "discovery"
+
+ subnet sd
+ subnet s1
+ subnet s2
+
+ spawn as pd on sd
+ spawn as p1 on s1
+ spawn as p2 on s2
+ send "create-identity Discovery" to pd
+ send "create-identity Device1 Owner1" to p1
+ send "create-identity Device2 Owner2" to p2
+
+ expect /create-identity-done ref ($refpat).*/ from p1 capture p1id
+ send "identity-info $p1id" to p1
+ expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner
+ send "identity-info $p1owner" to p1
+ expect /identity-info ref $p1owner base ($refpat).*/ from p1 capture p1obase
+
+ expect /create-identity-done ref $refpat.*/ from p2
+ expect /create-identity-done ref $refpat.*/ from pd
+
+ for id in [ p1obase ]:
+ for p in [ pd, p1, p2 ]:
+ send "start-server services $services" to p
+
+ for p in [ p2 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [12] addr ${p.node.ip} 29665/
+ /peer [12] id Device. Owner./
+
+ send "discovery-connect $id" to p2
+
+ for p in [ p1 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [12] addr ${p.node.ip} 29665/
+ /peer [12] id Device. Owner./
+
+ expect from p1:
+ /peer [0-9]+ addr ${p2.node.ip} 29665/
+ /peer [0-9]+ id Device2 Owner2/
+ expect from p2:
+ /peer [0-9]+ addr ${p1.node.ip} 29665/
+ /peer [0-9]+ id Device1 Owner1/
+
+ for p in [ pd, p1, p2 ]:
+ send "stop-server" to p
+ for p in [ pd, p1, p2 ]:
+ expect /stop-server-done/ from p
+
+
+test DiscoveryTunnel:
+ let services = "discovery:tunnel"
+
+ subnet sd
+ subnet s1
+ subnet s2
+
+ spawn as pd on sd
+ spawn as p1 on s1
+ spawn as p2 on s2
+
+ for n in [ p1.node, p2.node ]:
+ shell on n:
+ nft add table inet filter
+ nft add chain inet filter input '{ type filter hook input priority filter ; policy drop; }'
+ nft add rule inet filter input 'ct state { established, related } accept'
+
+ send "create-identity Discovery" to pd
+ send "create-identity Device1 Owner1" to p1
+ send "create-identity Device2 Owner2" to p2
+
+ expect /create-identity-done ref ($refpat).*/ from p1 capture p1id
+ send "identity-info $p1id" to p1
+ expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner
+ send "identity-info $p1owner" to p1
+ expect /identity-info ref $p1owner base ($refpat).*/ from p1 capture p1obase
+
+ expect /create-identity-done ref $refpat.*/ from p2
+ expect /create-identity-done ref $refpat.*/ from pd
+
+ for id in [ p1obase ]:
+ for p in [ pd, p1, p2 ]:
+ send "start-server services $services test-log" to p
+
+ for p in [ p1, p2 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [12] addr ${p.node.ip} 29665/
+ /peer [12] id .*/
+
+ send "discovery-tunnel 1 $id" to p2
+
+ expect /net-ostream-open ${pd.node.ip} 29665 1 1/ from p2
+ expect /net-ostream-open ${p1.node.ip} 29665 1 1/ from pd
+ expect /net-ostream-open ${pd.node.ip} 29665 1 1/ from p1
+ expect /net-ostream-open ${p2.node.ip} 29665 1 1/ from pd
+
+ expect from p1:
+ /peer 2 addr tunnel@.*/
+ /peer 2 id Device2 Owner2/
+ expect from p2:
+ /peer 2 addr tunnel@.*/
+ /peer 2 id Device1 Owner1/
+
+ send "peer-drop 2" to p1
+ send "peer-drop 2" to p2
+
+ expect /net-ostream-close-ack ${pd.node.ip} 29665 1 0/ from p2
+ expect /net-ostream-close-ack ${p1.node.ip} 29665 1 0/ from pd
+ expect /net-ostream-close-ack ${pd.node.ip} 29665 1 0/ from p1
+ expect /net-ostream-close-ack ${p2.node.ip} 29665 1 0/ from pd
+
+ for p in [ pd, p1, p2 ]:
+ send "stop-server" to p
+ for p in [ pd, p1, p2 ]:
+ expect /stop-server-done/ from p
+
+
+test DiscoveryTunnelWithChangedAddresses:
+ let services = "discovery:tunnel"
+
+ subnet sd
+ subnet s1
+ subnet s2
+
+ spawn as pd on sd
+ spawn as p1 on s1
+ spawn as p2 on s2
+
+ for n in [ p1.node, p2.node ]:
+ shell on n:
+ nft add table inet filter
+ nft add chain inet filter input '{ type filter hook input priority filter ; policy drop; }'
+ nft add rule inet filter input 'ct state { established, related } accept'
+
+ send "create-identity Discovery" to pd
+ send "create-identity Device1 Owner1" to p1
+ send "create-identity Device2 Owner2" to p2
+
+ expect /create-identity-done ref ($refpat).*/ from p1 capture p1id
+ send "identity-info $p1id" to p1
+ expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner
+ send "identity-info $p1owner" to p1
+ expect /identity-info ref $p1owner base ($refpat).*/ from p1 capture p1obase
+
+ expect /create-identity-done ref $refpat.*/ from p2
+ expect /create-identity-done ref $refpat.*/ from pd
+
+ for id in [ p1obase ]:
+ send "start-server services $services test-log" to pd
+
+ for p in [ p1, p2 ]:
+ send "start-server services $services test-log" to p
+
+ for p in [ p1, p2 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [12] addr ${p.node.ip} 29665/
+ /peer [12] id .*/
+
+ send "peer-drop 1" to pd
+ send "peer-drop 2" to pd
+ for p in [ p1, p2 ]:
+ send "stop-server" to p
+ for p in [ p1, p2 ]:
+ shell on p.node as get_default:
+ ip route | grep ^default
+ expect /.* via ([0-9.]+).*/ from get_default capture default_route
+ shell on p.node:
+ ip addr del dev veth0 ${p.node.ip}/24
+ ip addr add dev veth0 ${p.node.ip}0/24
+ ip route add default via ${default_route} dev veth0 src ${p.node.ip}0
+ for p in [ p1, p2 ]:
+ expect /stop-server-done/ from p
+ for p in [ p1, p2 ]:
+ send "start-server services $services test-log" to p
+
+ for p in [ p1, p2 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [0-9]+ addr ${p.node.ip}0 29665/
+ /peer [0-9]+ id .*/
+
+ send "discovery-tunnel 1 $id" to p2
+
+ expect /net-ostream-open ${pd.node.ip} 29665 1 1/ from p2
+ expect /net-ostream-open ${p1.node.ip}0 29665 1 1/ from pd
+ expect /net-ostream-open ${pd.node.ip} 29665 1 1/ from p1
+ expect /net-ostream-open ${p2.node.ip}0 29665 1 1/ from pd
+
+ for p in [ pd, p1, p2 ]:
+ send "stop-server" to p
+ for p in [ pd, p1, p2 ]:
+ expect /stop-server-done/ from p
+
+
+test DiscoveryTunnelRefused:
+ let services = "discovery"
+
+ subnet sd
+ subnet s1
+ subnet s2
+
+ spawn as pd on sd
+ spawn as p1 on s1
+ spawn as p2 on s2
+
+ for n in [ p1.node, p2.node ]:
+ shell on n:
+ nft add table inet filter
+ nft add chain inet filter input '{ type filter hook input priority filter ; policy drop; }'
+ nft add rule inet filter input 'ct state { established, related } accept'
+
+ send "create-identity Discovery" to pd
+ send "create-identity Device1 Owner1" to p1
+ send "create-identity Device2 Owner2" to p2
+
+ expect /create-identity-done ref ($refpat).*/ from p1 capture p1id
+ send "identity-info $p1id" to p1
+ expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner
+ send "identity-info $p1owner" to p1
+ expect /identity-info ref $p1owner base ($refpat).*/ from p1 capture p1obase
+
+ expect /create-identity-done ref $refpat.*/ from p2
+ expect /create-identity-done ref $refpat.*/ from pd
+
+ for id in [ p1obase ]:
+ for p in [ pd, p1, p2 ]:
+ send "start-server services $services test-log" to p
+
+ for p in [ p1, p2 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [12] addr ${p.node.ip} 29665/
+ /peer [12] id .*/
+
+ send "discovery-tunnel 1 $id" to p2
+ expect /net-ostream-open ${pd.node.ip} 29665 1 1/ from p2
+ expect /net-ostream-close-ack ${pd.node.ip} 29665 1 0/ from p2
+
+ for p in [ pd, p1, p2 ]:
+ send "stop-server" to p
+ for p in [ pd, p1, p2 ]:
+ expect /stop-server-done/ from p
diff --git a/test/graph.et b/test/graph.et
new file mode 100644
index 0000000..059b0cc
--- /dev/null
+++ b/test/graph.et
@@ -0,0 +1,327 @@
+module graph
+
+
+test FilterCommon:
+ spawn as p
+ with p:
+ send:
+ "store rec"
+ "num:i 1"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r1_1
+
+ send:
+ "store rec"
+ "num:i 1"
+ "PREV:r $r1_1"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r2_1
+
+ send:
+ "store rec"
+ "num:i 1"
+ "PREV:r $r2_1"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r3_1
+
+ send:
+ "store rec"
+ "num:i 1"
+ "PREV:r $r3_1"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r4_1
+
+ # r4_1
+ # |
+ # r3_1
+ # |
+ # r2_1
+ # |
+ # r1_1
+
+ send "stored-common-ancestors $r2_1 | $r4_1"
+ expect /stored-common-ancestors-item $r2_1/
+ local:
+ expect /stored-common-ancestors-(.*)/ capture done
+ guard (done == "done")
+
+
+ send:
+ "store rec"
+ "num:i 2"
+ "PREV:r $r2_1"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r3_2
+
+ send:
+ "store rec"
+ "num:i 2"
+ "PREV:r $r3_2"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r4_2
+
+ # r4_1 r4_2
+ # | |
+ # r3_1 r3_2
+ # \ /
+ # r2_1
+ # |
+ # r1_1
+
+ send "stored-common-ancestors $r4_1 | $r4_2"
+ expect /stored-common-ancestors-item $r2_1/
+ local:
+ expect /stored-common-ancestors-(.*)/ capture done
+ guard (done == "done")
+
+
+ send:
+ "store rec"
+ "num:i 3"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r1_3
+
+ send:
+ "store rec"
+ "num:i 3"
+ "PREV:r $r1_3"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r2_3
+
+ # r4_1 r4_2
+ # | |
+ # r3_1 r3_2
+ # \ /
+ # r2_1 r2_3
+ # | |
+ # r1_1 r1_2
+
+ send "stored-common-ancestors $r4_1 $r4_2 | $r2_3"
+ local:
+ expect /stored-common-ancestors-(.*)/ capture done
+ guard (done == "done")
+
+
+ send:
+ "store rec"
+ "num:i 1"
+ "PREV:r $r4_1"
+ "PREV:r $r4_2"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r5_1
+
+ # r5_1
+ # / \
+ # r4_1 r4_2
+ # | |
+ # r3_1 r3_2
+ # \ /
+ # r2_1
+ # |
+ # r1_1
+
+ send "stored-common-ancestors $r5_1 | $r3_2"
+ expect /stored-common-ancestors-item $r3_2/
+ local:
+ expect /stored-common-ancestors-(.*)/ capture done
+ guard (done == "done")
+
+
+ send:
+ "store rec"
+ "num:i 2"
+ "PREV:r $r4_2"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r5_2
+
+ # r5_1 r5_2
+ # / \ /
+ # r4_1 r4_2
+ # | |
+ # r3_1 r3_2
+ # \ /
+ # r2_1
+ # |
+ # r1_1
+
+ send "stored-common-ancestors $r5_1 | $r5_2 $r3_1"
+ expect /stored-common-ancestors-item $r3_1/
+ expect /stored-common-ancestors-item $r4_2/
+ local:
+ expect /stored-common-ancestors-(.*)/ capture done
+ guard (done == "done")
+
+
+ send:
+ "store rec"
+ "num:i 3"
+ "PREV:r $r2_3"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r3_3
+
+ send:
+ "store rec"
+ "num:i 4"
+ "PREV:r $r2_3"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r3_4
+
+ # r4_1 r4_2
+ # | |
+ # r3_1 r3_2 r3_3 r3_4
+ # \ / \ /
+ # r2_1 r2_3
+ # | |
+ # r1_1 r1_2
+
+ send "stored-common-ancestors $r4_1 $r3_3 | $r4_2 $r3_4"
+ expect /stored-common-ancestors-item $r2_1/
+ expect /stored-common-ancestors-item $r2_3/
+ local:
+ expect /stored-common-ancestors-(.*)/ capture done
+ guard (done == "done")
+
+
+ send:
+ "store rec"
+ "num:i 1"
+ "PREV:r $r4_2"
+ "PREV:r $r3_3"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r5_3
+
+ send:
+ "store rec"
+ "num:i 1"
+ "PREV:r $r4_1"
+ "PREV:r $r3_4"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r5_4
+
+ # -> r5_3 <--r5_4
+ # / / \ |
+ # r4_1 r4_2 \ |
+ # | | | |
+ # r3_1 r3_2 r3_3 r3_4
+ # \ / \ /
+ # r2_1 r2_3
+ # | |
+ # r1_1 r1_2
+
+ send "stored-common-ancestors $r5_3 | $r5_4"
+ expect /stored-common-ancestors-item $r2_1/
+ expect /stored-common-ancestors-item $r2_3/
+ local:
+ expect /stored-common-ancestors-(.*)/ capture done
+ guard (done == "done")
+
+
+test StoredDifference:
+ spawn as p1
+ with p1:
+ # ref names: r<level>_<num>
+
+ send:
+ "store rec"
+ "num:i 1"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r1_1
+
+ send:
+ "store rec"
+ "PREV:r $r1_1"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r2_1
+
+ send "stored-difference $r2_1 |"
+ expect /stored-difference-item $r1_1/
+ expect /stored-difference-item $r2_1/
+ local:
+ expect /stored-difference-(.*)/ capture done
+ guard (done == "done")
+
+ send:
+ "store rec"
+ "PREV:r $r2_1"
+ "num:i 1"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r3_1
+
+ send "stored-difference $r1_1 | $r3_1"
+ expect /stored-difference-item $r2_1/
+ expect /stored-difference-item $r3_1/
+ local:
+ expect /stored-difference-(.*)/ capture done
+ guard (done == "done")
+
+ send:
+ "store rec"
+ "PREV:r $r2_1"
+ "num:i 2"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r3_2
+
+ send:
+ "store rec"
+ "PREV:r $r3_1"
+ "num:i 1"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r4_1
+
+ send:
+ "store rec"
+ "PREV:r $r3_2"
+ "num:i 2"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r4_2
+
+ send "stored-difference $r4_1 | $r4_2"
+ expect /stored-difference-item $r3_1/
+ expect /stored-difference-item $r3_2/
+ expect /stored-difference-item $r4_1/
+ expect /stored-difference-item $r4_2/
+ local:
+ expect /stored-difference-(.*)/ capture done
+ guard (done == "done")
+
+
+ send:
+ "store rec"
+ "PREV:r $r2_1"
+ "num:i 3"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r3_3
+
+ send:
+ "store rec"
+ "PREV:r $r3_2"
+ "PREV:r $r3_3"
+ "num:i 3"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r4_3
+
+ send:
+ "store rec"
+ "PREV:r $r3_3"
+ "num:i 4"
+ ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture r4_4
+
+ send "stored-difference $r4_1 $r4_2 | $r4_3 $r4_4"
+ expect /stored-difference-item $r3_1/
+ expect /stored-difference-item $r3_3/
+ expect /stored-difference-item $r4_1/
+ expect /stored-difference-item $r4_2/
+ expect /stored-difference-item $r4_3/
+ expect /stored-difference-item $r4_4/
+ local:
+ expect /stored-difference-(.*)/ capture done
+ guard (done == "done")
+
+ send "stored-difference $r1_1 $r2_1 $r3_2 $r3_3 | $r4_1 $r4_3"
+ expect /stored-difference-item $r3_1/
+ expect /stored-difference-item $r4_1/
+ expect /stored-difference-item $r4_3/
+ local:
+ expect /stored-difference-(.*)/ capture done
+ guard (done == "done")
diff --git a/test/invite.et b/test/invite.et
new file mode 100644
index 0000000..52f2c8b
--- /dev/null
+++ b/test/invite.et
@@ -0,0 +1,194 @@
+module invite
+
+import common
+
+test InviteContact:
+ let services = "contact,invite"
+
+ spawn as p1
+ spawn as p2
+
+ send "create-identity Device1 Owner1" to p1
+ expect /create-identity-done ref ($refpat)/ from p1 capture p1id
+ send "identity-info $p1id" to p1
+ expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner
+ send "identity-info $p1owner" to p1
+ expect /identity-info ref $p1owner base ($refpat).*/ from p1 capture p1obase
+
+ send "create-identity Device2 Owner2" to p2
+ expect /create-identity-done ref ($refpat)/ from p2 capture p2id
+
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+
+ expect from p1:
+ /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer1_2
+ /peer $peer1_2 id Device2 Owner2/
+
+ expect from p2:
+ /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer2_1
+ /peer $peer2_1 id Device1 Owner1/
+
+ send "invite-contact-create Contact2" to p1
+ expect from p1 /invite-contact-create-done ([^ ]+)/ capture token
+
+ with p2:
+ send "invite-accept 00 $p1obase"
+ expect /invite-accept-done 00/
+ expect /invite-reply 00 invalid/
+
+ send "contact-list"
+ expect:
+ /contact-list-(.*)/ capture done
+ guard (done == "done")
+
+ with p2:
+ send "invite-accept $token $p1obase"
+ expect /invite-accept-done $token/
+ expect /invite-reply $token contact/
+
+ send "contact-list"
+ expect:
+ /contact-list-item [a-z0-9#]+ Owner1 Owner1/
+ /contact-list-(.*)/ capture done
+ guard (done == "done")
+
+ with p2:
+ send "invite-accept $token $p1obase"
+ expect /invite-accept-done $token/
+ expect /invite-reply $token invalid/
+
+ send "contact-list"
+ expect:
+ /contact-list-item [a-z0-9#]+ Owner1 Owner1/
+ /contact-list-(.*)/ capture done
+ guard (done == "done")
+
+ with p1:
+ expect /invite-accepted $token $p2id/
+
+ send "contact-list"
+ expect:
+ /contact-list-item [a-z0-9#]+ Contact2 Owner2/
+ /contact-list-(.*)/ capture done
+ guard (done == "done")
+
+
+test InviteContactDelayed:
+ let services = "contact,invite"
+
+ subnet s1
+ subnet s2
+
+ spawn as p1 on s1
+ spawn as p2 on s2
+
+ send "create-identity Device1 Owner1" to p1
+ expect /create-identity-done ref ($refpat)/ from p1 capture p1id
+ send "identity-info $p1id" to p1
+ expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner
+ send "identity-info $p1owner" to p1
+ expect /identity-info ref $p1owner base ($refpat).*/ from p1 capture p1obase
+
+ send "create-identity Device2 Owner2" to p2
+ expect /create-identity-done ref ($refpat)/ from p2 capture p2id
+
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+
+ send "invite-contact-create Contact2" to p1
+ expect from p1 /invite-contact-create-done ([^ ]+)/ capture token
+
+ with p2:
+ send "invite-accept $token $p1obase"
+ expect /invite-accept-done $token/
+
+ send to p2 "peer-add ${p1.node.ip}"
+
+ expect from p1:
+ /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer1_2
+ /peer $peer1_2 id Device2 Owner2/
+
+ expect from p2:
+ /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer2_1
+ /peer $peer2_1 id Device1 Owner1/
+
+ with p2:
+ expect /invite-reply $token contact/
+
+ send "contact-list"
+ expect:
+ /contact-list-item [a-z0-9#]+ .*/
+ /contact-list-(.*)/ capture done
+ guard (done == "done")
+
+ with p1:
+ expect /invite-accepted $token $refpat/
+
+ send "contact-list"
+ expect:
+ /contact-list-item [a-z0-9#]+ Contact2 .*/
+ /contact-list-(.*)/ capture done
+ guard (done == "done")
+
+
+test InviteContactDiscovery:
+ let services = "contact,invite,discovery"
+
+ subnet sd
+ subnet s1
+ subnet s2
+
+ spawn as pd on sd
+ spawn as p1 on s1
+ spawn as p2 on s2
+
+ send "create-identity Discovery" to pd
+ expect /create-identity-done ref $refpat.*/ from pd
+
+ send "create-identity Device1 Owner1" to p1
+ expect /create-identity-done ref ($refpat)/ from p1 capture p1id
+ send "identity-info $p1id" to p1
+ expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner
+ send "identity-info $p1owner" to p1
+ expect /identity-info ref $p1owner base ($refpat).*/ from p1 capture p1obase
+
+ send "create-identity Device2 Owner2" to p2
+ expect /create-identity-done ref ($refpat)/ from p2 capture p2id
+
+ send "start-server services discovery" to pd
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+
+ for p in [ p1, p2 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [12] addr ${p.node.ip} 29665/
+ /peer [12] id .*/
+
+ send "invite-contact-create Contact2" to p1
+ expect from p1 /invite-contact-create-done ([^ ]+)/ capture token
+
+ with p2:
+ send "invite-accept $token $p1obase"
+ expect /invite-accept-done $token/
+ expect /invite-reply $token contact/
+
+ send "contact-list"
+ expect:
+ /contact-list-item [a-z0-9#]+ .*/
+ /contact-list-(.*)/ capture done
+ guard (done == "done")
+
+ with p1:
+ expect /invite-accepted $token $refpat/
+
+ send "contact-list"
+ expect:
+ /contact-list-item [a-z0-9#]+ Contact2 .*/
+ /contact-list-(.*)/ capture done
+ guard (done == "done")
diff --git a/test/message.et b/test/message.et
new file mode 100644
index 0000000..a2028c7
--- /dev/null
+++ b/test/message.et
@@ -0,0 +1,457 @@
+module message
+
+import common
+
+test DirectMessage:
+ let services = "contact,dm"
+
+ spawn as p1
+ spawn as p2
+ send "create-identity Device1 Owner1" to p1
+ send "create-identity Device2 Owner2" to p2
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+
+ expect from p1:
+ /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer1_2
+ /peer $peer1_2 id Device2 Owner2/
+
+ expect from p2:
+ /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer2_1
+ /peer $peer2_1 id Device1 Owner1/
+
+ with p1:
+ send "dm-list-peer $peer1_2"
+ expect /dm-list-done/
+
+ # Send messages to peers
+
+ for i in [1..2]:
+ send "dm-send-peer $peer1_2 hello$i" to p1
+ expect /dm-sent from Owner1 new no text hello$i/ from p1
+ expect /dm-received from Owner1 new yes text hello$i/ from p2
+
+ for i in [1..2]:
+ send "dm-send-peer $peer2_1 hi$i" to p2
+ expect /dm-sent from Owner2 new no text hi$i/ from p2
+ expect /dm-received from Owner2 new yes text hi$i/ from p1
+
+ for i in [3..4]:
+ send "dm-send-peer $peer1_2 hello$i" to p1
+ expect /dm-sent from Owner1 new no text hello$i/ from p1
+ expect /dm-received from Owner1 new yes text hello$i/ from p2
+ send "dm-send-peer $peer2_1 hi$i" to p2
+ expect /dm-sent from Owner2 new no text hi$i/ from p2
+ expect /dm-received from Owner2 new yes text hi$i/ from p1
+
+ # Create contacts
+
+ local:
+ send "contact-request $peer1_2" to p1
+ expect /contact-request $peer2_1 ([0-9]*)/ from p2 capture code2
+ expect /contact-response $peer1_2 ([0-9]*)/ from p1 capture code1
+ guard (code1 == code2)
+
+ send "contact-accept $peer1_2" to p1
+ send "contact-accept $peer2_1" to p2
+ expect /contact-request-done $peer2_1/ from p2
+ expect /contact-response-done $peer1_2/ from p1
+
+ send "contact-list" to p1
+ expect from p1:
+ /contact-list-item ([a-z0-9#]+) Owner2 Owner2/ capture c1_2
+ /contact-list-(.*)/ capture done1_1
+
+ send "contact-list" to p2
+ expect from p2:
+ /contact-list-item ([a-z0-9#]+) Owner1 Owner1/ capture c2_1
+ /contact-list-(.*)/ capture done1_2
+
+ # Send messages to contacts
+
+ for i in [1..2]:
+ send "dm-send-contact $c1_2 hello_c_$i" to p1
+ expect /dm-sent from Owner1 new no text hello_c_$i/ from p1
+ expect /dm-received from Owner1 new yes text hello_c_$i/ from p2
+
+ for i in [1..2]:
+ send "dm-send-contact $c2_1 hi_c_$i" to p2
+ expect /dm-sent from Owner2 new no text hi_c_$i/ from p2
+ expect /dm-received from Owner2 new yes text hi_c_$i/ from p1
+
+ for i in [3..4]:
+ send "dm-send-contact $c1_2 hello_c_$i" to p1
+ expect /dm-sent from Owner1 new no text hello_c_$i/ from p1
+ expect /dm-received from Owner1 new yes text hello_c_$i/ from p2
+ send "dm-send-contact $c2_1 hi_c_$i" to p2
+ expect /dm-sent from Owner2 new no text hi_c_$i/ from p2
+ expect /dm-received from Owner2 new yes text hi_c_$i/ from p1
+
+ send "dm-list-contact $c1_2" to p1
+ send "dm-list-contact $c2_1" to p2
+ for p in [p1, p2]:
+ with p:
+ for i in [1..4]:
+ expect /dm-list-item from Owner1 new [a-z]+ text hello_c_$i/
+ expect /dm-list-item from Owner2 new [a-z]+ text hi_c_$i/
+ for i in [1..4]:
+ expect /dm-list-item from Owner1 new [a-z]+ text hello$i/
+ expect /dm-list-item from Owner2 new [a-z]+ text hi$i/
+ expect /dm-list-(.*)/ capture done
+ guard (done == "done")
+
+ # Reload message history
+
+ 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 services $services"
+
+ with p1:
+ send "contact-list"
+ expect:
+ /contact-list-item $c1_2 Owner2 Owner2/
+ /contact-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "dm-list-contact $c1_2" to p1
+ send "dm-list-contact $c2_1" to p2
+ for p in [p1, p2]:
+ with p:
+ for i in [1..4]:
+ expect /dm-list-item from Owner1 new [a-z]+ text hello_c_$i/
+ expect /dm-list-item from Owner2 new [a-z]+ text hi_c_$i/
+ for i in [1..4]:
+ expect /dm-list-item from Owner1 new [a-z]+ text hello$i/
+ expect /dm-list-item from Owner2 new [a-z]+ text hi$i/
+ expect /dm-list-(.*)/ capture done
+ guard (done == "done")
+
+ # Send message while offline
+
+ for p in [p1, p2]:
+ with p:
+ send "stop-server"
+ for p in [p1, p2]:
+ with p:
+ expect /stop-server-done/
+ send "start-server services $services" to p2
+
+ send "dm-send-contact $c1_2 while_offline" to p1
+ expect /dm-sent from Owner1 new no text while_offline/ from p1
+ send "start-server services $services" to p1
+
+ expect /dm-received from Owner1 new yes text while_offline/ from p2
+
+ for p in [p1, p2]:
+ with p:
+ send "stop-server"
+ for p in [p1, p2]:
+ with p:
+ expect /stop-server-done/
+ send "start-server services $services" to p1
+
+ send "dm-send-contact $c1_2 while_peer_offline" to p1
+ expect /dm-sent from Owner1 new no text while_peer_offline/ from p1
+ send "start-server services $services" to p2
+
+ expect /dm-received from Owner1 new yes text while_peer_offline/ from p2
+
+
+test DirectMessageDiscovery:
+ let services = "dm,discovery"
+
+ subnet sd
+ subnet s1
+ subnet s2
+ subnet s3
+ subnet s4
+
+ spawn on sd as pd
+ spawn on s1 as p1
+ spawn on s2 as p2
+ spawn on s3 as p3
+ spawn on s4 as p4
+
+ send "create-identity Discovery" to pd
+
+ send "create-identity Device1 Owner1" to p1
+ expect /create-identity-done ref ($refpat)/ from p1 capture p1_id
+ send "identity-info $p1_id" to p1
+ expect /identity-info ref $p1_id base ($refpat) owner ($refpat).*/ from p1 capture p1_base, p1_owner
+
+ send "create-identity Device2 Owner2" to p2
+ expect /create-identity-done ref ($refpat)/ from p2 capture p2_id
+ send "identity-info $p2_id" to p2
+ expect /identity-info ref $p2_id base ($refpat) owner ($refpat).*/ from p2 capture p2_base, p2_owner
+ send "identity-info $p2_owner" to p2
+ expect /identity-info ref $p2_owner base ($refpat).*/ from p2 capture p2_obase
+
+ send "create-identity Device3 Owner3" to p3
+ expect /create-identity-done ref ($refpat)/ from p3 capture p3_id
+ send "identity-info $p3_id" to p3
+ expect /identity-info ref $p3_id base ($refpat) owner ($refpat).*/ from p3 capture p3_base, p3_owner
+
+ send "create-identity Device4 Owner4" to p4
+ expect /create-identity-done ref ($refpat)/ from p4 capture p4_id
+ send "identity-info $p4_id" to p4
+ expect /identity-info ref $p4_id base ($refpat) owner ($refpat).*/ from p4 capture p4_base, p4_owner
+
+
+ for p in [ p1, p2, p3, p4 ]:
+ with p:
+ send "start-server services $services"
+
+ for p in [ p2, p3, p4 ]:
+ with p1:
+ send "peer-add ${p.node.ip}"
+ expect:
+ /peer [0-9]+ addr ${p.node.ip} 29665/
+ /peer [0-9]+ id Device. Owner./
+ expect from p:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1 Owner1/
+
+ # Make sure p1 has other identities in storage:
+ for i in [ 1 .. 3 ]:
+ send "dm-send-peer $i init1" to p1
+ for p in [ p2, p3, p4 ]:
+ expect /dm-received from Owner1 new yes text init1/ from p
+ send "dm-send-identity $p1_owner init2" to p
+ expect /dm-received from Owner. new yes text init2/ from p1
+
+ # Restart servers to remove peers:
+ for p in [ p1, p2, p3, p4 ]:
+ with p:
+ send "stop-server"
+ for p in [ p1, p2, p3, p4 ]:
+ with p:
+ expect /stop-server-done/
+
+ # Prepare message before peers connect to discovery
+ send "dm-send-identity $p4_owner hello_to_p4" to p1
+
+ for p in [ p1, p2, p3, p4, pd ]:
+ with p:
+ send "start-server services $services"
+
+ for p in [ p2, p3, p4, p1 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [0-9]+ addr ${p.node.ip} 29665/
+ /peer [0-9]+ id Device. Owner./
+
+ multiply_timeout by 2.0
+
+ # Connect via discovery manually, then send message
+ send "discovery-connect $p2_obase" to p1
+ expect from p1:
+ /peer [0-9]+ addr ${p2.node.ip} 29665/
+ /peer [0-9]+ id Device2 Owner2/
+ send "dm-send-identity $p2_owner hello_to_p2" to p1
+ expect /dm-received from Owner1 new yes text hello_to_p2/ from p2
+
+ # Send message, expect automatic discovery
+ send "dm-send-identity $p3_owner hello_to_p3" to p1
+ expect /dm-received from Owner1 new yes text hello_to_p3/ from p3
+
+ # Verify the first message
+ expect /dm-received from Owner1 new yes text hello_to_p4/ from p4
+
+ # Prepare unsent messages, followed by a delivered one:
+ for p in [ p3, p4 ]:
+ send "stop-server" to p
+ expect /stop-server-done/ from p
+
+ send "dm-send-identity $p4_owner msg1_to_p4" to p1
+ send "dm-send-identity $p3_owner msg_to_p3" to p1
+ send "dm-send-identity $p4_owner msg2_to_p4" to p1
+ send "dm-send-identity $p2_owner msg_to_p2" to p1
+ expect /dm-received from Owner1 new yes text msg_to_p2/ from p2
+
+ # Restart servers to remove peers:
+ for p in [ p1, p2, pd ]:
+ with p:
+ send "stop-server"
+ for p in [ p1, p2, pd ]:
+ with p:
+ expect /stop-server-done/
+ for p in [ p1, p2, p3, p4, pd ]:
+ with p:
+ send "start-server services $services"
+ for p in [ p2, p3, p4, p1 ]:
+ with p:
+ send "peer-add ${pd.node.ip}"
+ expect:
+ /peer 1 addr ${pd.node.ip} 29665/
+ /peer 1 id Discovery/
+ expect from pd:
+ /peer [0-9]+ addr ${p.node.ip} 29665/
+ /peer [0-9]+ id Device. Owner./
+
+ expect /dm-received from Owner1 new yes text msg1_to_p4/ from p4
+ expect /dm-received from Owner1 new yes text msg2_to_p4/ from p4
+ expect /dm-received from Owner1 new yes text msg_to_p3/ from p3
+
+ for p in [ p1, p2, p3, p4, pd ]:
+ send "stop-server" to p
+ for p in [ p1, p2, p3, p4, pd ]:
+ expect /stop-server-done/ from p
+
+
+test DirectMessageSeen:
+ let services = "dm,attach,sync"
+
+ spawn as p1
+ spawn as p2
+
+ send "create-identity Device1 Owner1" to p1
+ expect /create-identity-done ref ($refpat)/ from p1 capture p1id
+ send "identity-info $p1id" to p1
+ expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner
+
+ send "create-identity Device2 Owner2" to p2
+ expect /create-identity-done ref ($refpat)/ from p2 capture p2id
+ send "identity-info $p2id" to p2
+ expect /identity-info ref $p2id base ($refpat) owner ($refpat).*/ from p2 capture p2base, p2owner
+
+ for p in [ p1, p2 ]:
+ send "start-server services $services" to p
+ send "dm-log-change" to p
+ expect /dm-log-change-done/ from p
+
+ expect from p1:
+ /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer1_2
+ /peer $peer1_2 id Device2 Owner2/
+
+ expect from p2:
+ /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer2_1
+ /peer $peer2_1 id Device1 Owner1/
+
+ for i in [ 1 .. 3 ]:
+ send "dm-send-peer $peer1_2 msg_a_$i" to p1
+ expect /dm-sent from Owner1 new no text msg_a_$i/ from p1
+ expect /dm-received from Owner1 new yes text msg_a_$i/ from p2
+
+ send "dm-send-peer $peer2_1 msg_b_1" to p2
+ expect /dm-removed 3/ from p2
+ for i in [ 1 .. 3 ]:
+ expect /dm-received from Owner1 new no text msg_a_$i/ from p2
+ expect /dm-sent from Owner2 new no text msg_b_1/ from p2
+ expect /dm-received from Owner2 new yes text msg_b_1/ from p1
+
+ for i in [ 2 .. 3 ]:
+ send "dm-send-peer $peer2_1 msg_b_$i" to p2
+ expect /dm-sent from Owner2 new no text msg_b_$i/ from p2
+ expect /dm-received from Owner2 new yes text msg_b_$i/ from p1
+
+ send "dm-list-identity $p2owner" to p1
+ send "dm-list-identity $p1owner" to p2
+ for i in [ 1 .. 3 ]:
+ expect /dm-list-item from Owner1 new no text msg_a_$i/ from p1
+ expect /dm-list-item from Owner1 new no text msg_a_$i/ from p2
+ for i in [ 1 .. 3 ]:
+ expect /dm-list-item from Owner2 new yes text msg_b_$i/ from p1
+ expect /dm-list-item from Owner2 new no text msg_b_$i/ from p2
+ for p in [ p1, p2 ]:
+ expect /dm-list-(.*)/ from p capture done
+ guard (done == "done")
+
+ send "dm-mark-seen $p2owner" to p1
+ expect /dm-mark-seen-done $p2owner/ from p1
+ send "dm-mark-seen $p1owner" to p2
+ expect /dm-mark-seen-done $p1owner/ from p2
+
+ send "dm-list-identity $p2owner" to p1
+ send "dm-list-identity $p1owner" to p2
+ for i in [ 1 .. 3 ]:
+ expect /dm-list-item from Owner1 new no text msg_a_$i/ from p1
+ expect /dm-list-item from Owner1 new no text msg_a_$i/ from p2
+ for i in [ 1 .. 3 ]:
+ expect /dm-list-item from Owner2 new no text msg_b_$i/ from p1
+ expect /dm-list-item from Owner2 new no text msg_b_$i/ from p2
+ for p in [ p1, p2 ]:
+ expect /dm-list-(.*)/ from p capture done
+ guard (done == "done")
+
+
+test MessageManyPeers:
+ tag: HsToDo
+
+ let services = "dm"
+
+ spawn as p1
+ spawn as p2
+ spawn as p3
+ spawn as p4
+ spawn as p5
+ spawn as p6
+ spawn as p7
+ spawn as p8
+
+ let ps = [ p1, p2, p3, p4, p5, p6, p7, p8 ]
+ send "create-identity Device1 Owner1" to p1
+ send "create-identity Device1 Owner2" to p2
+ send "create-identity Device1 Owner3" to p3
+ send "create-identity Device1 Owner4" to p4
+ send "create-identity Device1 Owner5" to p5
+ send "create-identity Device1 Owner6" to p6
+ send "create-identity Device1 Owner7" to p7
+ send "create-identity Device1 Owner8" to p8
+ for p in ps:
+ expect /create-identity-done ref $refpat/ from p
+
+ for p in ps:
+ send "start-server services $services" to p
+
+ for p in ps:
+ for i in [ 1 .. 7 ]:
+ expect from p:
+ /peer $i addr .*/
+ /peer $i id Device. Owner./
+
+ for p in ps:
+ for i in [ 1 .. 7 ]:
+ send "dm-send-peer $i some_message" to p
+ for p in ps:
+ for i in [ 1 .. 7 ]:
+ expect /dm-received from Owner. new yes text some_message/ from p
+
+
+test MessageManyConcurrent:
+ tag: HsToDo
+
+ let services = "dm"
+ let count = 40
+
+ spawn as p1
+ spawn as p2
+ let ps = [ p1, p2 ]
+
+ send "create-identity Device1 Owner1" to p1
+ send "create-identity Device1 Owner2" to p2
+ for p in ps:
+ expect /create-identity-done ref $refpat/ from p
+ send "start-server services $services" to p
+
+ for p in ps:
+ expect from p:
+ /peer 1 addr .*/
+ /peer 1 id Device. Owner./
+
+ for i in [ 1 .. count ]:
+ send "dm-send-peer 1 p1_$i" to p1
+ send "dm-send-peer 1 p2_$i" to p2
+
+ for i in [ 1 .. count ]:
+ expect /dm-received from Owner. new yes text p._[0-9]+/ from p1
+ expect /dm-received from Owner. new yes text p1_$i/ from p2
diff --git a/test/message.test b/test/message.test
deleted file mode 100644
index 307f11a..0000000
--- a/test/message.test
+++ /dev/null
@@ -1,149 +0,0 @@
-test DirectMessage:
- spawn as p1
- spawn as p2
- send "create-identity Device1 Owner1" to p1
- send "create-identity Device2 Owner2" to p2
- send "start-server" to p1
- send "start-server" to p2
-
- expect from p1:
- /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer1_2
- /peer $peer1_2 id Device2 Owner2/
-
- expect from p2:
- /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer2_1
- /peer $peer2_1 id Device1 Owner1/
-
- with p1:
- send "dm-list-peer $peer1_2"
- expect /dm-list-done/
-
- # Send messages to peers
-
- for i in [1..2]:
- send "dm-send-peer $peer1_2 hello$i" to p1
- expect /dm-received from Owner1 text hello$i/ from p2
-
- for i in [1..2]:
- send "dm-send-peer $peer2_1 hi$i" to p2
- expect /dm-received from Owner2 text hi$i/ from p1
-
- for i in [3..4]:
- send "dm-send-peer $peer1_2 hello$i" to p1
- expect /dm-received from Owner1 text hello$i/ from p2
- send "dm-send-peer $peer2_1 hi$i" to p2
- expect /dm-received from Owner2 text hi$i/ from p1
-
- # Create contacts
-
- local:
- send "contact-request $peer1_2" to p1
- expect /contact-request $peer2_1 ([0-9]*)/ from p2 capture code2
- expect /contact-response $peer1_2 ([0-9]*)/ from p1 capture code1
- guard (code1 == code2)
-
- send "contact-accept $peer1_2" to p1
- send "contact-accept $peer2_1" to p2
- expect /contact-request-done $peer2_1/ from p2
- expect /contact-response-done $peer1_2/ from p1
-
- send "contact-list" to p1
- expect from p1:
- /contact-list-item ([a-z0-9#]+) Owner2 Owner2/ capture c1_2
- /contact-list-(.*)/ capture done1_1
-
- send "contact-list" to p2
- expect from p2:
- /contact-list-item ([a-z0-9#]+) Owner1 Owner1/ capture c2_1
- /contact-list-(.*)/ capture done1_2
-
- # Send messages to contacts
-
- for i in [1..2]:
- send "dm-send-contact $c1_2 hello_c_$i" to p1
- expect /dm-received from Owner1 text hello_c_$i/ from p2
-
- for i in [1..2]:
- send "dm-send-contact $c2_1 hi_c_$i" to p2
- expect /dm-received from Owner2 text hi_c_$i/ from p1
-
- for i in [3..4]:
- send "dm-send-contact $c1_2 hello_c_$i" to p1
- expect /dm-received from Owner1 text hello_c_$i/ from p2
- send "dm-send-contact $c2_1 hi_c_$i" to p2
- expect /dm-received from Owner2 text hi_c_$i/ from p1
-
- send "dm-list-contact $c1_2" to p1
- send "dm-list-contact $c2_1" to p2
- for p in [p1, p2]:
- with p:
- for i in [1..4]:
- expect /dm-list-item from Owner1 text hello_c_$i/
- expect /dm-list-item from Owner2 text hi_c_$i/
- for i in [1..4]:
- expect /dm-list-item from Owner1 text hello$i/
- expect /dm-list-item from Owner2 text hi$i/
- expect /dm-list-(.*)/ capture done
- guard (done == "done")
-
- # Reload message history
-
- 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"
-
- with p1:
- send "contact-list"
- expect:
- /contact-list-item $c1_2 Owner2 Owner2/
- /contact-list-(.*)/ capture done
- guard (done == "done")
-
- send "dm-list-contact $c1_2" to p1
- send "dm-list-contact $c2_1" to p2
- for p in [p1, p2]:
- with p:
- for i in [1..4]:
- expect /dm-list-item from Owner1 text hello_c_$i/
- expect /dm-list-item from Owner2 text hi_c_$i/
- for i in [1..4]:
- expect /dm-list-item from Owner1 text hello$i/
- expect /dm-list-item from Owner2 text hi$i/
- expect /dm-list-(.*)/ capture done
- guard (done == "done")
-
- # Send message while offline
-
- for p in [p1, p2]:
- with p:
- send "stop-server"
- for p in [p1, p2]:
- with p:
- expect /stop-server-done/
- send "start-server" to p2
-
- send "dm-send-contact $c1_2 while_offline" to p1
- send "start-server" to p1
-
- expect /dm-received from Owner1 text while_offline/ from p2
-
- for p in [p1, p2]:
- with p:
- send "stop-server"
- for p in [p1, p2]:
- with p:
- expect /stop-server-done/
- send "start-server" to p1
-
- send "dm-send-contact $c1_2 while_peer_offline" to p1
- # TODO: sync from p1 on peer p2 discovery not ensured without addition wait
- #wait
- send "start-server" to p2
-
- expect /dm-received from Owner1 text while_peer_offline/ from p2
diff --git a/test/network.et b/test/network.et
new file mode 100644
index 0000000..ead1354
--- /dev/null
+++ b/test/network.et
@@ -0,0 +1,539 @@
+module network
+
+test Discovery:
+ spawn as p1
+ spawn as p2
+ send "create-identity Device1 Owner" to p1
+ send "create-identity Device2" to p2
+ send "start-server" to p1
+ send "start-server" to p2
+ expect from p1:
+ /peer 1 addr ${p2.node.ip} 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1 Owner/
+
+ send "update-local-identity Device1A" to p1
+ expect /peer 1 id Device1A Owner/ from p2
+
+ send "update-shared-identity OwnerA" to p1
+ expect /peer 1 id Device1A OwnerA/ from p2
+
+ send "update-local-identity Device1B" to p1
+ expect /peer 1 id Device1B OwnerA/ from p2
+
+ send "update-shared-identity OwnerB" to p1
+ expect /peer 1 id Device1B OwnerB/ from p2
+
+ with p2:
+ send "stop-server"
+ expect /stop-server-done/
+
+ send "update-shared-identity OwnerC" to p1
+
+ with p1:
+ send "stop-server"
+ expect /stop-server-done/
+
+ spawn as p3
+ spawn as p4
+ spawn as p5
+ spawn as p6
+ send "create-identity Device3" to p3
+ send "create-identity Device4" to p4
+ send "create-identity Device5" to p5
+ send "create-identity Device6" to p6
+
+ for p in [ p1, p2, p3, p4, p5, p6 ]:
+ send "start-server" to p
+
+ expect from p1:
+ /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer1_2
+ /peer $peer1_2 id Device2/
+ /peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer1_3
+ /peer $peer1_3 id Device3/
+ /peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer1_4
+ /peer $peer1_4 id Device4/
+ /peer ([0-9]+) addr ${p5.node.ip} 29665/ capture peer1_5
+ /peer $peer1_5 id Device5/
+ /peer ([0-9]+) addr ${p6.node.ip} 29665/ capture peer1_6
+ /peer $peer1_6 id Device6/
+
+ expect from p2:
+ /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer2_1
+ /peer $peer2_1 id Device1B OwnerC/
+ /peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer2_3
+ /peer $peer2_3 id Device3/
+ /peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer2_4
+ /peer $peer2_4 id Device4/
+ /peer ([0-9]+) addr ${p5.node.ip} 29665/ capture peer2_5
+ /peer $peer2_5 id Device5/
+ /peer ([0-9]+) addr ${p6.node.ip} 29665/ capture peer2_6
+ /peer $peer2_6 id Device6/
+
+ expect from p3:
+ /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer3_1
+ /peer $peer3_1 id Device1B OwnerC/
+ /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer3_2
+ /peer $peer3_2 id Device2/
+ /peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer3_4
+ /peer $peer3_4 id Device4/
+ /peer ([0-9]+) addr ${p5.node.ip} 29665/ capture peer3_5
+ /peer $peer3_5 id Device5/
+ /peer ([0-9]+) addr ${p6.node.ip} 29665/ capture peer3_6
+ /peer $peer3_6 id Device6/
+
+ expect from p4:
+ /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer4_1
+ /peer $peer4_1 id Device1B OwnerC/
+ /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer4_2
+ /peer $peer4_2 id Device2/
+ /peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer4_3
+ /peer $peer4_3 id Device3/
+ /peer ([0-9]+) addr ${p5.node.ip} 29665/ capture peer4_5
+ /peer $peer4_5 id Device5/
+ /peer ([0-9]+) addr ${p6.node.ip} 29665/ capture peer4_6
+ /peer $peer4_6 id Device6/
+
+ expect from p5:
+ /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer5_1
+ /peer $peer5_1 id Device1B OwnerC/
+ /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer5_2
+ /peer $peer5_2 id Device2/
+ /peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer5_3
+ /peer $peer5_3 id Device3/
+ /peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer5_4
+ /peer $peer5_4 id Device4/
+ /peer ([0-9]+) addr ${p6.node.ip} 29665/ capture peer5_6
+ /peer $peer5_6 id Device6/
+
+ expect from p6:
+ /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer6_1
+ /peer $peer6_1 id Device1B OwnerC/
+ /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer6_2
+ /peer $peer6_2 id Device2/
+ /peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer6_3
+ /peer $peer6_3 id Device3/
+ /peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer6_4
+ /peer $peer6_4 id Device4/
+ /peer ([0-9]+) addr ${p5.node.ip} 29665/ capture peer6_5
+ /peer $peer6_5 id Device5/
+
+
+test LargeData:
+ let services = "test"
+
+ spawn as p1
+ spawn as p2
+ send "create-identity Device1" to p1
+ send "create-identity Device2" to p2
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+ expect from p1:
+ /peer 1 addr ${p2.node.ip} 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1/
+
+ for i in [0..10]:
+ with p1:
+ # Create blob with (i * 1000) bytes
+ send "store blob"
+ for j in [1 .. i * 10]:
+ # 100 bytes each line
+ send "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
+ send ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture ref
+
+ send "test-message-send 1 $ref"
+ expect /test-message-send done/
+ expect /test-message-received blob ${i*1000} $ref/ from p2
+
+
+test ManyStreams:
+ let services = "test"
+
+ spawn as p1
+ spawn as p2
+ send "create-identity Device1" to p1
+ send "create-identity Device2" to p2
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+ expect from p1:
+ /peer 1 addr ${p2.node.ip} 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1/
+
+ for i in [0..100]:
+ with p1:
+ # Create blob with 1000 bytes + decimal i
+ send "store blob"
+ for j in [1 .. 10]:
+ # 100 bytes each line
+ send "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
+ send "$i"
+ send ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture ref
+
+ send "test-message-send 1 $ref"
+ expect /test-message-send done/
+ expect /test-message-received blob 100[2-4] $ref/ from p2
+
+
+test ServiceStreams:
+ let services = "test"
+
+ spawn as p1
+ spawn as p2
+ send "create-identity Device1" to p1
+ send "create-identity Device2" to p2
+ send "start-server services $services test-log" to p1
+ send "start-server services $services test-log" to p2
+ expect from p1:
+ /peer 1 addr ${p2.node.ip} 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1/
+
+ send "test-stream-open 1" to p1
+ expect /test-stream-open-done 1 ([0-9]+)/ from p1 capture stream1
+ expect /test-stream-open-from 1 $stream1/ from p2
+
+ expect /net-ostream-open ${p2.node.ip} 29665 1 1/ from p1
+
+ send "test-stream-send 1 $stream1 hello" to p1
+ expect /test-stream-send-done 1 $stream1/ from p1
+ expect /test-stream-received 1 $stream1 0 hello/ from p2
+
+ send "test-stream-close 1 $stream1" to p1
+ expect /test-stream-close-done 1 $stream1/ from p1
+ expect /test-stream-closed-from 1 $stream1 1/ from p2
+
+ expect /net-ostream-close-send ${p2.node.ip} 29665 1/ from p1
+ expect /net-ostream-close-ack ${p2.node.ip} 29665 1 0/ from p1
+
+ send "test-stream-open 1 8" to p2
+ expect /test-stream-open-done 1 ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)/ from p2 capture stream2_1, stream2_2, stream2_3, stream2_4, stream2_5, stream2_6, stream2_7, stream2_8
+ expect /test-stream-open-from 1 $stream2_1 $stream2_2 $stream2_3 $stream2_4 $stream2_5 $stream2_6 $stream2_7 $stream2_8/ from p1
+
+ let streams2 = [ stream2_1, stream2_2, stream2_3, stream2_4, stream2_5, stream2_6, stream2_7, stream2_8 ]
+ with p2:
+ expect /net-ostream-open ${p1.node.ip} 29665 . 8/
+ flush matching /net-ostream-open ${p1.node.ip} 29665.*/
+
+ for i in [ 1..20 ]:
+ for s in streams2:
+ send "test-stream-send 1 $s hello$i"
+ for i in [ 1..20 ]:
+ for s in streams2:
+ expect /test-stream-send-done 1 $s/
+ for s in streams2:
+ send "test-stream-close 1 $s"
+ for s in streams2:
+ expect /test-stream-close-done 1 $s/
+
+ expect /net-ostream-close-ack ${p1.node.ip} 29665 . 0/
+ flush matching /net-ostream-close-[a-z]* ${p1.node.ip} 29665.*/
+ with p1:
+ for i in [ 1..20 ]:
+ for s in streams2:
+ expect /test-stream-received 1 $s ${i-1} hello$i/
+ for s in streams2:
+ expect /test-stream-closed-from 1 $s 20/
+
+
+test MultipleServiceRefs:
+ let services = "test"
+
+ spawn as p1
+ spawn as p2
+ send "create-identity Device1" to p1
+ send "create-identity Device2" to p2
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
+ expect from p1:
+ /peer 1 addr ${p2.node.ip} 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1/
+
+ let kbytes = 2
+
+ with p1:
+ send "store blob"
+ send "A"
+ send ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture ref_a
+
+ # Create blobs with (kbytes * 1000) bytes each
+
+ send "store blob"
+ send "B"
+ for j in [1 .. kbytes * 10]:
+ # 100 bytes each line
+ send "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
+ send ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture ref_b
+
+ send "store blob"
+ send "C"
+ for j in [1 .. kbytes * 10]:
+ # 100 bytes each line
+ send "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
+ send ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture ref_c
+
+ send "store blob"
+ send "D"
+ for j in [1 .. kbytes * 10]:
+ # 100 bytes each line
+ send "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
+ send ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture ref_d
+
+ send "test-message-send 1 $ref_a $ref_b $ref_c $ref_d"
+ expect /test-message-send done/
+ expect /test-message-received blob [0-9]+ $ref_a/ from p2
+ expect /test-message-received blob [0-9]+ $ref_b/ from p2
+ expect /test-message-received blob [0-9]+ $ref_c/ from p2
+ expect /test-message-received blob [0-9]+ $ref_d/ from p2
+
+
+test Reconnection:
+ let services = "test"
+
+ spawn as p1
+ with p1:
+ send "create-identity Device1"
+ send "start-server services $services"
+
+ node n
+ local:
+ spawn as p2 on n
+ send "create-identity Device2" to p2
+ send "start-server services $services" to p2
+
+ expect from p1:
+ /peer 1 addr ${p2.node.ip} 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1/
+
+ with p1:
+ send "store blob"
+ send "message1"
+ send ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture message
+
+ send "test-message-send 1 $message"
+ expect /test-message-send done/
+ expect /test-message-received blob [0-9]+ $message/ from p2
+
+ send "peer-list"
+ expect /peer-list-item 1 addr ${p2.node.ip} 29665 id Device2/
+ local:
+ expect /peer-list-(.*)/ capture done
+ guard (done == "done")
+
+ # Restart process on node 'n'
+ local:
+ spawn as p2 on n
+ send "start-server services $services" to p2
+ send "peer-add ${p1.node.ip}" to p2
+
+ expect from p2:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1/
+
+ with p1:
+ send "store blob"
+ send "message2"
+ send ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture message
+
+ send "test-message-send 1 $message"
+ expect /test-message-send done/
+ expect /test-message-received blob [0-9]+ $message/ from p2
+
+ # Drop and re-add peer p2:
+ with p1:
+ send "peer-list"
+ expect /peer-list-item 1 addr ${p2.node.ip} 29665 id Device2/
+ local:
+ expect /peer-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "peer-drop 1"
+ send "peer-list"
+ local:
+ expect /peer-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "peer-add ${p2.node.ip}"
+ expect /peer 2 addr ${p2.node.ip} 29665/
+ expect /peer 2 id Device2/
+
+ send "peer-list"
+ expect /peer-list-item 2 addr ${p2.node.ip} 29665 id Device2/
+ local:
+ expect /peer-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "store blob"
+ send "message3"
+ send ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture message
+
+ send "test-message-send 2 $message"
+ expect /test-message-send done/
+ expect /test-message-received blob [0-9]+ $message/ from p2
+
+ # Drop on both sides and re-add:
+ with p2:
+ send "peer-list"
+ expect /peer-list-item 1 addr ${p1.node.ip} 29665 id Device1/
+ local:
+ expect /peer-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "peer-drop 1"
+ send "peer-list"
+ local:
+ expect /peer-list-(.*)/ capture done
+ guard (done == "done")
+
+ with p1:
+ send "peer-list"
+ expect /peer-list-item 2 addr ${p2.node.ip} 29665 id Device2/
+ local:
+ expect /peer-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "peer-drop 2"
+ send "peer-list"
+ local:
+ expect /peer-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "peer-add ${p1.node.ip}" to p2
+
+ with p2:
+ expect /peer 2 addr ${p1.node.ip} 29665/ from p2
+ expect /peer 2 id Device1/ from p2
+
+ send "peer-list"
+ expect /peer-list-item 2 addr ${p1.node.ip} 29665 id Device1/
+ local:
+ expect /peer-list-(.*)/ capture done
+ guard (done == "done")
+
+ send "store blob"
+ send "message4"
+ send ""
+ expect /store-done (blake2#[0-9a-f]*)/ capture message
+
+ send "test-message-send 2 $message"
+ expect /test-message-send done/
+
+ with p1:
+ expect /peer 3 addr ${p2.node.ip} 29665/
+ expect /peer 3 id Device2/
+
+ send "peer-list"
+ expect /peer-list-item 3 addr ${p2.node.ip} 29665 id Device2/
+ local:
+ expect /peer-list-(.*)/ capture done
+ guard (done == "done")
+
+ expect /test-message-received blob [0-9]+ $message/
+
+
+test SendUnknownObjectType:
+ let services = "test"
+ let refpat = /blake2#[0-9a-f]*/
+
+ spawn as p1
+ spawn as p2
+
+ with p1:
+ send "create-identity Device1"
+ send "start-server services $services"
+ with p2:
+ send "create-identity Device2"
+ send "start-server services $services"
+
+ expect from p1:
+ /peer 1 addr ${p2.node.ip} 29665/
+ /peer 1 id Device2/
+ expect from p2:
+ /peer 1 addr ${p1.node.ip} 29665/
+ /peer 1 id Device1/
+
+ with p1:
+ send:
+ "store test-unknown"
+ "TEST"
+ ""
+ expect /store-done ($refpat)/ capture r1
+
+ send:
+ "store rec"
+ "test:unknown TEST"
+ ""
+ expect /store-done ($refpat)/ capture r2
+
+ send "test-message-send 1 $r1"
+ expect /test-message-send done/
+
+ with p2:
+ expect /test-message-received test-unknown [0-9]+ $r1/
+
+ send "load $r1"
+ expect /load-type test-unknown 5/
+ expect /load-line TEST/
+ local:
+ expect /load-(.*)/ capture done
+ guard (done == "done")
+
+ send "test-message-send 1 $r2"
+ expect /test-message-send done/
+
+ with p2:
+ expect /test-message-received rec [0-9]+ $r2/
+
+ send "load $r2"
+ expect /load-type rec [0-9]+/
+ expect /load-line test:unknown TEST/
+ local:
+ expect /load-(.*)/ capture done
+ guard (done == "done")
+
+
+test ConnectToSelf:
+ subnet s1
+ subnet s2
+
+ spawn on s1 as p1
+ spawn on s2 as p2
+
+ send "create-identity Device1" to p1
+ send "create-identity Device2" to p2
+
+ for p in [ p1, p2 ]:
+ with p:
+ expect /create-identity-done .*/
+ send "start-server"
+
+ # no peer should be added:
+ send "peer-add ${p.node.ip}"
+
+ send "peer-add ${p2.node.ip}" to p1
+ expect /peer 1 addr ${p2.node.ip} 29665/ from p1
+ expect /peer 1 addr ${p1.node.ip} 29665/ from p2
diff --git a/test/network.test b/test/network.test
deleted file mode 100644
index efd508f..0000000
--- a/test/network.test
+++ /dev/null
@@ -1,382 +0,0 @@
-test Discovery:
- spawn as p1
- spawn as p2
- send "create-identity Device1 Owner" to p1
- send "create-identity Device2" to p2
- send "start-server" to p1
- send "start-server" to p2
- expect from p1:
- /peer 1 addr ${p2.node.ip} 29665/
- /peer 1 id Device2/
- expect from p2:
- /peer 1 addr ${p1.node.ip} 29665/
- /peer 1 id Device1 Owner/
-
- send "update-local-identity Device1A" to p1
- expect /peer 1 id Device1A Owner/ from p2
-
- send "update-shared-identity OwnerA" to p1
- expect /peer 1 id Device1A OwnerA/ from p2
-
- send "update-local-identity Device1B" to p1
- expect /peer 1 id Device1B OwnerA/ from p2
-
- send "update-shared-identity OwnerB" to p1
- expect /peer 1 id Device1B OwnerB/ from p2
-
- with p2:
- send "stop-server"
- expect /stop-server-done/
-
- send "update-shared-identity OwnerC" to p1
-
- with p1:
- send "stop-server"
- expect /stop-server-done/
-
- spawn as p3
- spawn as p4
- spawn as p5
- spawn as p6
- send "create-identity Device3" to p3
- send "create-identity Device4" to p4
- send "create-identity Device5" to p5
- send "create-identity Device6" to p6
-
- for p in [ p1, p2, p3, p4, p5, p6 ]:
- send "start-server" to p
-
- expect from p1:
- /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer1_2
- /peer $peer1_2 id Device2/
- /peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer1_3
- /peer $peer1_3 id Device3/
- /peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer1_4
- /peer $peer1_4 id Device4/
- /peer ([0-9]+) addr ${p5.node.ip} 29665/ capture peer1_5
- /peer $peer1_5 id Device5/
- /peer ([0-9]+) addr ${p6.node.ip} 29665/ capture peer1_6
- /peer $peer1_6 id Device6/
-
- expect from p2:
- /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer2_1
- /peer $peer2_1 id Device1B OwnerC/
- /peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer2_3
- /peer $peer2_3 id Device3/
- /peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer2_4
- /peer $peer2_4 id Device4/
- /peer ([0-9]+) addr ${p5.node.ip} 29665/ capture peer2_5
- /peer $peer2_5 id Device5/
- /peer ([0-9]+) addr ${p6.node.ip} 29665/ capture peer2_6
- /peer $peer2_6 id Device6/
-
- expect from p3:
- /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer3_1
- /peer $peer3_1 id Device1B OwnerC/
- /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer3_2
- /peer $peer3_2 id Device2/
- /peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer3_4
- /peer $peer3_4 id Device4/
- /peer ([0-9]+) addr ${p5.node.ip} 29665/ capture peer3_5
- /peer $peer3_5 id Device5/
- /peer ([0-9]+) addr ${p6.node.ip} 29665/ capture peer3_6
- /peer $peer3_6 id Device6/
-
- expect from p4:
- /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer4_1
- /peer $peer4_1 id Device1B OwnerC/
- /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer4_2
- /peer $peer4_2 id Device2/
- /peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer4_3
- /peer $peer4_3 id Device3/
- /peer ([0-9]+) addr ${p5.node.ip} 29665/ capture peer4_5
- /peer $peer4_5 id Device5/
- /peer ([0-9]+) addr ${p6.node.ip} 29665/ capture peer4_6
- /peer $peer4_6 id Device6/
-
- expect from p5:
- /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer5_1
- /peer $peer5_1 id Device1B OwnerC/
- /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer5_2
- /peer $peer5_2 id Device2/
- /peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer5_3
- /peer $peer5_3 id Device3/
- /peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer5_4
- /peer $peer5_4 id Device4/
- /peer ([0-9]+) addr ${p6.node.ip} 29665/ capture peer5_6
- /peer $peer5_6 id Device6/
-
- expect from p6:
- /peer ([0-9]+) addr ${p1.node.ip} 29665/ capture peer6_1
- /peer $peer6_1 id Device1B OwnerC/
- /peer ([0-9]+) addr ${p2.node.ip} 29665/ capture peer6_2
- /peer $peer6_2 id Device2/
- /peer ([0-9]+) addr ${p3.node.ip} 29665/ capture peer6_3
- /peer $peer6_3 id Device3/
- /peer ([0-9]+) addr ${p4.node.ip} 29665/ capture peer6_4
- /peer $peer6_4 id Device4/
- /peer ([0-9]+) addr ${p5.node.ip} 29665/ capture peer6_5
- /peer $peer6_5 id Device5/
-
-
-test LargeData:
- spawn as p1
- spawn as p2
- send "create-identity Device1" to p1
- send "create-identity Device2" to p2
- send "start-server" to p1
- send "start-server" to p2
- expect from p1:
- /peer 1 addr ${p2.node.ip} 29665/
- /peer 1 id Device2/
- expect from p2:
- /peer 1 addr ${p1.node.ip} 29665/
- /peer 1 id Device1/
-
- for i in [0..10]:
- with p1:
- # Create blob with (i * 1000) bytes
- send "store blob"
- for j in [1 .. i * 10]:
- # 100 bytes each line
- send "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
- send ""
- expect /store-done (blake2#[0-9a-f]*)/ capture ref
-
- send "test-message-send 1 $ref"
- expect /test-message-send done/
- expect /test-message-received blob ${i*1000} $ref/ from p2
-
-
-test ManyStreams:
- spawn as p1
- spawn as p2
- send "create-identity Device1" to p1
- send "create-identity Device2" to p2
- send "start-server" to p1
- send "start-server" to p2
- expect from p1:
- /peer 1 addr ${p2.node.ip} 29665/
- /peer 1 id Device2/
- expect from p2:
- /peer 1 addr ${p1.node.ip} 29665/
- /peer 1 id Device1/
-
- for i in [0..100]:
- with p1:
- # Create blob with 1000 bytes + decimal i
- send "store blob"
- for j in [1 .. 10]:
- # 100 bytes each line
- send "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
- send "$i"
- send ""
- expect /store-done (blake2#[0-9a-f]*)/ capture ref
-
- send "test-message-send 1 $ref"
- expect /test-message-send done/
- expect /test-message-received blob 100[2-4] $ref/ from p2
-
-
-test MultipleServiceRefs:
- spawn as p1
- spawn as p2
- send "create-identity Device1" to p1
- send "create-identity Device2" to p2
- send "start-server" to p1
- send "start-server" to p2
- expect from p1:
- /peer 1 addr ${p2.node.ip} 29665/
- /peer 1 id Device2/
- expect from p2:
- /peer 1 addr ${p1.node.ip} 29665/
- /peer 1 id Device1/
-
- let kbytes = 2
-
- with p1:
- send "store blob"
- send "A"
- send ""
- expect /store-done (blake2#[0-9a-f]*)/ capture ref_a
-
- # Create blobs with (kbytes * 1000) bytes each
-
- send "store blob"
- send "B"
- for j in [1 .. kbytes * 10]:
- # 100 bytes each line
- send "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
- send ""
- expect /store-done (blake2#[0-9a-f]*)/ capture ref_b
-
- send "store blob"
- send "C"
- for j in [1 .. kbytes * 10]:
- # 100 bytes each line
- send "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
- send ""
- expect /store-done (blake2#[0-9a-f]*)/ capture ref_c
-
- send "store blob"
- send "D"
- for j in [1 .. kbytes * 10]:
- # 100 bytes each line
- send "123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789"
- send ""
- expect /store-done (blake2#[0-9a-f]*)/ capture ref_d
-
- send "test-message-send 1 $ref_a $ref_b $ref_c $ref_d"
- expect /test-message-send done/
- expect /test-message-received blob [0-9]+ $ref_a/ from p2
- expect /test-message-received blob [0-9]+ $ref_b/ from p2
- expect /test-message-received blob [0-9]+ $ref_c/ from p2
- expect /test-message-received blob [0-9]+ $ref_d/ from p2
-
-
-test Reconnection:
- spawn as p1
- with p1:
- send "create-identity Device1"
- send "start-server"
-
- node n
- local:
- spawn as p2 on n
- send "create-identity Device2" to p2
- send "start-server" to p2
-
- expect from p1:
- /peer 1 addr ${p2.node.ip} 29665/
- /peer 1 id Device2/
- expect from p2:
- /peer 1 addr ${p1.node.ip} 29665/
- /peer 1 id Device1/
-
- with p1:
- send "store blob"
- send "message1"
- send ""
- expect /store-done (blake2#[0-9a-f]*)/ capture message
-
- send "test-message-send 1 $message"
- expect /test-message-send done/
- expect /test-message-received blob [0-9]+ $message/ from p2
-
- send "peer-list"
- expect /peer-list-item 1 addr ${p2.node.ip} 29665 id Device2/
- local:
- expect /peer-list-(.*)/ capture done
- guard (done == "done")
-
- # Restart process on node 'n'
- local:
- spawn as p2 on n
- send "start-server" to p2
- send "peer-add ${p1.node.ip}" to p2
-
- expect from p2:
- /peer 1 addr ${p1.node.ip} 29665/
- /peer 1 id Device1/
-
- with p1:
- send "store blob"
- send "message2"
- send ""
- expect /store-done (blake2#[0-9a-f]*)/ capture message
-
- send "test-message-send 1 $message"
- expect /test-message-send done/
- expect /test-message-received blob [0-9]+ $message/ from p2
-
- # Drop and re-add peer p2:
- with p1:
- send "peer-list"
- expect /peer-list-item 1 addr ${p2.node.ip} 29665 id Device2/
- local:
- expect /peer-list-(.*)/ capture done
- guard (done == "done")
-
- send "peer-drop 1"
- send "peer-list"
- local:
- expect /peer-list-(.*)/ capture done
- guard (done == "done")
-
- send "peer-add ${p2.node.ip}"
- expect /peer 2 addr ${p2.node.ip} 29665/
- expect /peer 2 id Device2/
-
- send "peer-list"
- expect /peer-list-item 2 addr ${p2.node.ip} 29665 id Device2/
- local:
- expect /peer-list-(.*)/ capture done
- guard (done == "done")
-
- send "store blob"
- send "message3"
- send ""
- expect /store-done (blake2#[0-9a-f]*)/ capture message
-
- send "test-message-send 2 $message"
- expect /test-message-send done/
- expect /test-message-received blob [0-9]+ $message/ from p2
-
- # Drop on both sides and re-add:
- with p2:
- send "peer-list"
- expect /peer-list-item 1 addr ${p1.node.ip} 29665 id Device1/
- local:
- expect /peer-list-(.*)/ capture done
- guard (done == "done")
-
- send "peer-drop 1"
- send "peer-list"
- local:
- expect /peer-list-(.*)/ capture done
- guard (done == "done")
-
- with p1:
- send "peer-list"
- expect /peer-list-item 2 addr ${p2.node.ip} 29665 id Device2/
- local:
- expect /peer-list-(.*)/ capture done
- guard (done == "done")
-
- send "peer-drop 2"
- send "peer-list"
- local:
- expect /peer-list-(.*)/ capture done
- guard (done == "done")
-
- send "peer-add ${p1.node.ip}" to p2
-
- with p2:
- expect /peer 2 addr ${p1.node.ip} 29665/ from p2
- expect /peer 2 id Device1/ from p2
-
- send "peer-list"
- expect /peer-list-item 2 addr ${p1.node.ip} 29665 id Device1/
- local:
- expect /peer-list-(.*)/ capture done
- guard (done == "done")
-
- send "store blob"
- send "message4"
- send ""
- expect /store-done (blake2#[0-9a-f]*)/ capture message
-
- send "test-message-send 2 $message"
- expect /test-message-send done/
-
- with p1:
- expect /peer 3 addr ${p2.node.ip} 29665/
- expect /peer 3 id Device2/
-
- send "peer-list"
- expect /peer-list-item 3 addr ${p2.node.ip} 29665 id Device2/
- local:
- expect /peer-list-(.*)/ capture done
- guard (done == "done")
-
- expect /test-message-received blob [0-9]+ $message/
diff --git a/test/storage.test b/test/storage.et
index 0369807..ee19e6e 100644
--- a/test/storage.test
+++ b/test/storage.et
@@ -1,3 +1,7 @@
+module storage
+
+import common
+
test Storage:
spawn as p1
@@ -381,14 +385,16 @@ test StorageWatcher:
test SharedStateWatcher:
+ let services = "attach,sync"
+
spawn as p1
spawn as p2
send "create-identity Device1 Owner" to p1
send "create-identity Device2" to p2
send "watch-local-identity" to p1
send "watch-local-identity" to p2
- send "start-server" to p1
- send "start-server" to p2
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
expect from p1:
/local-identity Device1 Owner/
/peer 1 addr ${p2.node.ip} 29665/
@@ -427,3 +433,306 @@ test SharedStateWatcher:
send "shared-state-wait $s2" to p2
expect /shared-state-wait $s1/ from p2
expect /shared-state-wait $s2/ from p2
+
+
+test LocalStateKeepUnknown:
+ spawn as p
+ with p:
+ send "create-identity Device"
+ send "watch-local-identity"
+ expect /local-identity Device/
+
+ send "local-state-get"
+ expect /local-state-get ($refpat)/ capture s1
+ send "load $s1"
+
+ expect /load-type rec [0-9]*/
+ expect /load-line id:r ($refpat)/ capture id1
+ local:
+ expect /load-(.*)/ capture done
+ guard (done == "done")
+
+ send:
+ "store rec"
+ "id:r $id1"
+ "TEST:i 123"
+ ""
+ expect /store-done ($refpat)/ capture s2
+ send "local-state-replace $s1 $s2"
+ expect /local-state-replace-done/
+
+ send "local-state-get"
+ expect /local-state-get $s2/
+
+ send "update-local-identity Device2"
+ expect /local-identity Device2/
+
+ send "local-state-get"
+ expect /local-state-get ($refpat)/ capture s3
+ send "load $s3"
+
+ expect /load-type rec [0-9]*/
+ expect /load-line PREV:w $s2/
+ expect /load-line id:r ($refpat)/ capture id2
+ guard (id1 /= id2)
+ expect /load-line TEST:i 123/
+ local:
+ expect /load-(.*)/ capture done
+ guard (done == "done")
+
+
+test UnknownObjectType:
+ spawn as p
+ spawn as p2 on p.node
+
+ with p:
+ send:
+ "store test-unknown"
+ "TEST"
+ ""
+ expect /store-done ($refpat)/ capture r1
+
+ with p2:
+ send "load $r1"
+ expect /load-type test-unknown 5/
+ expect /load-line TEST/
+ local:
+ expect /load-(.*)/ capture done
+ guard (done == "done")
+
+
+test UnknownRecordItemType:
+ spawn as p
+ spawn as p2 on p.node
+
+ with p:
+ send:
+ "store rec"
+ "test:unknown TEST"
+ ""
+ expect /store-done ($refpat)/ capture r1
+
+ with p2:
+ send "load $r1"
+ expect /load-type rec [0-9]+/
+ expect /load-line test:unknown TEST/
+ local:
+ expect /load-(.*)/ capture done
+ guard (done == "done")
+
+
+test ObjectFormat:
+ spawn as p
+ with p:
+ # Empty blob
+ local:
+ send "store-raw EOF"
+ send "blob 0\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "blob")
+
+ # Small blob
+ local:
+ send "store-raw EOF"
+ send "blob 2\nab"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "blob")
+
+ let empty_rec_ref = "blake2#6027623e8817cd2d214cc754caaa71f50190a1e5feeb9d9107c8aeabb189fbb2"
+
+ # Empty record
+ local:
+ send "store-raw EOF"
+ send "rec 0\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+ guard (r == empty_rec_ref)
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "rec")
+
+ # Small record
+ local:
+ send "store-raw EOF"
+ send "rec 28\nnum:n 1\ntext:t abc\nempty:e \n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "rec")
+
+ # Record with multiline items
+ local:
+ send "store-raw EOF"
+ send "rec 34\nfirst:t abc\n\tdef\nsecond:t \tx\n\ty\tz\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "rec")
+
+ # Record with unknown type
+ local:
+ send "store-raw EOF"
+ send "rec 14\nnum:UNKNOWN 1\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "rec")
+
+ # Invalid records
+ for content in [ "rec 6\nnum 1\n", "rec 6\nnum:n\n", "rec 7\nnum:n 1" ]:
+ send "store-raw EOF"
+ send "$content"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "unknown rec")
+
+ # Empty unknown
+ local:
+ send "store-raw EOF"
+ send "test-unknown 0\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "unknown test-unknown")
+
+ # Ondemand object
+ local:
+ send "store-raw EOF"
+ send "ondemand 74\n6\n$empty_rec_ref\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "ondemand")
+
+ # Empty chunked object
+ local:
+ send "store-raw EOF"
+ send "chunked 2\n0\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "chunked")
+
+ send "store blob"
+ send "test"
+ send ""
+ expect /store-done ($refpat)/ capture blob_test_ref
+
+ # Chunked object
+ local:
+ send "store-raw EOF"
+ send "chunked 146\n8\n$blob_test_ref\n$blob_test_ref\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "chunked")
+
+ # Invalid chunked object (missing last newline)
+ local:
+ send "store-raw EOF"
+ send "chunked 145\n8\n$blob_test_ref\n$blob_test_ref"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "unknown chunked")
+
+ # Invalid chunked object (missing size)
+ local:
+ send "store-raw EOF"
+ send "chunked 144\n$blob_test_ref\n$blob_test_ref\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "unknown chunked")
+
+ # Invalid chunked object (invalid ref)
+ local:
+ send "store-raw EOF"
+ send "chunked 78\n8\nabc\n$blob_test_ref\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "unknown chunked")
+
+ # Empty dir object
+ local:
+ send "store-raw EOF"
+ send "dir 0\n"
+ send "EOF"
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "dir")
+
+ # Small dir object
+ local:
+ send:
+ "store dir"
+ "$blob_test_ref $empty_rec_ref some_file"
+ "$blob_test_ref $empty_rec_ref some file"
+ "$blob_test_ref $empty_rec_ref some file\n\twith\n\tnewlines"
+ "$blob_test_ref $empty_rec_ref special chars !@#\$%^&*()\\/=?+"
+ "$blob_test_ref $empty_rec_ref last file"
+ ""
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "dir")
+
+ # Invalid dir object
+ local:
+ send:
+ "store dir"
+ "$blob_test_ref some_file"
+ ""
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "unknown dir")
+
+ # Invalid dir object
+ local:
+ send:
+ "store dir"
+ "0"
+ ""
+ expect /store-done ($refpat)/ capture r
+
+ send "load-type $r"
+ expect /load-type (.*)/ capture type
+ guard (type == "unknown dir")
diff --git a/test/sync.test b/test/sync.et
index ea9595d..f98b527 100644
--- a/test/sync.test
+++ b/test/sync.et
@@ -1,4 +1,8 @@
-test:
+module sync
+
+test Sync:
+ let services = "attach,sync"
+
spawn as p1
spawn as p2
send "create-identity Device1 Owner" to p1
@@ -7,8 +11,8 @@ test:
send "watch-local-identity" to p2
send "watch-shared-identity" to p1
send "watch-shared-identity" to p2
- send "start-server" to p1
- send "start-server" to p2
+ send "start-server services $services" to p1
+ send "start-server services $services" to p2
expect from p1:
/local-identity Device1 Owner/
/shared-identity Owner/
@@ -57,7 +61,7 @@ test:
send "create-identity Device3"
send "watch-local-identity"
send "watch-shared-identity"
- send "start-server"
+ send "start-server services $services"
send "peer-add ${p1.node.ip}"