diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/attach.et | 47 | ||||
| -rw-r--r-- | test/attach.test | 43 | ||||
| -rw-r--r-- | test/chatroom.et (renamed from test/chatroom.test) | 254 | ||||
| -rw-r--r-- | test/common.et | 6 | ||||
| -rw-r--r-- | test/contact.et (renamed from test/contact.test) | 12 | ||||
| -rw-r--r-- | test/deferred.et | 198 | ||||
| -rw-r--r-- | test/discovery.et | 366 | ||||
| -rw-r--r-- | test/graph.et | 327 | ||||
| -rw-r--r-- | test/invite.et | 194 | ||||
| -rw-r--r-- | test/message.et | 457 | ||||
| -rw-r--r-- | test/message.test | 149 | ||||
| -rw-r--r-- | test/network.et | 539 | ||||
| -rw-r--r-- | test/network.test | 382 | ||||
| -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}" |