mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-22 10:57:42 +08:00
* fix: harness tests random panic
Connecting nodes in parallel can cause TLS handshake failures. For each node, connect to the other nodes serially. It is not necessary to connect in parallel as it does not save any significant time.
Closes #10932
(cherry picked from commit ae068a8061)
59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package harness
|
|
|
|
import (
|
|
"sync"
|
|
|
|
. "github.com/ipfs/kubo/test/cli/testutils"
|
|
"github.com/multiformats/go-multiaddr"
|
|
)
|
|
|
|
// Nodes is a collection of Kubo nodes along with operations on groups of nodes.
|
|
type Nodes []*Node
|
|
|
|
func (n Nodes) Init(args ...string) Nodes {
|
|
ForEachPar(n, func(node *Node) { node.Init(args...) })
|
|
return n
|
|
}
|
|
|
|
func (n Nodes) ForEachPar(f func(*Node)) {
|
|
var wg sync.WaitGroup
|
|
for _, node := range n {
|
|
wg.Add(1)
|
|
node := node
|
|
go func() {
|
|
defer wg.Done()
|
|
f(node)
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
}
|
|
|
|
func (n Nodes) Connect() Nodes {
|
|
for i, node := range n {
|
|
for j, otherNode := range n {
|
|
if i == j {
|
|
continue
|
|
}
|
|
// Do not connect in parallel, because that can cause TLS handshake problems on some platforms.
|
|
node.Connect(otherNode)
|
|
}
|
|
}
|
|
for _, node := range n {
|
|
firstPeer := node.Peers()[0]
|
|
if _, err := firstPeer.ValueForProtocol(multiaddr.P_P2P); err != nil {
|
|
log.Panicf("unexpected state for node %d with peer ID %s: %s", node.ID, node.PeerID(), err)
|
|
}
|
|
}
|
|
return n
|
|
}
|
|
|
|
func (n Nodes) StartDaemons(args ...string) Nodes {
|
|
ForEachPar(n, func(node *Node) { node.StartDaemon(args...) })
|
|
return n
|
|
}
|
|
|
|
func (n Nodes) StopDaemons() Nodes {
|
|
ForEachPar(n, func(node *Node) { node.StopDaemon() })
|
|
return n
|
|
}
|