Skip to content

Commit 40caed5

Browse files
rvagghannahhoward
authored andcommitted
test: ensure available port for test server
Closes: #293
1 parent 15a3116 commit 40caed5

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

pkg/internal/itest/testpeer/generator.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package testpeer
33
import (
44
"bytes"
55
"context"
6+
"errors"
67
"fmt"
78
"io"
9+
"net"
810
"net/http"
911
"strings"
1012
"testing"
@@ -87,7 +89,7 @@ func (g *TestPeerGenerator) Close() error {
8789
// NextBitswap generates a new test peer with bitswap + dependencies
8890
func (g *TestPeerGenerator) NextBitswap() TestPeer {
8991
g.seq++
90-
p, err := p2ptestutil.RandTestBogusIdentity()
92+
p, err := RandTestPeerIdentity()
9193
require.NoError(g.t, err)
9294
tp, err := NewTestBitswapPeer(g.ctx, g.mn, p, g.netOptions, g.bsOptions)
9395
require.NoError(g.t, err)
@@ -457,4 +459,28 @@ func MockIpfsHandler(ctx context.Context, lsys linking.LinkSystem) func(http.Res
457459
}
458460
}
459461

462+
// RandTestPeerIdentity is a wrapper around
463+
// github.com/libp2p/go-libp2p-testing/netutil/RandTestBogusIdentity that
464+
// ensures the returned identity has an available port. The identity generated
465+
// by netutil/RandTestBogusIdentity is not guaranteed to have an available port,
466+
// so we use a net.Listen to check if the port is available and try again if
467+
// it's not.
468+
func RandTestPeerIdentity() (tnet.Identity, error) {
469+
for i := 0; i < 10; i++ {
470+
id, err := p2ptestutil.RandTestBogusIdentity()
471+
if err != nil {
472+
return nil, err
473+
}
474+
addr := id.Address()
475+
port := strings.Split(addr.String(), "/")[4]
476+
// check if 127.0.0.1:port is available or not
477+
ln, err := net.Listen("tcp4", "127.0.0.1:"+port)
478+
if err == nil {
479+
ln.Close()
480+
return id, nil
481+
} // else assume it's in use and try again
482+
}
483+
return nil, errors.New("failed to find an available port")
484+
}
485+
460486
func visitNoop(p traversal.Progress, n datamodel.Node, vr traversal.VisitReason) error { return nil }

0 commit comments

Comments
 (0)