diff --git a/waku/nwaku.go b/waku/nwaku.go index 5b47b88..6f08b07 100644 --- a/waku/nwaku.go +++ b/waku/nwaku.go @@ -1422,7 +1422,15 @@ func StartWakuNode(nodeName string, customCfg *WakuConfig) (*WakuNode, error) { var nodeCfg WakuConfig if customCfg == nil { + tcpPort, udpPort, err := GetFreePortIfNeeded(0, 0) + if err != nil { + Error("Failed to allocate unique ports: %v", err) + tcpPort, udpPort = 0, 0 // Fallback to OS-assigned ports + } + nodeCfg = DefaultWakuConfig + nodeCfg.TcpPort = tcpPort + nodeCfg.Discv5UdpPort = udpPort } else { nodeCfg = *customCfg } diff --git a/waku/peer_connections_test.go b/waku/peer_connections_test.go index 86a531b..1b3766e 100644 --- a/waku/peer_connections_test.go +++ b/waku/peer_connections_test.go @@ -1,6 +1,7 @@ package waku import ( + "slices" "testing" "time" @@ -11,49 +12,59 @@ import ( func TestDisconnectPeerNodes(t *testing.T) { Debug("Starting TestDisconnectPeerNodes") - // Create Node A nodeA, err := StartWakuNode("nodeA", nil) require.NoError(t, err, "Failed to start Node A") defer nodeA.StopAndDestroy() - // Create Node B nodeB, err := StartWakuNode("nodeB", nil) require.NoError(t, err, "Failed to start Node B") defer nodeB.StopAndDestroy() - // Connect Node A to Node B Debug("Connecting Node A to Node B") err = nodeA.ConnectPeer(nodeB) require.NoError(t, err, "Failed to connect nodes") - // Wait for 3 seconds + Debug("Verifying connection between Node A and Node B") + connectedPeers, err := nodeA.GetConnectedPeers() + require.NoError(t, err, "Failed to get connected peers for Node A") + nodeBPeerID, err := nodeB.PeerID() + require.NoError(t, err, "Failed to get PeerID for Node B") + require.True(t, slices.Contains(connectedPeers, nodeBPeerID), "Node B should be a peer of Node A before disconnection") + time.Sleep(3 * time.Second) - // Disconnect Node A from Node B Debug("Disconnecting Node A from Node B") err = nodeA.DisconnectPeer(nodeB) require.NoError(t, err, "Failed to disconnect nodes") + + Debug("Verifying disconnection between Node A and Node B") + connectedPeers, err = nodeA.GetConnectedPeers() + require.NoError(t, err, "Failed to get connected peers for Node A after disconnection") + require.False(t, slices.Contains(connectedPeers, nodeBPeerID), "Node B should no longer be a peer of Node A after disconnection") + + Debug("Test completed successfully: Node B was disconnected from Node A") } func TestConnectMultipleNodesToSingleNode(t *testing.T) { Debug("Starting TestConnectMultipleNodesToSingleNode") - Debug("Creating 3 nodes") - node1, err := StartWakuNode("Node1", nil) + Debug("Creating 3 nodes with automatically assigned ports") + + node1, err := StartWakuNode("node1", nil) require.NoError(t, err, "Failed to start Node 1") defer func() { Debug("Stopping and destroying Node 1") node1.StopAndDestroy() }() - node2, err := StartWakuNode("Node2", nil) + node2, err := StartWakuNode("node2", nil) require.NoError(t, err, "Failed to start Node 2") defer func() { Debug("Stopping and destroying Node 2") node2.StopAndDestroy() }() - node3, err := StartWakuNode("Node3", nil) + node3, err := StartWakuNode("node3", nil) require.NoError(t, err, "Failed to start Node 3") defer func() { Debug("Stopping and destroying Node 3") @@ -68,5 +79,16 @@ func TestConnectMultipleNodesToSingleNode(t *testing.T) { err = node3.ConnectPeer(node1) require.NoError(t, err, "Failed to connect Node 3 to Node 1") - Debug("Test completed successfully: multiple nodes connected to a single node") + Debug("Verifying connected peers for Node 3") + connectedPeers, err := node3.GetConnectedPeers() + require.NoError(t, err, "Failed to get connected peers for Node 3") + node1PeerID, err := node1.PeerID() + require.NoError(t, err, "Failed to get PeerID for Node 1") + node2PeerID, err := node2.PeerID() + require.NoError(t, err, "Failed to get PeerID for Node 2") + + require.True(t, slices.Contains(connectedPeers, node1PeerID), "Node 1 should be a peer of Node 3") + require.True(t, slices.Contains(connectedPeers, node2PeerID), "Node 2 should be a peer of Node 3") + + Debug("Test completed successfully: multiple nodes connected to a single node and verified peers") }