Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix all flaky tests #2097

Closed
wants to merge 118 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
257c0b7
Change eventually semantics in test
MarcoPolo Feb 14, 2023
00b3e6c
Increase timeout in autorelay test
MarcoPolo Feb 14, 2023
4e27b69
Switch back to require.Eventually
MarcoPolo Feb 14, 2023
0eb693e
Fix flakiness in decay_test
MarcoPolo Feb 15, 2023
b626f6a
Fix flakines in autorelay and basic_host
MarcoPolo Feb 15, 2023
b370c14
Add debugging flaky test docs
MarcoPolo Feb 15, 2023
9c64a91
Bump timeout
MarcoPolo Feb 15, 2023
b509c5a
Only have one concurrent dialer in CI
MarcoPolo Feb 15, 2023
1f9b45a
Use WithBackoff
MarcoPolo Feb 15, 2023
3748511
Try something weird
MarcoPolo Feb 15, 2023
fe6886f
Update timeout
MarcoPolo Feb 15, 2023
6885583
Remove incorrect usages of ticker timestamp
MarcoPolo Feb 15, 2023
323b3b7
Debug dial
MarcoPolo Feb 15, 2023
b8a62ed
Fixup from now refactor
MarcoPolo Feb 15, 2023
df6102e
Debug increase time between dials
MarcoPolo Feb 15, 2023
bc710a7
Bump timeout
MarcoPolo Feb 15, 2023
92bfbf7
Stagger for all dials
MarcoPolo Feb 15, 2023
a20497e
Increase dial timeouts
MarcoPolo Feb 15, 2023
4abb6f7
Increase dial timeouts and fix tests that rely on low timeouts
MarcoPolo Feb 15, 2023
ecd77a6
Fix flaky MaxAge test
MarcoPolo Feb 15, 2023
ccf150c
Bump timeout
MarcoPolo Feb 15, 2023
742dfde
Limit dial concurrency to 1 for CI
MarcoPolo Feb 15, 2023
5e7a49a
Add dial peer timeout in quic_test
MarcoPolo Feb 15, 2023
f7f8ca0
Update tests that require concurrent dials
MarcoPolo Feb 15, 2023
3a81377
Retry connect
MarcoPolo Feb 15, 2023
ff0ea44
Remove racey bit
MarcoPolo Feb 15, 2023
6850521
Remove unused
MarcoPolo Feb 15, 2023
ebd6b8e
Don't run package tests in parallel
MarcoPolo Feb 15, 2023
1829a7f
Trigger CI
MarcoPolo Feb 15, 2023
879d05a
Trigger CI
MarcoPolo Feb 15, 2023
2865f2c
Experiment with parallel dials and increased local addr timeout
MarcoPolo Feb 16, 2023
c9735d7
Add logging to CI
MarcoPolo Feb 16, 2023
40e2c75
One parallel dial again
MarcoPolo Feb 16, 2023
c3323e6
Log everything
MarcoPolo Feb 16, 2023
84d04b3
Log only swarm and basichost
MarcoPolo Feb 17, 2023
cbc1a6c
Increase timeouts
MarcoPolo Feb 17, 2023
d2e2ee3
Fix flaky swarm_net_test
MarcoPolo Feb 17, 2023
dbfe6ff
More info
MarcoPolo Feb 17, 2023
c500331
More debug
MarcoPolo Feb 17, 2023
253d180
Start ID before autorelay
MarcoPolo Feb 17, 2023
deeae07
Trigger CI
MarcoPolo Feb 17, 2023
d7ac515
Trigger CI
MarcoPolo Feb 17, 2023
2c7221a
Trigger CI
MarcoPolo Feb 17, 2023
99d2eba
Pace serial dials in CI
MarcoPolo Feb 17, 2023
c16065d
Add skip
MarcoPolo Feb 17, 2023
ec47d35
Check if ctx is cancelled before dialing
MarcoPolo Feb 17, 2023
b71d63b
Fix flake in TestReconnectToStaticRelays
MarcoPolo Feb 17, 2023
ba167fb
Increase dial timeout
MarcoPolo Feb 17, 2023
d411267
Fix race
MarcoPolo Feb 17, 2023
610b17b
Fix race
MarcoPolo Feb 17, 2023
8f20bbd
Add getter for thread safe access
MarcoPolo Feb 17, 2023
075642b
Trigger CI
MarcoPolo Feb 17, 2023
7f8b644
Advance time in eventually checks
MarcoPolo Feb 17, 2023
3ffc0f7
Increase sleep timeout for slow CI
MarcoPolo Feb 17, 2023
d447a10
Increase timeout
MarcoPolo Feb 17, 2023
d0c4bcb
Remove parallel tests from swarm tests
MarcoPolo Feb 17, 2023
460f3a4
Bump timeout
MarcoPolo Feb 17, 2023
49b7359
Bump timeout
MarcoPolo Feb 18, 2023
5178174
Fmt
MarcoPolo Feb 18, 2023
c3ad513
Increase gotest timeout
MarcoPolo Feb 18, 2023
7d3f5c2
Trigger CI
MarcoPolo Feb 18, 2023
6464bab
Trigger CI
MarcoPolo Feb 18, 2023
dd3d157
Increase pace between dials
MarcoPolo Feb 18, 2023
7af4959
Trigger CI
MarcoPolo Feb 18, 2023
ea697b9
Trigger CI
MarcoPolo Feb 18, 2023
13d8a04
Skip flaky alloc test
MarcoPolo Feb 18, 2023
1e0a9d0
Trigger CI
MarcoPolo Feb 18, 2023
8f0a4d5
Trigger CI
MarcoPolo Feb 18, 2023
87e2e10
Trigger CI
MarcoPolo Feb 18, 2023
6ada7d0
Add better logging
MarcoPolo Feb 18, 2023
df0a3f0
Trigger CI
MarcoPolo Feb 18, 2023
ba126a9
Trigger CI
MarcoPolo Feb 18, 2023
b859962
Trigger CI
MarcoPolo Feb 18, 2023
f2a4627
Trigger CI
MarcoPolo Feb 18, 2023
68ccd19
Trigger CI
MarcoPolo Feb 18, 2023
4b11643
Increase busy-loop check
MarcoPolo Feb 18, 2023
158e772
Trigger CI
MarcoPolo Feb 18, 2023
a8072c1
Trigger CI
MarcoPolo Feb 18, 2023
ef000a4
Trigger CI
MarcoPolo Feb 18, 2023
5d1ed19
Fix stalled listener
MarcoPolo Feb 19, 2023
48d2925
Trigger CI
MarcoPolo Feb 19, 2023
13dacaf
Trigger CI
MarcoPolo Feb 19, 2023
93126ed
Trigger CI
MarcoPolo Feb 19, 2023
d01f46f
Trigger CI
MarcoPolo Feb 19, 2023
7546039
Fix flaky test
MarcoPolo Feb 20, 2023
e269a1d
Trigger CI
MarcoPolo Feb 20, 2023
2fef272
Trigger CI
MarcoPolo Feb 20, 2023
6c6fa27
Trigger CI
MarcoPolo Feb 20, 2023
c423b98
Trigger CI
MarcoPolo Feb 20, 2023
664ba21
Bump timeout
MarcoPolo Feb 20, 2023
c139339
Use getter
MarcoPolo Feb 20, 2023
b152c20
Trigger CI
MarcoPolo Feb 20, 2023
fe4492b
Trigger CI
MarcoPolo Feb 20, 2023
1b63897
Trigger CI
MarcoPolo Feb 20, 2023
ab95b4c
Trigger CI
MarcoPolo Feb 20, 2023
facead8
Trigger CI
MarcoPolo Feb 20, 2023
378260e
Refactor relay_finder.go
MarcoPolo Feb 20, 2023
c4e269d
Bump timeouts
MarcoPolo Feb 20, 2023
dc45362
Trigger CI
MarcoPolo Feb 20, 2023
da170a2
Trigger CI
MarcoPolo Feb 20, 2023
abf67ef
Update clock dep
MarcoPolo Feb 20, 2023
1f3b6b6
Trigger CI
MarcoPolo Feb 20, 2023
31006b0
Trigger CI
MarcoPolo Feb 20, 2023
e825318
Trigger CI
MarcoPolo Feb 20, 2023
aa162a4
Use go mod replace to update examples to latest go-libp2p version
MarcoPolo Feb 20, 2023
596e003
Trigger CI
MarcoPolo Feb 20, 2023
c74cdb7
Trigger CI
MarcoPolo Feb 20, 2023
ec9ee87
Parallel dials for autonat tests
MarcoPolo Feb 21, 2023
d2c944b
Trigger CI
MarcoPolo Feb 21, 2023
912e7de
Trigger CI
MarcoPolo Feb 21, 2023
1efd08a
Parallel dials for holepunch tests
MarcoPolo Feb 21, 2023
571f0e7
Trigger CI
MarcoPolo Feb 21, 2023
b5818e8
Trigger CI
MarcoPolo Feb 21, 2023
2f69b39
Bump timeouts
MarcoPolo Feb 21, 2023
9bd7e1e
Trigger CI
MarcoPolo Feb 21, 2023
137cddf
Trigger CI
MarcoPolo Feb 21, 2023
b919b7b
Trigger CI
MarcoPolo Feb 21, 2023
e86584f
Trigger CI
MarcoPolo Feb 21, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .github/workflows/go-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ jobs:
go: ["1.19.x","1.20.x"]
env:
COVERAGES: ""
GOLOG_LOG_LEVEL: swarm2=debug,basichost=debug,net/identify=debug,autorelay=debug
GOTEST_FLAGS: "-timeout 20m -p 1 -v"
runs-on: ${{ fromJSON(vars[format('UCI_GO_TEST_RUNNER_{0}', matrix.os)] || format('"{0}-latest"', matrix.os)) }}
name: ${{ matrix.os }} (go ${{ matrix.go }})
steps:
Expand Down Expand Up @@ -46,7 +48,7 @@ jobs:
# Use -coverpkg=./..., so that we include cross-package coverage.
# If package ./A imports ./B, and ./A's tests also cover ./B,
# this means ./B's coverage will be significantly higher than 0%.
run: go test -v -shuffle=on -coverprofile=module-coverage.txt -coverpkg=./... ./...
run: go test ${{ env.GOTEST_FLAGS }} -shuffle=on -coverprofile=module-coverage.txt -coverpkg=./... ./...
- name: Run tests (32 bit)
# can't run 32 bit tests on OSX.
if: matrix.os != 'macos' &&
Expand All @@ -58,19 +60,19 @@ jobs:
with:
run: |
export "PATH=$PATH_386:$PATH"
go test -v -shuffle=on ./...
go test ${{ env.GOTEST_FLAGS }} -p 1 -v -shuffle=on ./...
- name: Run tests with race detector
# speed things up. Windows and OSX VMs are slow
if: matrix.os == 'ubuntu' &&
contains(fromJSON(steps.config.outputs.json).skipOSes, matrix.os) == false
uses: protocol/multiple-go-modules@v1.2
with:
run: go test -v -race ./...
run: go test ${{ env.GOTEST_FLAGS }} -race ./...
- name: Collect coverage files
shell: bash
run: echo "COVERAGES=$(find . -type f -name 'module-coverage.txt' | tr -s '\n' ',' | sed 's/,$//')" >> $GITHUB_ENV
- name: Upload coverage to Codecov
uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70 # v3.1.1
with:
files: '${{ env.COVERAGES }}'
files: "${{ env.COVERAGES }}"
env_vars: OS=${{ matrix.os }}, GO=${{ matrix.go }}
4 changes: 3 additions & 1 deletion config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,9 @@ func (cfg *Config) NewNode() (host.Host, error) {
ho = routed.Wrap(h, router)
}
if ar != nil {
return autorelay.NewAutoRelayHost(ho, ar), nil
arh := autorelay.NewAutoRelayHost(ho, ar)
arh.Start()
ho = arh
}
return ho, nil
}
Expand Down
43 changes: 43 additions & 0 deletions docs/flaky-tests.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# Debugging Flaky Tests

If a test is flaky in CI it's probably because there's some timing issue. The
test probably depends on some Go routine making progress in the background and
polling to see if the expected outcome is achieved.

This will pretty much always work locally because your local machine is likely
pretty capable and there isn't too many concurrent processes running. In CI, we
are susceptible to both slower hardware and noisier neighbors. However we can
mimic this environment locally with
[cgroups](https://man7.org/linux/man-pages/man7/cgroups.7.html).

# Replicating noisy neighbors

We can limit the amount of CPU time relative to real time a process gets with
cgroups. This lets us replicate the environment where many other neighboring
processes are vying for CPU time.

```bash
# Compile some test we want to run. We do this outside the cgroup so this is
# fast
go test -c ./p2p/host/autorelay

# Create the group
sudo cgcreate -g cpu:/cpulimit

# Limit the time to 10,000 microseconds for every 1s
sudo cgset -r cpu.cfs_quota_us=10000 cpulimit
sudo cgset -r cpu.cfs_period_us=1000000 cpulimit

# Run a shell with in our limited environemnt
sudo cgexec -g cpu:cpulimit bash

# In the shell, run the test
./autorelay.test -test.v
```

# Flakiness with coverage profile

Sometimes adding the `-coverprofile=module-coverage.txt` introduces flaky
behavior since it adds another goroutine to the mix. If you're having trouble
reproducing a flaky test, try enabling this flag.

3 changes: 3 additions & 0 deletions examples/chat/chat_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"fmt"
"log"
"testing"
"time"

"github.com/libp2p/go-libp2p/core/network"

Expand Down Expand Up @@ -43,6 +44,8 @@ func TestMain(t *testing.T) {

go startPeer(ctx, h1, func(network.Stream) {
log.Println("Got a new stream!")
// Sleep a bit to let h2 print the logs we're waiting for
time.Sleep(500 * time.Millisecond)
cancel() // end the test
})

Expand Down
4 changes: 3 additions & 1 deletion examples/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ require (
github.com/multiformats/go-multibase v0.1.1 // indirect
github.com/multiformats/go-multicodec v0.7.0 // indirect
github.com/multiformats/go-multihash v0.2.1 // indirect
github.com/multiformats/go-multistream v0.4.0 // indirect
github.com/multiformats/go-multistream v0.4.1 // indirect
github.com/multiformats/go-varint v0.0.7 // indirect
github.com/onsi/ginkgo/v2 v2.5.1 // indirect
github.com/opencontainers/runtime-spec v1.0.2 // indirect
Expand Down Expand Up @@ -111,3 +111,5 @@ require (
lukechampine.com/blake3 v1.1.7 // indirect
nhooyr.io/websocket v1.8.7 // indirect
)

replace github.com/libp2p/go-libp2p => ../
6 changes: 2 additions & 4 deletions examples/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -310,8 +310,6 @@ github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38y
github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic=
github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM=
github.com/libp2p/go-flow-metrics v0.1.0/go.mod h1:4Xi8MX8wj5aWNDAZttg6UPmc0ZrnFNsMtpsYUClFtro=
github.com/libp2p/go-libp2p v0.25.0 h1:ND6Hc6ZYCzC8S++C4mOD7LdPnLXRkNbr12/8FXgUfIo=
github.com/libp2p/go-libp2p v0.25.0/go.mod h1:vXHmFpcfl+xIGN4qW58Bw3a0/SKGAesr5/T4IuJHE3o=
github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw=
github.com/libp2p/go-libp2p-asn-util v0.2.0/go.mod h1:WoaWxbHKBymSN41hWSq/lGKJEca7TNm58+gGJi2WsLI=
github.com/libp2p/go-libp2p-kad-dht v0.20.1-0.20230209220319-6c2045abad23 h1:VGjUg3I0gLugtjZKI4kzvPiptmfYhWHK6YGBI4ZI2Cs=
Expand Down Expand Up @@ -398,8 +396,8 @@ github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUj
github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84=
github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108=
github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc=
github.com/multiformats/go-multistream v0.4.0 h1:5i4JbawClkbuaX+mIVXiHQYVPxUW+zjv6w7jtSRukxc=
github.com/multiformats/go-multistream v0.4.0/go.mod h1:BS6ZSYcA4NwYEaIMeCtpJydp2Dc+fNRA6uJMSu/m8+4=
github.com/multiformats/go-multistream v0.4.1 h1:rFy0Iiyn3YT0asivDUIR05leAdwZq3de4741sbiSdfo=
github.com/multiformats/go-multistream v0.4.1/go.mod h1:Mz5eykRVAjJWckE2U78c6xqdtyNUEhKSM0Lwar2p77Q=
github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
Expand Down
4 changes: 4 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,7 @@ require (
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/blake3 v1.1.7 // indirect
)

replace github.com/stretchr/testify => github.com/marcopolo/testify v1.8.1-eventually

replace github.com/benbjohnson/clock => github.com/marcopolo/clock v1.4.0
20 changes: 4 additions & 16 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,6 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A=
github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
Expand Down Expand Up @@ -86,7 +83,6 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU=
Expand Down Expand Up @@ -341,6 +337,10 @@ github.com/libp2p/zeroconf/v2 v2.2.0/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0
github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/marcopolo/clock v1.4.0 h1:kL3wgpJFTB1Zm6SQJkLQMwRV5zPqnPSgz7Lw37H83OI=
github.com/marcopolo/clock v1.4.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/marcopolo/testify v1.8.1-eventually h1:TjSolYXOjPglz+qXKyaWjnr+UAq85vDg5PoZGA9WHlQ=
github.com/marcopolo/testify v1.8.1-eventually/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk=
github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
Expand Down Expand Up @@ -516,19 +516,8 @@ github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tL
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA=
Expand Down Expand Up @@ -938,7 +927,6 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Expand Down
2 changes: 1 addition & 1 deletion p2p/host/autonat/autonat_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ func TestAutoNATIncomingEvents(t *testing.T) {

require.Eventually(t, func() bool {
return an.Status() != network.ReachabilityUnknown
}, 500*time.Millisecond, 10*time.Millisecond, "Expected probe due to identification of autonat service")
}, 5*time.Second, 100*time.Millisecond, "Expected probe due to identification of autonat service")
}

func TestAutoNATObservationRecording(t *testing.T) {
Expand Down
21 changes: 14 additions & 7 deletions p2p/host/autonat/svc_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (
"github.com/libp2p/go-libp2p/core/host"
"github.com/libp2p/go-libp2p/core/network"
bhost "github.com/libp2p/go-libp2p/p2p/host/blank"
"github.com/libp2p/go-libp2p/p2p/net/swarm"
swarmt "github.com/libp2p/go-libp2p/p2p/net/swarm/testing"

ma "github.com/multiformats/go-multiaddr"
Expand Down Expand Up @@ -44,6 +45,7 @@ func makeAutoNATClient(t *testing.T) (host.Host, Client) {

// Note: these tests assume that the host has only private network addresses!
func TestAutoNATServiceDialRefused(t *testing.T) {
defer swarm.SwapDefaultPerPeerRateLimit(swarm.SwapDefaultPerPeerRateLimit(8))
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

Expand All @@ -69,6 +71,7 @@ func TestAutoNATServiceDialRefused(t *testing.T) {
}

func TestAutoNATServiceDialSuccess(t *testing.T) {
defer swarm.SwapDefaultPerPeerRateLimit(swarm.SwapDefaultPerPeerRateLimit(8))
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

Expand All @@ -89,15 +92,16 @@ func TestAutoNATServiceDialSuccess(t *testing.T) {
}

func TestAutoNATServiceDialRateLimiter(t *testing.T) {
defer swarm.SwapDefaultPerPeerRateLimit(swarm.SwapDefaultPerPeerRateLimit(8))
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

c := makeAutoNATConfig(t)
defer c.host.Close()
defer c.dialer.Close()

c.dialTimeout = 200 * time.Millisecond
c.throttleResetPeriod = 200 * time.Millisecond
c.dialTimeout = 10 * time.Second
c.throttleResetPeriod = 1 * time.Second
c.throttleResetJitter = 0
c.throttlePeerMax = 1
_ = makeAutoNATService(t, c)
Expand All @@ -122,21 +126,22 @@ func TestAutoNATServiceDialRateLimiter(t *testing.T) {

time.Sleep(400 * time.Millisecond)

_, err = ac.DialBack(ctx, c.host.ID())
if err != nil {
t.Fatal(err)
}
require.Eventually(t, func() bool {
_, err = ac.DialBack(ctx, c.host.ID())
return err == nil
}, 5*time.Second, time.Second)
}

func TestAutoNATServiceGlobalLimiter(t *testing.T) {
defer swarm.SwapDefaultPerPeerRateLimit(swarm.SwapDefaultPerPeerRateLimit(8))
ctx, cancel := context.WithCancel(context.Background())
defer cancel()

c := makeAutoNATConfig(t)
defer c.host.Close()
defer c.dialer.Close()

c.dialTimeout = time.Second
c.dialTimeout = 3 * time.Second
c.throttleResetPeriod = 10 * time.Second
c.throttleResetJitter = 0
c.throttlePeerMax = 1
Expand Down Expand Up @@ -169,6 +174,7 @@ func TestAutoNATServiceGlobalLimiter(t *testing.T) {
}

func TestAutoNATServiceRateLimitJitter(t *testing.T) {
defer swarm.SwapDefaultPerPeerRateLimit(swarm.SwapDefaultPerPeerRateLimit(8))
c := makeAutoNATConfig(t)
defer c.host.Close()
defer c.dialer.Close()
Expand All @@ -194,6 +200,7 @@ func TestAutoNATServiceRateLimitJitter(t *testing.T) {
}

func TestAutoNATServiceStartup(t *testing.T) {
defer swarm.SwapDefaultPerPeerRateLimit(swarm.SwapDefaultPerPeerRateLimit(8))
h := bhost.NewBlankHost(swarmt.GenSwarm(t))
defer h.Close()
dh := bhost.NewBlankHost(swarmt.GenSwarm(t))
Expand Down
5 changes: 4 additions & 1 deletion p2p/host/autorelay/autorelay.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,15 @@ func NewAutoRelay(bhost *basic.BasicHost, opts ...Option) (*AutoRelay, error) {
r.relayFinder = newRelayFinder(bhost, conf.peerSource, &conf)
bhost.AddrsFactory = r.hostAddrs

return r, nil
}

func (r *AutoRelay) Start() {
r.refCount.Add(1)
go func() {
defer r.refCount.Done()
r.background()
}()
return r, nil
}

func (r *AutoRelay) background() {
Expand Down
Loading