mirror of https://github.com/hashicorp/packer
parent
f0a09ffa6b
commit
dbe5360262
@ -0,0 +1,30 @@
|
||||
package rpc
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
)
|
||||
|
||||
var portRangeMin int = 0
|
||||
var portRangeMax int = 0
|
||||
|
||||
// This sets the port range that the RPC stuff will use when creating
|
||||
// new temporary servers. Some RPC calls require the creation of temporary
|
||||
// RPC servers. These allow you to pick a range these bind to.
|
||||
func PortRange(min, max int) {
|
||||
portRangeMin = min
|
||||
portRangeMax = max
|
||||
}
|
||||
|
||||
// This finds an open port in the given range and returns a listener
|
||||
// bound to that port.
|
||||
func netListenerInRange(min, max int) net.Listener {
|
||||
for port := min; port <= max; port++ {
|
||||
l, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
|
||||
if err == nil {
|
||||
return l
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
package rpc
|
||||
|
||||
import (
|
||||
"cgl.tideland.biz/asserts"
|
||||
"net"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func addrPort(address net.Addr) string {
|
||||
parts := strings.Split(address.String(), ":")
|
||||
return parts[len(parts) - 1]
|
||||
}
|
||||
|
||||
func Test_netListenerInRange(t *testing.T) {
|
||||
assert := asserts.NewTestingAsserts(t, true)
|
||||
|
||||
// Verify it selects an open port
|
||||
L1000, err := net.Listen("tcp", ":10000")
|
||||
defer L1000.Close()
|
||||
assert.Nil(err, "should be able to bind to port 10000")
|
||||
|
||||
L := netListenerInRange(10000, 10005)
|
||||
assert.NotNil(L, "should have a listener")
|
||||
assert.Equal(addrPort(L.Addr()), "10001", "should bind to open port")
|
||||
|
||||
// Returns nil if there are no open ports
|
||||
L = netListenerInRange(10000, 10000)
|
||||
assert.Nil(L, "should not get a listener")
|
||||
}
|
||||
Loading…
Reference in new issue