mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-11 02:35:18 +00:00
38 lines
693 B
Go
38 lines
693 B
Go
|
package testutils
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
// FindFreePort attempts to find an unused tcp port
|
||
|
func FindFreePort(t *testing.T, host string, maxAttempts int) (int, error) {
|
||
|
t.Helper()
|
||
|
|
||
|
if host == "" {
|
||
|
host = "localhost"
|
||
|
}
|
||
|
|
||
|
for i := 0; i < maxAttempts; i++ {
|
||
|
addr, err := net.ResolveTCPAddr("tcp", net.JoinHostPort(host, "0"))
|
||
|
if err != nil {
|
||
|
t.Logf("unable to resolve tcp addr: %v", err)
|
||
|
continue
|
||
|
}
|
||
|
l, err := net.ListenTCP("tcp", addr)
|
||
|
if err != nil {
|
||
|
l.Close()
|
||
|
t.Logf("unable to listen on addr %q: %v", addr, err)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
port := l.Addr().(*net.TCPAddr).Port
|
||
|
l.Close()
|
||
|
return port, nil
|
||
|
|
||
|
}
|
||
|
|
||
|
return 0, fmt.Errorf("no free port found")
|
||
|
}
|