Skip to content

Commit c0a0aa0

Browse files
rcmgr: make it possible to embed the NullResourceManager
1 parent 012b8dd commit c0a0aa0

File tree

17 files changed

+108
-111
lines changed

17 files changed

+108
-111
lines changed

core/network/rcmgr.go

Lines changed: 41 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -271,60 +271,57 @@ type ScopeStat struct {
271271
}
272272

273273
// NullResourceManager is a stub for tests and initialization of default values
274-
var NullResourceManager ResourceManager = &nullResourceManager{}
275-
276-
type nullResourceManager struct{}
277-
type nullScope struct{}
278-
279-
var _ ResourceScope = (*nullScope)(nil)
280-
var _ ResourceScopeSpan = (*nullScope)(nil)
281-
var _ ServiceScope = (*nullScope)(nil)
282-
var _ ProtocolScope = (*nullScope)(nil)
283-
var _ PeerScope = (*nullScope)(nil)
284-
var _ ConnManagementScope = (*nullScope)(nil)
285-
var _ ConnScope = (*nullScope)(nil)
286-
var _ StreamManagementScope = (*nullScope)(nil)
287-
var _ StreamScope = (*nullScope)(nil)
274+
type NullResourceManager struct{}
275+
276+
var _ ResourceScope = (*NullScope)(nil)
277+
var _ ResourceScopeSpan = (*NullScope)(nil)
278+
var _ ServiceScope = (*NullScope)(nil)
279+
var _ ProtocolScope = (*NullScope)(nil)
280+
var _ PeerScope = (*NullScope)(nil)
281+
var _ ConnManagementScope = (*NullScope)(nil)
282+
var _ ConnScope = (*NullScope)(nil)
283+
var _ StreamManagementScope = (*NullScope)(nil)
284+
var _ StreamScope = (*NullScope)(nil)
288285

289286
// NullScope is a stub for tests and initialization of default values
290-
var NullScope = &nullScope{}
287+
type NullScope struct{}
291288

292-
func (n *nullResourceManager) ViewSystem(f func(ResourceScope) error) error {
293-
return f(NullScope)
289+
func (n *NullResourceManager) ViewSystem(f func(ResourceScope) error) error {
290+
return f(&NullScope{})
294291
}
295-
func (n *nullResourceManager) ViewTransient(f func(ResourceScope) error) error {
296-
return f(NullScope)
292+
func (n *NullResourceManager) ViewTransient(f func(ResourceScope) error) error {
293+
return f(&NullScope{})
297294
}
298-
func (n *nullResourceManager) ViewService(svc string, f func(ServiceScope) error) error {
299-
return f(NullScope)
295+
func (n *NullResourceManager) ViewService(svc string, f func(ServiceScope) error) error {
296+
return f(&NullScope{})
300297
}
301-
func (n *nullResourceManager) ViewProtocol(p protocol.ID, f func(ProtocolScope) error) error {
302-
return f(NullScope)
298+
func (n *NullResourceManager) ViewProtocol(p protocol.ID, f func(ProtocolScope) error) error {
299+
return f(&NullScope{})
303300
}
304-
func (n *nullResourceManager) ViewPeer(p peer.ID, f func(PeerScope) error) error {
305-
return f(NullScope)
301+
func (n *NullResourceManager) ViewPeer(p peer.ID, f func(PeerScope) error) error {
302+
return f(&NullScope{})
306303
}
307-
func (n *nullResourceManager) OpenConnection(dir Direction, usefd bool, endpoint multiaddr.Multiaddr) (ConnManagementScope, error) {
308-
return NullScope, nil
304+
func (n *NullResourceManager) OpenConnection(dir Direction, usefd bool, endpoint multiaddr.Multiaddr) (ConnManagementScope, error) {
305+
return &NullScope{}, nil
309306
}
310-
func (n *nullResourceManager) OpenStream(p peer.ID, dir Direction) (StreamManagementScope, error) {
311-
return NullScope, nil
307+
func (n *NullResourceManager) OpenStream(p peer.ID, dir Direction) (StreamManagementScope, error) {
308+
return &NullScope{}, nil
312309
}
313-
func (n *nullResourceManager) Close() error {
310+
func (n *NullResourceManager) Close() error {
314311
return nil
315312
}
316313

317-
func (n *nullScope) ReserveMemory(size int, prio uint8) error { return nil }
318-
func (n *nullScope) ReleaseMemory(size int) {}
319-
func (n *nullScope) Stat() ScopeStat { return ScopeStat{} }
320-
func (n *nullScope) BeginSpan() (ResourceScopeSpan, error) { return NullScope, nil }
321-
func (n *nullScope) Done() {}
322-
func (n *nullScope) Name() string { return "" }
323-
func (n *nullScope) Protocol() protocol.ID { return "" }
324-
func (n *nullScope) Peer() peer.ID { return "" }
325-
func (n *nullScope) PeerScope() PeerScope { return NullScope }
326-
func (n *nullScope) SetPeer(peer.ID) error { return nil }
327-
func (n *nullScope) ProtocolScope() ProtocolScope { return NullScope }
328-
func (n *nullScope) SetProtocol(proto protocol.ID) error { return nil }
329-
func (n *nullScope) ServiceScope() ServiceScope { return NullScope }
330-
func (n *nullScope) SetService(srv string) error { return nil }
314+
func (n *NullScope) ReserveMemory(size int, prio uint8) error { return nil }
315+
func (n *NullScope) ReleaseMemory(size int) {}
316+
func (n *NullScope) Stat() ScopeStat { return ScopeStat{} }
317+
func (n *NullScope) BeginSpan() (ResourceScopeSpan, error) { return &NullScope{}, nil }
318+
func (n *NullScope) Done() {}
319+
func (n *NullScope) Name() string { return "" }
320+
func (n *NullScope) Protocol() protocol.ID { return "" }
321+
func (n *NullScope) Peer() peer.ID { return "" }
322+
func (n *NullScope) PeerScope() PeerScope { return &NullScope{} }
323+
func (n *NullScope) SetPeer(peer.ID) error { return nil }
324+
func (n *NullScope) ProtocolScope() ProtocolScope { return &NullScope{} }
325+
func (n *NullScope) SetProtocol(proto protocol.ID) error { return nil }
326+
func (n *NullScope) ServiceScope() ServiceScope { return &NullScope{} }
327+
func (n *NullScope) SetService(srv string) error { return nil }

p2p/net/mock/mock_conn.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,5 +189,5 @@ func (c *conn) Stat() network.ConnStats {
189189
}
190190

191191
func (c *conn) Scope() network.ConnScope {
192-
return network.NullScope
192+
return &network.NullScope{}
193193
}

p2p/net/mock/mock_peernet.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,5 +370,5 @@ func (pn *peernet) notifyAll(notification func(f network.Notifiee)) {
370370
}
371371

372372
func (pn *peernet) ResourceManager() network.ResourceManager {
373-
return network.NullResourceManager
373+
return &network.NullResourceManager{}
374374
}

p2p/net/mock/mock_stream.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ func (s *stream) transport() {
287287
}
288288

289289
func (s *stream) Scope() network.StreamScope {
290-
return network.NullScope
290+
return &network.NullScope{}
291291
}
292292

293293
func (s *stream) cancelWrite(err error) {

p2p/net/swarm/swarm.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ func NewSwarm(local peer.ID, peers peerstore.Peerstore, opts ...Option) (*Swarm,
178178
}
179179
}
180180
if s.rcmgr == nil {
181-
s.rcmgr = network.NullResourceManager
181+
s.rcmgr = &network.NullResourceManager{}
182182
}
183183

184184
s.dsync = newDialSync(s.dialWorkerLoop)

p2p/net/swarm/swarm_dial_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func TestAddrsForDial(t *testing.T) {
4545
ps.AddPrivKey(id, priv)
4646
t.Cleanup(func() { ps.Close() })
4747

48-
tpt, err := websocket.New(nil, network.NullResourceManager)
48+
tpt, err := websocket.New(nil, &network.NullResourceManager{})
4949
require.NoError(t, err)
5050
s, err := NewSwarm(id, ps, WithMultiaddrResolver(resolver))
5151
require.NoError(t, err)
@@ -81,7 +81,7 @@ func newTestSwarmWithResolver(t *testing.T, resolver *madns.Resolver) *Swarm {
8181
})
8282

8383
// Add a tcp transport so that we know we can dial a tcp multiaddr and we don't filter it out.
84-
tpt, err := tcp.NewTCPTransport(nil, network.NullResourceManager)
84+
tpt, err := tcp.NewTCPTransport(nil, &network.NullResourceManager{})
8585
require.NoError(t, err)
8686
err = s.AddTransport(tpt)
8787
require.NoError(t, err)

p2p/net/upgrader/listener_test.go

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func TestAcceptSingleConn(t *testing.T) {
5656
ln := createListener(t, u)
5757
defer ln.Close()
5858

59-
cconn, err := dial(t, u, ln.Multiaddr(), id, network.NullScope)
59+
cconn, err := dial(t, u, ln.Multiaddr(), id, &network.NullScope{})
6060
require.NoError(err)
6161

6262
sconn, err := ln.Accept()
@@ -80,7 +80,7 @@ func TestAcceptMultipleConns(t *testing.T) {
8080
}()
8181

8282
for i := 0; i < 10; i++ {
83-
cconn, err := dial(t, u, ln.Multiaddr(), id, network.NullScope)
83+
cconn, err := dial(t, u, ln.Multiaddr(), id, &network.NullScope{})
8484
require.NoError(err)
8585
toClose = append(toClose, cconn)
8686

@@ -104,7 +104,7 @@ func TestConnectionsClosedIfNotAccepted(t *testing.T) {
104104
ln := createListener(t, u)
105105
defer ln.Close()
106106

107-
conn, err := dial(t, u, ln.Multiaddr(), id, network.NullScope)
107+
conn, err := dial(t, u, ln.Multiaddr(), id, &network.NullScope{})
108108
require.NoError(err)
109109

110110
errCh := make(chan error)
@@ -143,7 +143,7 @@ func TestFailedUpgradeOnListen(t *testing.T) {
143143
errCh <- err
144144
}()
145145

146-
_, err := dial(t, u, ln.Multiaddr(), id, network.NullScope)
146+
_, err := dial(t, u, ln.Multiaddr(), id, &network.NullScope{})
147147
require.Error(err)
148148

149149
// close the listener.
@@ -177,7 +177,7 @@ func TestListenerClose(t *testing.T) {
177177
require.Contains(err.Error(), "use of closed network connection")
178178

179179
// doesn't accept new connections when it is closed
180-
_, err = dial(t, u, ln.Multiaddr(), peer.ID("1"), network.NullScope)
180+
_, err = dial(t, u, ln.Multiaddr(), peer.ID("1"), &network.NullScope{})
181181
require.Error(err)
182182
}
183183

@@ -189,7 +189,7 @@ func TestListenerCloseClosesQueued(t *testing.T) {
189189

190190
var conns []transport.CapableConn
191191
for i := 0; i < 10; i++ {
192-
conn, err := dial(t, upgrader, ln.Multiaddr(), id, network.NullScope)
192+
conn, err := dial(t, upgrader, ln.Multiaddr(), id, &network.NullScope{})
193193
require.NoError(err)
194194
conns = append(conns, conn)
195195
}
@@ -249,7 +249,7 @@ func TestConcurrentAccept(t *testing.T) {
249249
go func() {
250250
defer wg.Done()
251251

252-
conn, err := dial(t, u, ln.Multiaddr(), id, network.NullScope)
252+
conn, err := dial(t, u, ln.Multiaddr(), id, &network.NullScope{})
253253
if err != nil {
254254
errCh <- err
255255
return
@@ -279,7 +279,7 @@ func TestAcceptQueueBacklogged(t *testing.T) {
279279
// setup AcceptQueueLength connections, but don't accept any of them
280280
var counter int32 // to be used atomically
281281
doDial := func() {
282-
conn, err := dial(t, u, ln.Multiaddr(), id, network.NullScope)
282+
conn, err := dial(t, u, ln.Multiaddr(), id, &network.NullScope{})
283283
require.NoError(err)
284284
atomic.AddInt32(&counter, 1)
285285
t.Cleanup(func() { conn.Close() })
@@ -315,36 +315,36 @@ func TestListenerConnectionGater(t *testing.T) {
315315
defer ln.Close()
316316

317317
// no gating.
318-
conn, err := dial(t, u, ln.Multiaddr(), id, network.NullScope)
318+
conn, err := dial(t, u, ln.Multiaddr(), id, &network.NullScope{})
319319
require.NoError(err)
320320
require.False(conn.IsClosed())
321321
_ = conn.Close()
322322

323323
// rejecting after handshake.
324324
testGater.BlockSecured(true)
325325
testGater.BlockAccept(false)
326-
conn, err = dial(t, u, ln.Multiaddr(), "invalid", network.NullScope)
326+
conn, err = dial(t, u, ln.Multiaddr(), "invalid", &network.NullScope{})
327327
require.Error(err)
328328
require.Nil(conn)
329329

330330
// rejecting on accept will trigger firupgrader.
331331
testGater.BlockSecured(true)
332332
testGater.BlockAccept(true)
333-
conn, err = dial(t, u, ln.Multiaddr(), "invalid", network.NullScope)
333+
conn, err = dial(t, u, ln.Multiaddr(), "invalid", &network.NullScope{})
334334
require.Error(err)
335335
require.Nil(conn)
336336

337337
// rejecting only on acceptance.
338338
testGater.BlockSecured(false)
339339
testGater.BlockAccept(true)
340-
conn, err = dial(t, u, ln.Multiaddr(), "invalid", network.NullScope)
340+
conn, err = dial(t, u, ln.Multiaddr(), "invalid", &network.NullScope{})
341341
require.Error(err)
342342
require.Nil(conn)
343343

344344
// back to normal
345345
testGater.BlockSecured(false)
346346
testGater.BlockAccept(false)
347-
conn, err = dial(t, u, ln.Multiaddr(), id, network.NullScope)
347+
conn, err = dial(t, u, ln.Multiaddr(), id, &network.NullScope{})
348348
require.NoError(err)
349349
require.False(conn.IsClosed())
350350
_ = conn.Close()
@@ -366,7 +366,7 @@ func TestListenerResourceManagement(t *testing.T) {
366366
connScope.EXPECT().PeerScope(),
367367
)
368368

369-
cconn, err := dial(t, upgrader, ln.Multiaddr(), id, network.NullScope)
369+
cconn, err := dial(t, upgrader, ln.Multiaddr(), id, &network.NullScope{})
370370
require.NoError(t, err)
371371
defer cconn.Close()
372372

@@ -384,7 +384,7 @@ func TestListenerResourceManagementDenied(t *testing.T) {
384384
ln := createListener(t, upgrader)
385385

386386
rcmgr.EXPECT().OpenConnection(network.DirInbound, true, gomock.Not(ln.Multiaddr())).Return(nil, errors.New("nope"))
387-
_, err := dial(t, upgrader, ln.Multiaddr(), id, network.NullScope)
387+
_, err := dial(t, upgrader, ln.Multiaddr(), id, &network.NullScope{})
388388
require.Error(t, err)
389389

390390
done := make(chan struct{})

p2p/net/upgrader/upgrader.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func New(secureMuxer sec.SecureMuxer, muxer network.Multiplexer, opts ...Option)
9090
}
9191
}
9292
if u.rcmgr == nil {
93-
u.rcmgr = network.NullResourceManager
93+
u.rcmgr = &network.NullResourceManager{}
9494
}
9595
return u, nil
9696
}

p2p/net/upgrader/upgrader_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -121,21 +121,21 @@ func TestOutboundConnectionGating(t *testing.T) {
121121

122122
testGater := &testGater{}
123123
_, dialUpgrader := createUpgrader(t, upgrader.WithConnectionGater(testGater))
124-
conn, err := dial(t, dialUpgrader, ln.Multiaddr(), id, network.NullScope)
124+
conn, err := dial(t, dialUpgrader, ln.Multiaddr(), id, &network.NullScope{})
125125
require.NoError(err)
126126
require.NotNil(conn)
127127
_ = conn.Close()
128128

129129
// blocking accepts doesn't affect the dialling side, only the listener.
130130
testGater.BlockAccept(true)
131-
conn, err = dial(t, dialUpgrader, ln.Multiaddr(), id, network.NullScope)
131+
conn, err = dial(t, dialUpgrader, ln.Multiaddr(), id, &network.NullScope{})
132132
require.NoError(err)
133133
require.NotNil(conn)
134134
_ = conn.Close()
135135

136136
// now let's block all connections after being secured.
137137
testGater.BlockSecured(true)
138-
conn, err = dial(t, dialUpgrader, ln.Multiaddr(), id, network.NullScope)
138+
conn, err = dial(t, dialUpgrader, ln.Multiaddr(), id, &network.NullScope{})
139139
require.Error(err)
140140
require.Contains(err.Error(), "gater rejected connection")
141141
require.Nil(conn)
@@ -153,7 +153,7 @@ func TestOutboundResourceManagement(t *testing.T) {
153153
gomock.InOrder(
154154
connScope.EXPECT().PeerScope(),
155155
connScope.EXPECT().SetPeer(id),
156-
connScope.EXPECT().PeerScope().Return(network.NullScope),
156+
connScope.EXPECT().PeerScope().Return(&network.NullScope{}),
157157
)
158158
_, dialUpgrader := createUpgrader(t)
159159
conn, err := dial(t, dialUpgrader, ln.Multiaddr(), id, connScope)
@@ -174,7 +174,7 @@ func TestOutboundResourceManagement(t *testing.T) {
174174
gomock.InOrder(
175175
connScope.EXPECT().PeerScope(),
176176
connScope.EXPECT().SetPeer(id),
177-
connScope.EXPECT().PeerScope().Return(network.NullScope),
177+
connScope.EXPECT().PeerScope().Return(&network.NullScope{}),
178178
connScope.EXPECT().Done(),
179179
)
180180
_, dialUpgrader := createUpgrader(t)

p2p/protocol/circuitv2/client/reservation_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func TestReservationFailures(t *testing.T) {
8989
host.SetStreamHandler(proto.ProtoIDv2Hop, tc.streamHandler)
9090
}
9191

92-
cl, err := libp2p.New(libp2p.ResourceManager(network.NullResourceManager))
92+
cl, err := libp2p.New(libp2p.ResourceManager(&network.NullResourceManager{}))
9393
require.NoError(t, err)
9494
defer cl.Close()
9595
_, err = client.Reserve(context.Background(), cl, peer.AddrInfo{ID: host.ID(), Addrs: host.Addrs()})

0 commit comments

Comments
 (0)