Skip to content

Commit

Permalink
fix(test): retry flaky t0125-twonode.sh
Browse files Browse the repository at this point in the history
This makes is clear why test failed, and what were values.

Fixes flaky test: It will re-run flaky advanced test until bitswap stats
match expected value (something team has been doing anyway for the past
year).

It also adds /quic-v1 and /webtransport tests
  • Loading branch information
lidel committed Jan 5, 2023
1 parent ca0396e commit 73e6ade
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 24 deletions.
82 changes: 59 additions & 23 deletions test/sharness/t0125-twonode.sh
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ run_random_dir_test() {
check_dir_fetch 1 $DIR_HASH
}

run_advanced_test() {
flaky_advanced_test() {
startup_cluster 2 "$@"

test_expect_success "clean repo before test" '
Expand All @@ -64,48 +64,72 @@ run_advanced_test() {

run_random_dir_test

test_expect_success "gather bitswap stats" '
ipfsi 0 bitswap stat -v > stat0 &&
ipfsi 1 bitswap stat -v > stat1
'

test_expect_success "shut down nodes" '
iptb stop && iptb_wait_stop
'
}

run_advanced_test() {
# TODO: investigate why flaky_advanced_test is flaky
# Context: https://github.com/ipfs/kubo/pull/9486
# sometimes, bitswap status returns unexpected block transfers
# and everyone has been re-running circleci until is passes for at least a year.
# this re-runs test until it passes or a timeout hits

BLOCKS_0=126
BLOCKS_1=5
DATA_0=228113
DATA_1=1000256
for i in $(test_seq 1 600); do
flaky_advanced_test
(grep -q "$DATA_0" stat0 && grep -q "$DATA_1" stat1) && break
go-sleep 100ms
done

test_expect_success "node0 data transferred looks correct" '
ipfsi 0 bitswap stat > stat0 &&
grep "blocks sent: 126" stat0 > /dev/null &&
grep "blocks received: 5" stat0 > /dev/null &&
grep "data sent: 228113" stat0 > /dev/null &&
grep "data received: 1000256" stat0 > /dev/null
test_should_contain "blocks sent: $BLOCKS_0" stat0 &&
test_should_contain "blocks received: $BLOCKS_1" stat0 &&
test_should_contain "data sent: $DATA_0" stat0 &&
test_should_contain "data received: $DATA_1" stat0
'

test_expect_success "node1 data transferred looks correct" '
ipfsi 1 bitswap stat > stat1 &&
grep "blocks received: 126" stat1 > /dev/null &&
grep "blocks sent: 5" stat1 > /dev/null &&
grep "data received: 228113" stat1 > /dev/null &&
grep "data sent: 1000256" stat1 > /dev/null
test_should_contain "blocks received: $BLOCKS_0" stat1 &&
test_should_contain "blocks sent: $BLOCKS_1" stat1 &&
test_should_contain "data received: $DATA_0" stat1 &&
test_should_contain "data sent: $DATA_1" stat1
'

test_expect_success "shut down nodes" '
iptb stop && iptb_wait_stop
'
}

test_expect_success "set up tcp testbed" '
iptb testbed create -type localipfs -count 2 -force -init
'

addrs='"[\"/ip4/127.0.0.1/tcp/0\", \"/ip4/127.0.0.1/udp/0/quic\"]"'
test_expect_success "configure addresses" '
ipfsi 0 config --json Addresses.Swarm '"${addrs}"' &&
ipfsi 1 config --json Addresses.Swarm '"${addrs}"'
test_expect_success "disable routing, use direct peering" '
iptb run -- ipfs config Routing.Type none &&
iptb run -- ipfs config --json Bootstrap "[]"
'

# Test TCP transport
echo "Testing TCP"
addrs='"[\"/ip4/127.0.0.1/tcp/0\"]"'
test_expect_success "use TCP only" '
iptb run -- ipfs config --json Addresses.Swarm '"${addrs}"' &&
iptb run -- ipfs config --json Swarm.Transports.Network.QUIC false &&
iptb run -- ipfs config --json Swarm.Transports.Network.Relay false &&
iptb run -- ipfs config --json Swarm.Transports.Network.WebTransport false &&
iptb run -- ipfs config --json Swarm.Transports.Network.Websocket false
'
run_advanced_test

# test multiplex muxer
echo "Running advanced tests with mplex"
echo "Running TCP tests with mplex"
test_expect_success "disable yamux" '
iptb run -- ipfs config --json Swarm.Transports.Multiplexers.Yamux false
'
Expand All @@ -114,23 +138,35 @@ run_advanced_test
test_expect_success "re-enable yamux" '
iptb run -- ipfs config --json Swarm.Transports.Multiplexers.Yamux null
'

# test Noise

echo "Running advanced tests with NOISE"
echo "Running TCP tests with NOISE"
test_expect_success "use noise only" '
iptb run -- ipfs config --json Swarm.Transports.Security.TLS false
'

run_advanced_test

test_expect_success "re-enable TLS" '
iptb run -- ipfs config --json Swarm.Transports.Security.TLS null
'

# test QUIC
echo "Running advanced tests over QUIC"
addrs='"[\"/ip4/127.0.0.1/udp/0/quic-v1\"]"'
test_expect_success "use QUIC only" '
iptb run -- ipfs config --json Addresses.Swarm '"${addrs}"' &&
iptb run -- ipfs config --json Swarm.Transports.Network.QUIC true &&
iptb run -- ipfs config --json Swarm.Transports.Network.TCP false
'
run_advanced_test

# test WebTransport
echo "Running advanced tests over WebTransport"
addrs='"[\"/ip4/127.0.0.1/udp/0/quic-v1/webtransport\"]"'
test_expect_success "use WebTransport only" '
iptb run -- ipfs config --json Addresses.Swarm '"${addrs}"' &&
iptb run -- ipfs config --json Swarm.Transports.Network.QUIC true &&
iptb run -- ipfs config --json Swarm.Transports.Network.WebTransport true
'
run_advanced_test

test_done
2 changes: 1 addition & 1 deletion test/sharness/t0172-content-routing-over-http.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export IPFS_HTTP_ROUTERS="http://127.0.0.1:$ROUTER_PORT"
test_launch_ipfs_daemon

test_expect_success "start HTTP router proxy" '
socat TCP-LISTEN:$ROUTER_PORT,reuseaddr,fork,bind=127.0.0.1 STDOUT > http_requests &
socat TCP-LISTEN:$ROUTER_PORT,reuseaddr,fork,bind=127.0.0.1,retry=10 STDOUT > http_requests &
NCPID=$!
test_wait_for_file 50 100ms http_requests
'
Expand Down

0 comments on commit 73e6ade

Please sign in to comment.