mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 14:52:17 +00:00
cmn: GetFreePort (#3255)
This commit is contained in:
parent
1809efa350
commit
4429826229
@ -24,3 +24,20 @@ func ProtocolAndAddress(listenAddr string) (string, string) {
|
|||||||
}
|
}
|
||||||
return protocol, address
|
return protocol, address
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetFreePort gets a free port from the operating system.
|
||||||
|
// Ripped from https://github.com/phayes/freeport.
|
||||||
|
// BSD-licensed.
|
||||||
|
func GetFreePort() (int, error) {
|
||||||
|
addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
l, err := net.ListenTCP("tcp", addr)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
defer l.Close()
|
||||||
|
return l.Addr().(*net.TCPAddr).Port, nil
|
||||||
|
}
|
||||||
|
@ -247,35 +247,25 @@ func testNodeInfo(id ID, name string) NodeInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func testNodeInfoWithNetwork(id ID, name, network string) NodeInfo {
|
func testNodeInfoWithNetwork(id ID, name, network string) NodeInfo {
|
||||||
port, err := getFreePort()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return DefaultNodeInfo{
|
return DefaultNodeInfo{
|
||||||
ProtocolVersion: defaultProtocolVersion,
|
ProtocolVersion: defaultProtocolVersion,
|
||||||
ID_: id,
|
ID_: id,
|
||||||
ListenAddr: fmt.Sprintf("127.0.0.1:%d", port),
|
ListenAddr: fmt.Sprintf("127.0.0.1:%d", getFreePort()),
|
||||||
Network: network,
|
Network: network,
|
||||||
Version: "1.2.3-rc0-deadbeef",
|
Version: "1.2.3-rc0-deadbeef",
|
||||||
Channels: []byte{testCh},
|
Channels: []byte{testCh},
|
||||||
Moniker: name,
|
Moniker: name,
|
||||||
Other: DefaultNodeInfoOther{
|
Other: DefaultNodeInfoOther{
|
||||||
TxIndex: "on",
|
TxIndex: "on",
|
||||||
RPCAddress: fmt.Sprintf("127.0.0.1:%d", port),
|
RPCAddress: fmt.Sprintf("127.0.0.1:%d", getFreePort()),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func getFreePort() (int, error) {
|
func getFreePort() int {
|
||||||
addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
|
port, err := cmn.GetFreePort()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
panic(err)
|
||||||
}
|
}
|
||||||
|
return port
|
||||||
l, err := net.ListenTCP("tcp", addr)
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
defer l.Close()
|
|
||||||
return l.Addr().(*net.TCPAddr).Port, nil
|
|
||||||
}
|
}
|
||||||
|
@ -11,9 +11,9 @@ import (
|
|||||||
"github.com/tendermint/tendermint/libs/log"
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
|
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
cmn "github.com/tendermint/tendermint/libs/common"
|
|
||||||
|
|
||||||
cfg "github.com/tendermint/tendermint/config"
|
cfg "github.com/tendermint/tendermint/config"
|
||||||
|
cmn "github.com/tendermint/tendermint/libs/common"
|
||||||
nm "github.com/tendermint/tendermint/node"
|
nm "github.com/tendermint/tendermint/node"
|
||||||
"github.com/tendermint/tendermint/p2p"
|
"github.com/tendermint/tendermint/p2p"
|
||||||
"github.com/tendermint/tendermint/privval"
|
"github.com/tendermint/tendermint/privval"
|
||||||
@ -64,14 +64,17 @@ func makePathname() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func randPort() int {
|
func randPort() int {
|
||||||
return int(cmn.RandUint16()/2 + 10000)
|
port, err := cmn.GetFreePort()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return port
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeAddrs() (string, string, string) {
|
func makeAddrs() (string, string, string) {
|
||||||
start := randPort()
|
return fmt.Sprintf("tcp://0.0.0.0:%d", randPort()),
|
||||||
return fmt.Sprintf("tcp://0.0.0.0:%d", start),
|
fmt.Sprintf("tcp://0.0.0.0:%d", randPort()),
|
||||||
fmt.Sprintf("tcp://0.0.0.0:%d", start+1),
|
fmt.Sprintf("tcp://0.0.0.0:%d", randPort())
|
||||||
fmt.Sprintf("tcp://0.0.0.0:%d", start+2)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetConfig returns a config for the test cases as a singleton
|
// GetConfig returns a config for the test cases as a singleton
|
||||||
|
Loading…
x
Reference in New Issue
Block a user