use Fx to start and stop the host, swarm, autorelay and quicreuse (#2118)

* config: refactor AutoNAT construction into separate method

* config: use a lifecycle hook to start listening on swarm addresses

* use Fx to construct the host

* add a test for constructing a routed host

* use Fx hooks to start the host

* config: use Fx lifecycle hooks to start AutoRelay and for PeerRouting

* basichost: don't close the swarm

The swarm is not constructed by the basic host, thus is shouldn't be
closed by it.

* config: use Fx hook to close the quicreuse connection manager

* test for goroutine leaks when starting/stopping fx

To do this, I've had to move a few leaky tests into a separate package.
I've filed a bug for the AutoNAT issue (#2743) but the "error on
startup" issue is going to require some pretty invasive changes (we need
to construct _then_ start).

* go fmt

* Ignore one more top function

* Typo

* Ignore any not top

---------

Co-authored-by: Sukun <sukunrt@gmail.com>
Co-authored-by: Steven Allen <steven@stebalien.com>
Co-authored-by: Marco Munizaga <git@marcopolo.io>
This commit is contained in:
Marten Seemann
2024-03-22 03:18:34 +10:00
committed by GitHub
parent 39242a499c
commit 9d149fa3cb
10 changed files with 244 additions and 142 deletions
+1
View File
@@ -0,0 +1 @@
Tests that leak goroutines for various reasons. Mostly because libp2p node shutdown logic doesn't run if we fail to construct the node.
+26
View File
@@ -0,0 +1,26 @@
package leaky_test
import (
"strings"
"testing"
"github.com/libp2p/go-libp2p"
"github.com/stretchr/testify/require"
)
func TestBadTransportConstructor(t *testing.T) {
h, err := libp2p.New(libp2p.Transport(func() {}))
if err == nil {
h.Close()
t.Fatal("expected an error")
}
if !strings.Contains(err.Error(), "_test.go") {
t.Error("expected error to contain debugging info")
}
}
func TestAutoNATService(t *testing.T) {
h, err := libp2p.New(libp2p.EnableNATService())
require.NoError(t, err)
h.Close()
}