feat: integrating waku_disconnect_all_peers (#79)

This commit is contained in:
gabrielmer 2025-06-05 17:25:26 +02:00 committed by GitHub
parent 7e114d44c8
commit 34e45fc08f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 137 additions and 0 deletions

View File

@ -207,6 +207,12 @@ package waku
resp); resp);
} }
static void cGoWakuDisconnectAllPeers(void* wakuCtx, void* resp) {
waku_disconnect_all_peers(wakuCtx,
(WakuCallBack) GoCallback,
resp);
}
static void cGoWakuListenAddresses(void* wakuCtx, void* resp) { static void cGoWakuListenAddresses(void* wakuCtx, void* resp) {
waku_listen_addresses(wakuCtx, (WakuCallBack) GoCallback, resp); waku_listen_addresses(wakuCtx, (WakuCallBack) GoCallback, resp);
} }
@ -636,6 +642,23 @@ func (n *WakuNode) DisconnectPeerByID(peerID peer.ID) error {
return errors.New(errMsg) return errors.New(errMsg)
} }
func (n *WakuNode) DisconnectAllPeers() error {
wg := sync.WaitGroup{}
var resp = C.allocResp(unsafe.Pointer(&wg))
defer C.freeResp(resp)
wg.Add(1)
C.cGoWakuDisconnectAllPeers(n.wakuCtx, resp)
wg.Wait()
if C.getRet(resp) == C.RET_OK {
return nil
}
errMsg := "error DisconnectAllPeers: " + C.GoStringN(C.getMyCharPtr(resp), C.int(C.getMyCharLen(resp)))
return errors.New(errMsg)
}
func (n *WakuNode) GetConnectedPeers() (peer.IDSlice, error) { func (n *WakuNode) GetConnectedPeers() (peer.IDSlice, error) {
if n == nil { if n == nil {
err := errors.New("waku node is nil") err := errors.New("waku node is nil")

View File

@ -1031,3 +1031,117 @@ func TestOnline(t *testing.T) {
require.NoError(t, node1.Stop()) require.NoError(t, node1.Stop())
require.NoError(t, node2.Stop()) require.NoError(t, node2.Stop())
} }
func TestDisconnectAllPeers(t *testing.T) {
clusterId := uint16(16)
shardId := uint16(64)
tcpPort, udpPort, err := GetFreePortIfNeeded(0, 0)
require.NoError(t, err)
// start node1
wakuConfig1 := common.WakuConfig{
Relay: true,
LogLevel: "DEBUG",
Discv5Discovery: false,
ClusterID: clusterId,
Shards: []uint16{shardId},
Discv5UdpPort: udpPort,
TcpPort: tcpPort,
}
node1, err := NewWakuNode(&wakuConfig1, "node1")
require.NoError(t, err)
require.NoError(t, node1.Start())
defer node1.Stop()
tcpPort, udpPort, err = GetFreePortIfNeeded(0, 0)
require.NoError(t, err)
// start node2
wakuConfig2 := common.WakuConfig{
Relay: true,
LogLevel: "DEBUG",
Discv5Discovery: false,
ClusterID: clusterId,
Shards: []uint16{shardId},
Discv5UdpPort: udpPort,
TcpPort: tcpPort,
}
node2, err := NewWakuNode(&wakuConfig2, "node2")
require.NoError(t, err)
require.NoError(t, node2.Start())
defer node2.Stop()
multiaddr2, err := node2.ListenAddresses()
require.NoError(t, err)
require.NotNil(t, multiaddr2)
require.True(t, len(multiaddr2) > 0)
tcpPort, udpPort, err = GetFreePortIfNeeded(0, 0)
require.NoError(t, err)
// start node3
wakuConfig3 := common.WakuConfig{
Relay: true,
LogLevel: "DEBUG",
Discv5Discovery: false,
ClusterID: clusterId,
Shards: []uint16{shardId},
Discv5UdpPort: udpPort,
TcpPort: tcpPort,
}
node3, err := NewWakuNode(&wakuConfig3, "node3")
require.NoError(t, err)
require.NoError(t, node3.Start())
defer node3.Stop()
multiaddr3, err := node3.ListenAddresses()
require.NoError(t, err)
require.NotNil(t, multiaddr3)
require.True(t, len(multiaddr3) > 0)
tcpPort, udpPort, err = GetFreePortIfNeeded(0, 0)
require.NoError(t, err)
// start node4
wakuConfig4 := common.WakuConfig{
Relay: true,
LogLevel: "DEBUG",
Discv5Discovery: false,
ClusterID: clusterId,
Shards: []uint16{shardId},
Discv5UdpPort: udpPort,
TcpPort: tcpPort,
}
node4, err := NewWakuNode(&wakuConfig4, "node4")
require.NoError(t, err)
require.NoError(t, node4.Start())
defer node4.Stop()
multiaddr4, err := node4.ListenAddresses()
require.NoError(t, err)
require.NotNil(t, multiaddr4)
require.True(t, len(multiaddr4) > 0)
to_dial := []ma.Multiaddr{multiaddr2[0], multiaddr3[0], multiaddr4[0]}
for _, addr := range to_dial {
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
defer cancel()
err = node1.Connect(ctx, addr)
require.NoError(t, err)
}
time.Sleep(1 * time.Second)
peerCount1, err := node1.GetNumConnectedPeers()
require.NoError(t, err)
require.True(t, peerCount1 == 3, "node1 should have 3 peers")
err = node1.DisconnectAllPeers()
require.NoError(t, err)
time.Sleep(1 * time.Second)
peerCount1, err = node1.GetNumConnectedPeers()
require.NoError(t, err)
require.True(t, peerCount1 == 0, "node1 should have 0 peers")
}