From d51ef24fc5bed32d9a4d1a7c547214e330623eca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 27 Jun 2026 15:42:53 +0200 Subject: (test) Test: ToDo tags with not-yet-working direct message tests --- common.et | 3 +++ message.et | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+) diff --git a/common.et b/common.et index 89941f0..bf3b935 100644 --- a/common.et +++ b/common.et @@ -1,3 +1,6 @@ module common +export tag HsToDo +export tag CppToDo + export def refpat = /blake2#[0-9a-f]*/ diff --git a/message.et b/message.et index f160cd8..a2028c7 100644 --- a/message.et +++ b/message.et @@ -382,3 +382,76 @@ test DirectMessageSeen: 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 -- cgit v1.2.3 From b29a55b618a636370840ebe116416afbcfc87cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Mon, 29 Jun 2026 20:06:39 +0200 Subject: (test) Test: retab discovery module --- discovery.et | 580 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 290 insertions(+), 290 deletions(-) diff --git a/discovery.et b/discovery.et index 07173b6..98043b9 100644 --- a/discovery.et +++ b/discovery.et @@ -3,302 +3,302 @@ 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 + 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 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 + 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 + 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 + 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 -- cgit v1.2.3 From 96538bfd8891281b6b1b43227104d121e38a1f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 1 Jul 2026 21:33:35 +0200 Subject: (test) Discovery: track our search requests per peer --- discovery.et | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/discovery.et b/discovery.et index 98043b9..ef5bbd4 100644 --- a/discovery.et +++ b/discovery.et @@ -92,6 +92,70 @@ test ManualDiscovery: 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./ + + 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 DiscoveryTunnel: let services = "discovery:tunnel" -- cgit v1.2.3 From 4a34dc49a8687c7b07c4aba2e408e1f291f51008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Thu, 2 Jul 2026 22:49:57 +0200 Subject: (test) Discovery: track search requests from peers Changelog: Discovery service handles situation when search target joins later. --- discovery.et | 2 -- 1 file changed, 2 deletions(-) diff --git a/discovery.et b/discovery.et index ef5bbd4..1115887 100644 --- a/discovery.et +++ b/discovery.et @@ -141,8 +141,6 @@ test DiscoveryJoinedAfter: /peer [12] addr ${p.node.ip} 29665/ /peer [12] id Device. Owner./ - send "discovery-connect $id" to p2 - expect from p1: /peer [0-9]+ addr ${p2.node.ip} 29665/ /peer [0-9]+ id Device2 Owner2/ -- cgit v1.2.3 From 39b16d20bfb9e72173de044a0978b6268491043d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 25 Jul 2026 18:05:50 +0200 Subject: (test) Test: retab attach and network modules --- attach.et | 78 ++--- network.et | 990 ++++++++++++++++++++++++++++++------------------------------- 2 files changed, 534 insertions(+), 534 deletions(-) diff --git a/attach.et b/attach.et index fb52729..e925116 100644 --- a/attach.et +++ b/attach.et @@ -1,47 +1,47 @@ module attach test Attach: - let services = "attach,sync" + 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/ + 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 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 .*/ 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-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 + 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/network.et b/network.et index e55c383..59537c5 100644 --- a/network.et +++ b/network.et @@ -1,516 +1,516 @@ 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/ + 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 + 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 + 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/ + 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 + 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/ + 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") + 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") -- cgit v1.2.3 From 899921972e6736a368858d6db6a0f1b7edc0a75e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sun, 26 Jul 2026 09:07:01 +0200 Subject: (test) Network: ignore connection attempts to self --- network.et | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/network.et b/network.et index 59537c5..ead1354 100644 --- a/network.et +++ b/network.et @@ -514,3 +514,26 @@ test SendUnknownObjectType: 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 -- cgit v1.2.3 From d49c9aec73a51c0a1d648d4842b3f6487ae65d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 25 Jul 2026 19:26:20 +0200 Subject: (test) Discovery: search for owner identity Changelog: Automatically search for other devices of the same owner when using the discovery service. --- attach.et | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/attach.et b/attach.et index e925116..ae00048 100644 --- a/attach.et +++ b/attach.et @@ -1,5 +1,7 @@ module attach +import common + test Attach: let services = "attach,sync" @@ -45,3 +47,82 @@ test Attach: expect /attach-response-done 1/ from p2 expect /local-identity Device2 Owner/ from p2 expect /peer 1 id Device2 Owner/ from p1 + + +test SyncAfterAttach: + let services_1 = "attach" + let services_2 = "discovery,sync" + let services_d = "discovery" + + subnet sd + subnet s1 + subnet s2 + subnet s3 + + node nd on sd + node n1 on s1 + node n2 on s2 + node n3 on s3 + + local: + spawn as pd on nd + spawn as p1 on n1 + spawn as p2 on n2 + spawn as p3 on n3 + + send "create-identity Discovery" to pd + send "create-identity Device1 Owner" to p1 + send "create-identity Device2" to p2 + send "create-identity Device3" to p3 + + expect /create-identity-done ref $refpat.*/ from pd + expect /create-identity-done ref $refpat.*/ from p1 + expect /create-identity-done ref $refpat.*/ from p2 + expect /create-identity-done ref $refpat.*/ from p3 + + send "start-server services $services_1" to p1 + for p in [ p2, p3 ]: + with p: + send "start-server services $services_1" + send "peer-add ${p1.node.ip}" + expect /peer 1 addr ${p1.node.ip} 29665/ + expect /peer 1 id Device1 Owner/ + + expect /peer ([0-9]+) addr ${p.node.ip} 29665/ from p1 capture pidx + expect /peer $pidx id Device./ from p1 + + send "attach-to 1" + expect /attach-request $pidx ([0-9]*)/ from p1 capture code1 + expect /attach-response 1 ([0-9]*)/ capture code2 + guard (code1 == code2) + + send "attach-accept $pidx" to p1 + send "attach-accept 1" + expect /attach-request-done $pidx/ from p1 + expect /attach-response-done 1/ + + spawn as pd on nd + spawn as p1 on n1 + spawn as p2 on n2 + spawn as p3 on n3 + + send "start-server services $services_d" to pd + for p in [ p1, p2, p3 ]: + send "start-server services $services_2" to p + + # Shared identity sync after explicit direct connection + + send "peer-add ${p1.node.ip}" to p2 + expect /peer 1 addr ${p2.node.ip} 29665/ from p1 + expect /peer 1 id Device. Owner/ from p1 + + # Shared identity sync after automatic discovery + + for p in [ p1, p3 ]: + send "peer-add ${pd.node.ip}" to p + + expect /peer 2 addr ${pd.node.ip} 29665/ from p1 + expect /peer 2 id Discovery/ from p1 + + expect /peer 3 addr ${p3.node.ip} 29665/ from p1 + expect /peer 3 id Device. Owner/ from p1 -- cgit v1.2.3