From fbcfca7ac30aa6febe3ef8eb166bdd091df0cb21 Mon Sep 17 00:00:00 2001 From: Louis Thibault Date: Mon, 2 Aug 2021 10:16:19 -0400 Subject: [PATCH] Make BasicHost.evtLocalAddrsUpdated event emitter stateful. --- p2p/host/basic/basic_host.go | 2 +- p2p/host/basic/basic_host_test.go | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/p2p/host/basic/basic_host.go b/p2p/host/basic/basic_host.go index 327de871..7bd60bdc 100644 --- a/p2p/host/basic/basic_host.go +++ b/p2p/host/basic/basic_host.go @@ -175,7 +175,7 @@ func NewHost(ctx context.Context, n network.Network, opts *HostOpts) (*BasicHost if h.emitters.evtLocalProtocolsUpdated, err = h.eventbus.Emitter(&event.EvtLocalProtocolsUpdated{}); err != nil { return nil, err } - if h.emitters.evtLocalAddrsUpdated, err = h.eventbus.Emitter(&event.EvtLocalAddressesUpdated{}); err != nil { + if h.emitters.evtLocalAddrsUpdated, err = h.eventbus.Emitter(&event.EvtLocalAddressesUpdated{}, eventbus.Stateful); err != nil { return nil, err } diff --git a/p2p/host/basic/basic_host_test.go b/p2p/host/basic/basic_host_test.go index 1e799c21..be52a26b 100644 --- a/p2p/host/basic/basic_host_test.go +++ b/p2p/host/basic/basic_host_test.go @@ -28,6 +28,7 @@ import ( ma "github.com/multiformats/go-multiaddr" madns "github.com/multiformats/go-multiaddr-dns" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -728,6 +729,26 @@ func TestAddrChangeImmediatelyIfAddressNonEmpty(t *testing.T) { require.Equal(t, taddrs, rc.Addrs) } +func TestStatefulAddrEvents(t *testing.T) { + ctx := context.Background() + h := New(swarmt.GenSwarm(t, ctx)) + defer h.Close() + + sub, err := h.EventBus().Subscribe(&event.EvtLocalAddressesUpdated{}, eventbus.BufSize(10)) + if err != nil { + t.Error(err) + } + defer sub.Close() + + select { + case v := <-sub.Out(): + assert.NotNil(t, v) + + case <-time.After(time.Second * 5): + t.Error("timed out waiting for event") + } +} + func TestHostAddrChangeDetection(t *testing.T) { // This test uses the address factory to provide several // sets of listen addresses for the host. It advances through