36 lines
841 B
Go
36 lines
841 B
Go
package frp
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"fmt"
|
||
|
|
"net"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestAgentTunnelBindsLoopbackAndReleasesPort(t *testing.T) {
|
||
|
|
probe, err := net.Listen("tcp", "127.0.0.1:0")
|
||
|
|
if err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
port := probe.Addr().(*net.TCPAddr).Port
|
||
|
|
_ = probe.Close()
|
||
|
|
|
||
|
|
tunnel := newAgentTunnel(context.Background(), 1, port, SSHInstaller{})
|
||
|
|
if err := tunnel.Start(); err != nil {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
if _, err := net.Listen("tcp", fmt.Sprintf("127.0.0.1:%d", port)); err == nil {
|
||
|
|
t.Fatal("隧道启动后本地端口应已被占用")
|
||
|
|
}
|
||
|
|
state, _ := tunnel.State()
|
||
|
|
if state != "connected" {
|
||
|
|
t.Fatalf("state=%q, want connected", state)
|
||
|
|
}
|
||
|
|
tunnel.Stop()
|
||
|
|
if listener, err := net.Listen("tcp", fmt.Sprintf("127.0.0.1:%d", port)); err != nil {
|
||
|
|
t.Fatalf("隧道停止后端口未释放: %v", err)
|
||
|
|
} else {
|
||
|
|
_ = listener.Close()
|
||
|
|
}
|
||
|
|
}
|