From 29424c7ce25ee43f0c086709d7d8dd54ef17017f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Mon, 6 Oct 2025 20:09:51 +0200 Subject: (test) Test: basic object format --- storage.et | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 6 deletions(-) diff --git a/storage.et b/storage.et index 2230eac..9bbbe6b 100644 --- a/storage.et +++ b/storage.et @@ -1,3 +1,5 @@ +import common + test Storage: spawn as p1 @@ -432,8 +434,6 @@ test SharedStateWatcher: test LocalStateKeepUnknown: - let refpat = /blake2#[0-9a-f]*/ - spawn as p with p: send "create-identity Device" @@ -480,8 +480,6 @@ test LocalStateKeepUnknown: test UnknownObjectType: - let refpat = /blake2#[0-9a-f]*/ - spawn as p spawn as p2 on p.node @@ -502,8 +500,6 @@ test UnknownObjectType: test UnknownRecordItemType: - let refpat = /blake2#[0-9a-f]*/ - spawn as p spawn as p2 on p.node @@ -521,3 +517,62 @@ test UnknownRecordItemType: 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") + + # Empty record + local: + send "store-raw EOF" + send "rec 0\n" + send "EOF" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "rec") + + # Small record + local: + send "store-raw EOF" + send "rec 8\nnum:n 1\n" + send "EOF" + expect /store-done ($refpat)/ capture r + + send "load-type $r" + expect /load-type (.*)/ capture type + guard (type == "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") -- cgit v1.2.3 From 3727bada5cf9955c28dc2197a2dd8ddfdd74a433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 8 Oct 2025 23:06:24 +0200 Subject: (test) Handle invalid record objects Changelog: Gracefully handle invalid record objects --- storage.et | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/storage.et b/storage.et index 9bbbe6b..035a64b 100644 --- a/storage.et +++ b/storage.et @@ -566,6 +566,28 @@ test ObjectFormat: 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" ]: + 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" -- cgit v1.2.3 From ba467d9c2a616c4a717bd3e103ebab33c9434384 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Thu, 9 Oct 2025 22:46:39 +0200 Subject: (test) Rewrite record parsing to be more strict --- storage.et | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/storage.et b/storage.et index 035a64b..1510c38 100644 --- a/storage.et +++ b/storage.et @@ -558,7 +558,18 @@ test ObjectFormat: # Small record local: send "store-raw EOF" - send "rec 8\nnum:n 1\n" + 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 @@ -578,7 +589,7 @@ test ObjectFormat: guard (type == "rec") # Invalid records - for content in [ "rec 6\nnum 1\n", "rec 6\nnum:n\n" ]: + 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" -- cgit v1.2.3 From afeaad63929112a5838d2095aeb2c8250b254632 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 11 Oct 2025 20:26:23 +0200 Subject: (test) Ondemand object type and parsing --- storage.et | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/storage.et b/storage.et index 1510c38..845971b 100644 --- a/storage.et +++ b/storage.et @@ -544,12 +544,15 @@ test ObjectFormat: 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 @@ -609,3 +612,14 @@ test ObjectFormat: 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") -- cgit v1.2.3 From 6acaf233a8d20ce774d639050bd4ade3f05fc6a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 18 Oct 2025 22:45:29 +0200 Subject: (test) Invite service and shared state Changelog: New service and shared state for invites --- invite.et | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 invite.et diff --git a/invite.et b/invite.et new file mode 100644 index 0000000..bf1a45a --- /dev/null +++ b/invite.et @@ -0,0 +1,73 @@ +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 invalid/ + + send "contact-list" + expect: + /contact-list-(.*)/ capture done + guard (done == "done") + + with p2: + send "invite-accept $token $p1obase" + expect /invite-accept-done $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 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 00 $p2id/ + expect /invite-accepted $token $p2id/ + expect /invite-accepted $token $p2id/ + + send "contact-list" + expect: + /contact-list-item [a-z0-9#]+ Contact2 Owner2/ + /contact-list-(.*)/ capture done + guard (done == "done") -- cgit v1.2.3 From 8c89195010fa7382ee60ee862beb70f70ef5746f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 16 Nov 2025 19:38:14 +0100 Subject: (test) Functions to mark direct messages as seen and to list the status --- message.et | 133 ++++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 100 insertions(+), 33 deletions(-) diff --git a/message.et b/message.et index acdfc27..c4b61e3 100644 --- a/message.et +++ b/message.et @@ -28,21 +28,21 @@ test DirectMessage: for i in [1..2]: send "dm-send-peer $peer1_2 hello$i" to p1 - expect /dm-sent from Owner1 text hello$i/ from p1 - expect /dm-received from Owner1 text hello$i/ from p2 + 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 text hi$i/ from p2 - expect /dm-received from Owner2 text hi$i/ from p1 + 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 text hello$i/ from p1 - expect /dm-received from Owner1 text hello$i/ from p2 + 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 text hi$i/ from p2 - expect /dm-received from Owner2 text hi$i/ from p1 + 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 @@ -71,32 +71,32 @@ test DirectMessage: for i in [1..2]: send "dm-send-contact $c1_2 hello_c_$i" to p1 - expect /dm-sent from Owner1 text hello_c_$i/ from p1 - expect /dm-received from Owner1 text hello_c_$i/ from p2 + 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 text hi_c_$i/ from p2 - expect /dm-received from Owner2 text hi_c_$i/ from p1 + 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 text hello_c_$i/ from p1 - expect /dm-received from Owner1 text hello_c_$i/ from p2 + 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 text hi_c_$i/ from p2 - expect /dm-received from Owner2 text hi_c_$i/ from p1 + 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 text hello_c_$i/ - expect /dm-list-item from Owner2 text hi_c_$i/ + 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 text hello$i/ - expect /dm-list-item from Owner2 text hi$i/ + 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") @@ -124,11 +124,11 @@ test DirectMessage: 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/ + 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 text hello$i/ - expect /dm-list-item from Owner2 text hi$i/ + 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") @@ -143,10 +143,10 @@ test DirectMessage: send "start-server services $services" to p2 send "dm-send-contact $c1_2 while_offline" to p1 - expect /dm-sent from Owner1 text while_offline/ from 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 text while_offline/ from p2 + expect /dm-received from Owner1 new yes text while_offline/ from p2 for p in [p1, p2]: with p: @@ -157,10 +157,10 @@ test DirectMessage: send "start-server services $services" to p1 send "dm-send-contact $c1_2 while_peer_offline" to p1 - expect /dm-sent from Owner1 text while_peer_offline/ from 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 text while_peer_offline/ from p2 + expect /dm-received from Owner1 new yes text while_peer_offline/ from p2 test DirectMessageDiscovery: @@ -221,9 +221,9 @@ test DirectMessageDiscovery: for i in [ 1 .. 3 ]: send "dm-send-peer $i init1" to p1 for p in [ p2, p3, p4 ]: - expect /dm-received from Owner1 text init1/ from p + 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. text init2/ from p1 + expect /dm-received from Owner. new yes text init2/ from p1 # Restart servers to remove peers: for p in [ p1, p2, p3, p4 ]: @@ -258,16 +258,83 @@ test DirectMessageDiscovery: /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 text hello_to_p2/ from p2 + 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 text hello_to_p3/ from p3 + expect /dm-received from Owner1 new yes text hello_to_p3/ from p3 # Verify the first message - expect /dm-received from Owner1 text hello_to_p4/ from p4 + expect /dm-received from Owner1 new yes text hello_to_p4/ from p4 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 + + 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/ + + for i in [ 1 .. 2 ]: + 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 + + for i in [ 1 .. 2 ]: + 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 .. 2 ]: + 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 .. 2 ]: + 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..2]: + 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..2]: + 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") -- cgit v1.2.3 From 3c51a791b622021ca742ffc42b06ccd9753839ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Tue, 13 Jan 2026 21:15:36 +0100 Subject: =?UTF-8?q?(test)=20Call=20=E2=80=9Caccepted=E2=80=9D=20hook=20onl?= =?UTF-8?q?y=20for=20valid=20invites?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- invite.et | 2 -- 1 file changed, 2 deletions(-) diff --git a/invite.et b/invite.et index bf1a45a..c7a8054 100644 --- a/invite.et +++ b/invite.et @@ -62,8 +62,6 @@ test InviteContact: guard (done == "done") with p1: - expect /invite-accepted 00 $p2id/ - expect /invite-accepted $token $p2id/ expect /invite-accepted $token $p2id/ send "contact-list" -- cgit v1.2.3 From bfeefa5c2491ec929850f0a1c2fce151b1b021c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 14 Jan 2026 21:12:21 +0100 Subject: (test) Test: explicit names for remaining tests and modules --- attach.et | 4 +++- chatroom.et | 2 ++ contact.et | 2 ++ network.et | 2 ++ storage.et | 2 ++ sync.et | 4 +++- 6 files changed, 14 insertions(+), 2 deletions(-) diff --git a/attach.et b/attach.et index afbdd0e..fb52729 100644 --- a/attach.et +++ b/attach.et @@ -1,4 +1,6 @@ -test: +module attach + +test Attach: let services = "attach,sync" spawn as p1 diff --git a/chatroom.et b/chatroom.et index 54f9b2a..e49b4b8 100644 --- a/chatroom.et +++ b/chatroom.et @@ -1,3 +1,5 @@ +module chatroom + def refpat = /blake2#[0-9a-f]+/ test ChatroomSetup: diff --git a/contact.et b/contact.et index 978f8a6..0f967a6 100644 --- a/contact.et +++ b/contact.et @@ -1,3 +1,5 @@ +module contact + test Contact: let services = "attach,contact,sync" diff --git a/network.et b/network.et index a670f35..e55c383 100644 --- a/network.et +++ b/network.et @@ -1,3 +1,5 @@ +module network + test Discovery: spawn as p1 spawn as p2 diff --git a/storage.et b/storage.et index 845971b..16b66e2 100644 --- a/storage.et +++ b/storage.et @@ -1,3 +1,5 @@ +module storage + import common test Storage: diff --git a/sync.et b/sync.et index d465b11..f98b527 100644 --- a/sync.et +++ b/sync.et @@ -1,4 +1,6 @@ -test: +module sync + +test Sync: let services = "attach,sync" spawn as p1 -- cgit v1.2.3 From 5524326ee214b2d8d681504d4713bc4d797da264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 17 Jan 2026 16:33:11 +0100 Subject: (test) Accept invites via shared state --- invite.et | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/invite.et b/invite.et index c7a8054..23047be 100644 --- a/invite.et +++ b/invite.et @@ -34,7 +34,8 @@ test InviteContact: with p2: send "invite-accept 00 $p1obase" - expect /invite-accept-done 00 invalid/ + expect /invite-accept-done 00/ + expect /invite-reply 00 invalid/ send "contact-list" expect: @@ -43,7 +44,8 @@ test InviteContact: with p2: send "invite-accept $token $p1obase" - expect /invite-accept-done $token contact/ + expect /invite-accept-done $token/ + expect /invite-reply $token contact/ send "contact-list" expect: @@ -53,7 +55,8 @@ test InviteContact: with p2: send "invite-accept $token $p1obase" - expect /invite-accept-done $token invalid/ + expect /invite-accept-done $token/ + expect /invite-reply $token invalid/ send "contact-list" expect: @@ -69,3 +72,61 @@ test InviteContact: /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") -- cgit v1.2.3 From e98a6a6e08da37b23c2906bbe7c7abc8b0c4e090 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Mon, 19 Jan 2026 21:38:47 +0100 Subject: (test) Discovery request after accepting invite --- invite.et | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/invite.et b/invite.et index 23047be..52f2c8b 100644 --- a/invite.et +++ b/invite.et @@ -130,3 +130,65 @@ test InviteContactDelayed: /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") -- cgit v1.2.3 From d69fb09013a9c7a0ce3b58c6dcb83a1db3523e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 25 Jan 2026 10:22:04 +0100 Subject: (test) Deferred object loading --- deferred.et | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 deferred.et diff --git a/deferred.et b/deferred.et new file mode 100644 index 0000000..c514577 --- /dev/null +++ b/deferred.et @@ -0,0 +1,50 @@ +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/ -- cgit v1.2.3 From f5887f70f7d36da658346f08fd4bb4cb0f23b678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 28 Jan 2026 20:01:31 +0100 Subject: (test) Check component size when loading ondemand object --- deferred.et | 148 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) diff --git a/deferred.et b/deferred.et index c514577..35585cd 100644 --- a/deferred.et +++ b/deferred.et @@ -48,3 +48,151 @@ test OnDemandLoad: 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/ -- cgit v1.2.3 From 921c6908765ef31a24bdde0bdb5089072f5d6c8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Thu, 26 Feb 2026 21:17:32 +0100 Subject: (test) Discovery: clear peer map from dropped peers --- discovery.et | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/discovery.et b/discovery.et index e80a755..07173b6 100644 --- a/discovery.et +++ b/discovery.et @@ -164,6 +164,92 @@ test DiscoveryTunnel: 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" -- cgit v1.2.3 From 59af8514f3699ed5aa54aba5609bf5f00cc2aee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 11 Mar 2026 22:29:52 +0100 Subject: (test) Fix updated dm threads check on initial state --- message.et | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/message.et b/message.et index c4b61e3..3609da5 100644 --- a/message.et +++ b/message.et @@ -267,6 +267,41 @@ test DirectMessageDiscovery: # 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 ]: -- cgit v1.2.3