diff options
Diffstat (limited to 'discovery.et')
| -rw-r--r-- | discovery.et | 674 |
1 files changed, 0 insertions, 674 deletions
diff --git a/discovery.et b/discovery.et deleted file mode 100644 index 763d6b2..0000000 --- a/discovery.et +++ /dev/null @@ -1,674 +0,0 @@ -module discovery - -import attach - -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 - expect from pd /start-server-done/ - - 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 - expect from pd /start-server-done/ - - with p1: - send "peer-add ${pd.node.ip}" - expect: - /peer 1 addr ${pd.node.ip} 29665/ - /peer 1 id Discovery/ - expect from pd: - /peer [12] addr ${p1.node.ip} 29665/ - /peer [12] id Device1 Owner1/ - - send "discovery-connect $id" to p2 - - with p2: - send "peer-add ${pd.node.ip}" - expect: - /peer 1 addr ${pd.node.ip} 29665/ - /peer 1 id Discovery/ - expect from pd: - /peer [12] addr ${p2.node.ip} 29665/ - /peer [12] id Device2 Owner2/ - - expect from p1: - /peer [0-9]+ addr ${p2.node.ip} 29665/ - /peer [0-9]+ id Device2 Owner2/ - expect from p2: - /peer [0-9]+ addr ${p1.node.ip} 29665/ - /peer [0-9]+ id Device1 Owner1/ - - for p in [ pd, p1, p2 ]: - send "stop-server" to p - for p in [ pd, p1, p2 ]: - expect /stop-server-done/ from p - - -test DiscoveryJoinedAfter: - let services = "discovery" - - subnet sd - subnet s1 - subnet s2 - - spawn as pd on sd - spawn as p1 on s1 - spawn as p2 on s2 - send "create-identity Discovery" to pd - send "create-identity Device1 Owner1" to p1 - send "create-identity Device2 Owner2" to p2 - - expect /create-identity-done ref ($refpat).*/ from p1 capture p1id - send "identity-info $p1id" to p1 - expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner - send "identity-info $p1owner" to p1 - expect /identity-info ref $p1owner base ($refpat).*/ from p1 capture p1obase - - expect /create-identity-done ref $refpat.*/ from p2 - expect /create-identity-done ref $refpat.*/ from pd - - for id in [ p1obase ]: - for p in [ pd, p1, p2 ]: - send "start-server services $services" to p - expect from pd /start-server-done/ - - for p in [ p2 ]: - with p: - send "peer-add ${pd.node.ip}" - expect: - /peer 1 addr ${pd.node.ip} 29665/ - /peer 1 id Discovery/ - expect from pd: - /peer [12] addr ${p.node.ip} 29665/ - /peer [12] id Device. Owner./ - - send "discovery-connect $id" to p2 - - for p in [ p1 ]: - with p: - send "peer-add ${pd.node.ip}" - expect: - /peer 1 addr ${pd.node.ip} 29665/ - /peer 1 id Discovery/ - expect from pd: - /peer [12] addr ${p.node.ip} 29665/ - /peer [12] id Device. Owner./ - - expect from p1: - /peer [0-9]+ addr ${p2.node.ip} 29665/ - /peer [0-9]+ id Device2 Owner2/ - expect from p2: - /peer [0-9]+ addr ${p1.node.ip} 29665/ - /peer [0-9]+ id Device1 Owner1/ - - for p in [ pd, p1, p2 ]: - send "stop-server" to p - for p in [ pd, p1, p2 ]: - expect /stop-server-done/ from p - - -test DiscoveryTunnel: - let services = "discovery:tunnel" - - subnet sd - subnet s1 - subnet s2 - - spawn as pd on sd - spawn as p1 on s1 - spawn as p2 on s2 - - for n in [ p1.node, p2.node ]: - shell on n: - nft add table inet filter - nft add chain inet filter input '{ type filter hook input priority filter ; policy drop; }' - nft add rule inet filter input 'ct state { established, related } accept' - - send "create-identity Discovery" to pd - send "create-identity Device1 Owner1" to p1 - send "create-identity Device2 Owner2" to p2 - - expect /create-identity-done ref ($refpat).*/ from p1 capture p1id - send "identity-info $p1id" to p1 - expect /identity-info ref $p1id base ($refpat) owner ($refpat).*/ from p1 capture p1base, p1owner - send "identity-info $p1owner" to p1 - expect /identity-info ref $p1owner base ($refpat).*/ from p1 capture p1obase - - expect /create-identity-done ref $refpat.*/ from p2 - expect /create-identity-done ref $refpat.*/ from pd - - for id in [ p1obase ]: - for p in [ pd, p1, p2 ]: - send "start-server services $services test-log" to p - expect from pd /start-server-done/ - - 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 - - expect from pd /start-server-done/ - - 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 - expect from pd /start-server-done/ - - 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 - - -test CommonOwnerDiscovery: - let services = "discovery:trace" - - subnet sd - subnet s1 - subnet s2 - subnet s3 - - node nd on sd - node n1 on s1 - node n2 on s2 - node n3 on s3 - - # TODO: move under the following "local" and capture values from inner block - spawn as p1_init on n1 - spawn as p2_init on n2 - spawn as p3_init on n3 - - send "create-identity Device1 Owner" to p1_init - expect /create-identity-done ref ($refpat).*/ from p1_init capture p1_id_ext - send "identity-info $p1_id_ext" to p1_init - expect /identity-info ref $p1_id_ext base ($refpat) owner ($refpat).*/ from p1_init capture p1_id, owner_ext - send "identity-info $owner_ext" to p1_init - expect /identity-info ref $owner_ext base ($refpat).*/ from p1_init capture owner - - local: - spawn as pd on nd - let p1 = p1_init - let p2 = p2_init - let p3 = p3_init - - send "create-identity Device2" to p2 - send "create-identity Device3" to p3 - - expect /create-identity-done .*/ from p2 - expect /create-identity-done .*/ from p3 - - send "create-identity Discovery" to pd - - expect /create-identity-done .*/ from pd - - for p in [ p1, p2, p3 ]: - send "start-server services attach" to p - for p in [ p1, p2, p3 ]: - expect /start-server-done/ from p - for p in [ p2, p3 ]: - send "watch-local-identity" to p - send "peer-add ${p1.node.ip} 29665" to p - expect /peer [0-9]+ addr ${p1.node.ip} 29665/ from p - expect /peer [0-9]+ id .*/ from p - perform_attach of p to p1 - - expect /local-identity ($refpat) Device. .*/ from p capture p_id_ext - send "identity-info $p_id_ext" to p - - for p in [ p1_init, p2_init, p3_init ]: - send "stop-server" to p - expect /stop-server-done/ from p - expect /identity-info ref $refpat base ($refpat).*/ from p2_init capture p2_id - expect /identity-info ref $refpat base ($refpat).*/ from p3_init capture p3_id - - local: - spawn as pd on nd - spawn as p1 on n1 - spawn as p2 on n2 - spawn as p3 on n3 - - ignore from p1 matching /discovery-packet-result via $refpat addr ICE/ - ignore from p2 matching /discovery-packet-result via $refpat addr ICE/ - ignore from p3 matching /discovery-packet-result via $refpat addr ICE/ - - # TODO: direct result should be returned only for exact device id match, keep for now - ignore from p1 matching /discovery-packet-result result .*/ - ignore from p2 matching /discovery-packet-result result .*/ - ignore from p3 matching /discovery-packet-result result .*/ - - for p in [ pd, p1, p2, p3 ]: - send "start-server services $services" to p - expect from pd /start-server-done/ - - send "peer-add ${pd.node.ip}" to p1 - expect from pd /discovery-packet ${p1.node.ip} 29665 search $owner/ - - send "peer-add ${pd.node.ip}" to p2 - expect from pd /discovery-packet ${p2.node.ip} 29665 search $owner/ - - expect from p1 /discovery-packet ${pd.node.ip} 29665 result $owner/ - expect from p1 /discovery-packet-result via ${p2_id} addr ${p2.node.ip} 29665/ - local: - expect from p1 /discovery-packet-result (.*)/ capture done - guard (done == done) - - expect from p2 /discovery-packet ${pd.node.ip} 29665 result $owner/ - expect from p2 /discovery-packet-result via ${p1_id} addr ${p1.node.ip} 29665/ - local: - expect from p2 /discovery-packet-result (.*)/ capture done - guard (done == "done") - - - send "peer-add ${pd.node.ip}" to p3 - expect from pd /discovery-packet ${p3.node.ip} 29665 search $owner/ - - expect from p3 /discovery-packet ${pd.node.ip} 29665 result $owner/ - expect from p3 /discovery-packet-result via ${p1_id} addr ${p1.node.ip} 29665/ - expect from p3 /discovery-packet-result via ${p2_id} addr ${p2.node.ip} 29665/ - local: - expect from p3 /discovery-packet-result (.*)/ capture done - guard (done == done) - - expect from p1: - /peer [0-9]+ addr ${p2.node.ip} 29665/ - /peer [0-9]+ addr ${p3.node.ip} 29665/ - - for p in [ p1, p2 ]: - send "stop-server" to p - for p in [ p1, p2 ]: - expect /stop-server-done/ from p - for p in [ p1, p2 ]: - send "start-server services $services" to p - - send "peer-add ${pd.node.ip}" to p1 - send "peer-add ${p3.node.ip}" to p2 - - expect from p1: - /peer [0-9]+ addr ${pd.node.ip} 29665/ - /peer [0-9]+ addr ${p2.node.ip} 29665/ - /peer [0-9]+ addr ${p3.node.ip} 29665/ - - expect from p2: - /peer [0-9]+ addr ${pd.node.ip} 29665/ - /peer [0-9]+ addr ${p1.node.ip} 29665/ - /peer [0-9]+ addr ${p3.node.ip} 29665/ - - -test DiscoveryAnyOrder: - let services = "discovery" - - subnet sd - subnet ss - subnet s1 - subnet s2 - subnet s3 - subnet s4 - subnet s5 - subnet s6 - - spawn on sd as pd - spawn on ss as ps # connection order to pd: - spawn on s1 as p1 # search - p1 - ps - spawn on s2 as p2 # search - ps - p2 - spawn on s3 as p3 # p3 - search - ps - spawn on s4 as p4 # p4 - ps - search - spawn on s5 as p5 # ps - p5 - search - spawn on s6 as p6 # ps - search - p6 - - send "create-identity Discovery" to pd - send "create-identity Searching" to ps - send "create-identity Device1" to p1 - send "create-identity Device2" to p2 - send "create-identity Device3" to p3 - send "create-identity Device4" to p4 - send "create-identity Device5" to p5 - send "create-identity Device6" to p6 - - expect /create-identity-done ref $refpat.*/ from pd - expect /create-identity-done ref ($refpat).*/ from ps capture ps_id - expect /create-identity-done ref ($refpat).*/ from p1 capture p1_id - expect /create-identity-done ref ($refpat).*/ from p2 capture p2_id - expect /create-identity-done ref ($refpat).*/ from p3 capture p3_id - expect /create-identity-done ref ($refpat).*/ from p4 capture p4_id - expect /create-identity-done ref ($refpat).*/ from p5 capture p5_id - expect /create-identity-done ref ($refpat).*/ from p6 capture p6_id - - send "start-server services $services" to pd - # wait for the first server to start and claim the discovery port - expect /start-server-done/ from pd - - for p in [ ps, p1, p2, p3, p4, p5, p6 ]: - send "start-server services $services" to p - for p in [ ps, p1, p2, p3, p4, p5, p6 ]: - expect /start-server-done/ from p - - send "discovery-connect $p1_id" to ps - send "discovery-connect $p2_id" to ps - - send "peer-add ${pd.node.ip} 29665" to p1 - send "peer-add ${pd.node.ip} 29665" to p3 - send "peer-add ${pd.node.ip} 29665" to p4 - expect /peer [0-9]+ id Discovery/ from p1 - expect /peer [0-9]+ id Discovery/ from p3 - expect /peer [0-9]+ id Discovery/ from p4 - - send "discovery-connect $p3_id" to ps - - send "peer-add ${pd.node.ip} 29665" to ps - expect /peer [0-9]+ id Discovery/ from ps - - expect /peer [0-9]+ id Device1/ from ps - expect /peer [0-9]+ id Device3/ from ps - - send "peer-add ${pd.node.ip} 29665" to p2 - expect /peer [0-9]+ id Device2/ from ps - - send "discovery-connect $p4_id" to ps - expect /peer [0-9]+ id Device4/ from ps - - send "peer-add ${pd.node.ip} 29665" to p5 - expect /peer [0-9]+ id Discovery/ from p5 - - send "discovery-connect $p5_id" to ps - send "discovery-connect $p6_id" to ps - expect /peer [0-9]+ id Device5/ from ps - - send "peer-add ${pd.node.ip} 29665" to p6 - expect /peer [0-9]+ id Discovery/ from p6 - expect /peer [0-9]+ id Device6/ from ps - - -test DiscoveryOnLocalhost: - let services = "discovery" - node n - - # TODO: some way to have node without any connection - shell on n: - ip link set dev ${n.ifname} down - - spawn on n: - as pd - as ps # connection order to pd: - as p1 # search - p1 - ps - as p2 # search - ps - p2 - as p3 # p3 - search - ps - as p4 # p4 - ps - search - as p5 # ps - p5 - search - as p6 # ps - search - p6 - - send "create-identity Discovery" to pd - send "create-identity Searching" to ps - send "create-identity Device1" to p1 - send "create-identity Device2" to p2 - send "create-identity Device3" to p3 - send "create-identity Device4" to p4 - send "create-identity Device5" to p5 - send "create-identity Device6" to p6 - - expect /create-identity-done ref $refpat.*/ from pd - expect /create-identity-done ref ($refpat).*/ from ps capture ps_id - expect /create-identity-done ref ($refpat).*/ from p1 capture p1_id - expect /create-identity-done ref ($refpat).*/ from p2 capture p2_id - expect /create-identity-done ref ($refpat).*/ from p3 capture p3_id - expect /create-identity-done ref ($refpat).*/ from p4 capture p4_id - expect /create-identity-done ref ($refpat).*/ from p5 capture p5_id - expect /create-identity-done ref ($refpat).*/ from p6 capture p6_id - - send "start-server services $services" to pd - # wait for the first server to start and claim the discovery port - expect /start-server-done/ from pd - - for p in [ ps, p1, p2, p3, p4, p5, p6 ]: - send "start-server services $services" to p - for p in [ ps, p1, p2, p3, p4, p5, p6 ]: - expect /start-server-done/ from p - - send "discovery-connect $p1_id" to ps - send "discovery-connect $p2_id" to ps - - send "peer-add localhost" to p1 - send "peer-add localhost" to p3 - send "peer-add localhost" to p4 - expect /peer [0-9]+ id Discovery/ from p1 - expect /peer [0-9]+ id Discovery/ from p3 - expect /peer [0-9]+ id Discovery/ from p4 - - send "discovery-connect $p3_id" to ps - - send "peer-add localhost" to ps - expect /peer [0-9]+ id Discovery/ from ps - - expect /peer [0-9]+ id Device1/ from ps - expect /peer [0-9]+ id Device3/ from ps - - send "peer-add localhost" to p2 - expect /peer [0-9]+ id Device2/ from ps - - send "discovery-connect $p4_id" to ps - expect /peer [0-9]+ id Device4/ from ps - - send "peer-add localhost" to p5 - expect /peer [0-9]+ id Discovery/ from p5 - - send "discovery-connect $p5_id" to ps - send "discovery-connect $p6_id" to ps - expect /peer [0-9]+ id Device5/ from ps - - send "peer-add localhost" to p6 - expect /peer [0-9]+ id Discovery/ from p6 - expect /peer [0-9]+ id Device6/ from ps |