device: get free port when testing

Signed-off-by: Sina Siadat <siadat@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
Sina Siadat 2020-07-30 20:50:49 +04:30 committed by Jason A. Donenfeld
parent 507f148e1c
commit bc3f505efa

View File

@ -8,6 +8,7 @@ package device
import ( import (
"bufio" "bufio"
"bytes" "bytes"
"fmt"
"net" "net"
"strings" "strings"
"testing" "testing"
@ -16,16 +17,30 @@ import (
"golang.zx2c4.com/wireguard/tun/tuntest" "golang.zx2c4.com/wireguard/tun/tuntest"
) )
func getFreePort(t *testing.T) string {
l, err := net.ListenPacket("udp", "localhost:0")
if err != nil {
t.Fatal(err)
}
defer l.Close()
return fmt.Sprintf("%d", l.LocalAddr().(*net.UDPAddr).Port)
}
func TestTwoDevicePing(t *testing.T) { func TestTwoDevicePing(t *testing.T) {
// TODO(crawshaw): pick unused ports on localhost port1 := getFreePort(t)
port2 := getFreePort(t)
cfg1 := `private_key=481eb0d8113a4a5da532d2c3e9c14b53c8454b34ab109676f6b58c2245e37b58 cfg1 := `private_key=481eb0d8113a4a5da532d2c3e9c14b53c8454b34ab109676f6b58c2245e37b58
listen_port=53511 listen_port={{PORT1}}
replace_peers=true replace_peers=true
public_key=f70dbb6b1b92a1dde1c783b297016af3f572fef13b0abb16a2623d89a58e9725 public_key=f70dbb6b1b92a1dde1c783b297016af3f572fef13b0abb16a2623d89a58e9725
protocol_version=1 protocol_version=1
replace_allowed_ips=true replace_allowed_ips=true
allowed_ip=1.0.0.2/32 allowed_ip=1.0.0.2/32
endpoint=127.0.0.1:53512` endpoint=127.0.0.1:{{PORT2}}`
cfg1 = strings.ReplaceAll(cfg1, "{{PORT1}}", port1)
cfg1 = strings.ReplaceAll(cfg1, "{{PORT2}}", port2)
tun1 := tuntest.NewChannelTUN() tun1 := tuntest.NewChannelTUN()
dev1 := NewDevice(tun1.TUN(), NewLogger(LogLevelDebug, "dev1: ")) dev1 := NewDevice(tun1.TUN(), NewLogger(LogLevelDebug, "dev1: "))
dev1.Up() dev1.Up()
@ -35,13 +50,16 @@ endpoint=127.0.0.1:53512`
} }
cfg2 := `private_key=98c7989b1661a0d64fd6af3502000f87716b7c4bbcf00d04fc6073aa7b539768 cfg2 := `private_key=98c7989b1661a0d64fd6af3502000f87716b7c4bbcf00d04fc6073aa7b539768
listen_port=53512 listen_port={{PORT2}}
replace_peers=true replace_peers=true
public_key=49e80929259cebdda4f322d6d2b1a6fad819d603acd26fd5d845e7a123036427 public_key=49e80929259cebdda4f322d6d2b1a6fad819d603acd26fd5d845e7a123036427
protocol_version=1 protocol_version=1
replace_allowed_ips=true replace_allowed_ips=true
allowed_ip=1.0.0.1/32 allowed_ip=1.0.0.1/32
endpoint=127.0.0.1:53511` endpoint=127.0.0.1:{{PORT1}}`
cfg2 = strings.ReplaceAll(cfg2, "{{PORT1}}", port1)
cfg2 = strings.ReplaceAll(cfg2, "{{PORT2}}", port2)
tun2 := tuntest.NewChannelTUN() tun2 := tuntest.NewChannelTUN()
dev2 := NewDevice(tun2.TUN(), NewLogger(LogLevelDebug, "dev2: ")) dev2 := NewDevice(tun2.TUN(), NewLogger(LogLevelDebug, "dev2: "))
dev2.Up() dev2.Up()