diff --git a/Makefile b/Makefile index 407db739..769eaa37 100644 --- a/Makefile +++ b/Makefile @@ -33,9 +33,9 @@ gotest: go test -v ./utils/... alltest: gotest - cd ./test && ./run_test.sh && cd - + cd ./tests && ./run_test.sh && cd - go test -v ./tests/... - cd ./test && ./clean_test.sh && cd - + cd ./tests && ./clean_test.sh && cd - clean: rm -f ./bin/frpc diff --git a/Makefile.cross-compiles b/Makefile.cross-compiles index 196ea7f2..b749fbbc 100644 --- a/Makefile.cross-compiles +++ b/Makefile.cross-compiles @@ -1,28 +1,29 @@ export PATH := $(GOPATH)/bin:$(PATH) export GO15VENDOREXPERIMENT := 1 +LDFLAGS := -s -w all: build build: app app: - env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o ./frpc_darwin_amd64 ./cmd/frpc - env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o ./frps_darwin_amd64 ./cmd/frps - env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -o ./frpc_linux_386 ./cmd/frpc - env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -o ./frps_linux_386 ./cmd/frps - env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./frpc_linux_amd64 ./cmd/frpc - env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./frps_linux_amd64 ./cmd/frps - env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -o ./frpc_linux_arm ./cmd/frpc - env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -o ./frps_linux_arm ./cmd/frps - env CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -o ./frpc_windows_386.exe ./cmd/frpc - env CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -o ./frps_windows_386.exe ./cmd/frps - env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o ./frpc_windows_amd64.exe ./cmd/frpc - env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o ./frps_windows_amd64.exe ./cmd/frps - env CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -o ./frpc_linux_mips64 ./cmd/frpc - env CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -o ./frps_linux_mips64 ./cmd/frps - env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -o ./frpc_linux_mips64le ./cmd/frpc - env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -o ./frps_linux_mips64le ./cmd/frps - env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -o ./frpc_linux_mips ./cmd/frpc - env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -o ./frps_linux_mips ./cmd/frps - env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -o ./frpc_linux_mipsle ./cmd/frpc - env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -o ./frps_linux_mipsle ./cmd/frps + env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_darwin_amd64 ./cmd/frpc + env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_darwin_amd64 ./cmd/frps + env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_386 ./cmd/frpc + env CGO_ENABLED=0 GOOS=linux GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_386 ./cmd/frps + env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_amd64 ./cmd/frpc + env CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_amd64 ./cmd/frps + env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_arm ./cmd/frpc + env CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags "$(LDFLAGS)" -o ./frps_linux_arm ./cmd/frps + env CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frpc_windows_386.exe ./cmd/frpc + env CGO_ENABLED=0 GOOS=windows GOARCH=386 go build -ldflags "$(LDFLAGS)" -o ./frps_windows_386.exe ./cmd/frps + env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frpc_windows_amd64.exe ./cmd/frpc + env CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o ./frps_windows_amd64.exe ./cmd/frps + env CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips64 ./cmd/frpc + env CGO_ENABLED=0 GOOS=linux GOARCH=mips64 go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips64 ./cmd/frps + env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "$(LDFLAGS)" -o ./frpc_linux_mips64le ./cmd/frpc + env CGO_ENABLED=0 GOOS=linux GOARCH=mips64le go build -ldflags "$(LDFLAGS)" -o ./frps_linux_mips64le ./cmd/frps + env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -o -ldflags "$(LDFLAGS)" ./frpc_linux_mips ./cmd/frpc + env CGO_ENABLED=0 GOOS=linux GOARCH=mips go build -o -ldflags "$(LDFLAGS)" ./frps_linux_mips ./cmd/frps + env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -o -ldflags "$(LDFLAGS)" ./frpc_linux_mipsle ./cmd/frpc + env CGO_ENABLED=0 GOOS=linux GOARCH=mipsle go build -o -ldflags "$(LDFLAGS)" ./frps_linux_mipsle ./cmd/frps diff --git a/tests/conf/auto_test_frpc.ini b/tests/conf/auto_test_frpc.ini index 19e34175..8bdc44b2 100644 --- a/tests/conf/auto_test_frpc.ini +++ b/tests/conf/auto_test_frpc.ini @@ -21,3 +21,9 @@ local_port = 10702 use_encryption = true use_compression = true custom_domains = 127.0.0.1 + +[udp] +type = udp +local_ip = 127.0.0.1 +local_port = 10703 +remote_port = 10712 diff --git a/tests/echo_server.go b/tests/echo_server.go index 3b22c46f..82df23ce 100644 --- a/tests/echo_server.go +++ b/tests/echo_server.go @@ -26,6 +26,24 @@ func StartEchoServer() { } } +func StartUdpEchoServer() { + l, err := net.ListenUDP("127.0.0.1", 10703) + if err != nil { + fmt.Printf("udp echo server listen error: %v\n", err) + return + } + + for { + c, err := l.Accept() + if err != nil { + fmt.Printf("udp echo server accept error: %v\n", err) + return + } + + go echoWorker(c) + } +} + func echoWorker(c net.Conn) { br := bufio.NewReader(c) for { diff --git a/tests/func_test.go b/tests/func_test.go index 6c1422a6..b2ad7645 100644 --- a/tests/func_test.go +++ b/tests/func_test.go @@ -2,18 +2,21 @@ package tests import ( "bufio" + "bytes" "fmt" "io/ioutil" + "net" "net/http" "strings" "testing" "time" - "github.com/fatedier/frp/utils/net" + frpNet "github.com/fatedier/frp/utils/net" ) var ( ECHO_PORT int64 = 10711 + UDP_ECHO_PORT int64 = 10712 HTTP_PORT int64 = 10710 ECHO_TEST_STR string = "Hello World\n" HTTP_RES_STR string = "Hello World" @@ -21,12 +24,13 @@ var ( func init() { go StartEchoServer() + go StartUdpEchoServer() go StartHttpServer() time.Sleep(500 * time.Millisecond) } func TestEchoServer(t *testing.T) { - c, err := net.ConnectTcpServer(fmt.Sprintf("127.0.0.1:%d", ECHO_PORT)) + c, err := frpNet.ConnectTcpServer(fmt.Sprintf("127.0.0.1:%d", ECHO_PORT)) if err != nil { t.Fatalf("connect to echo server error: %v", err) } @@ -66,3 +70,28 @@ func TestHttpServer(t *testing.T) { t.Fatalf("http code from http server error [%d]", res.StatusCode) } } + +func TestUdpEchoServer(t *testing.T) { + addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:10712") + if err != nil { + t.Fatalf("do udp request error: %v", err) + } + conn, err := net.DialUDP("udp", nil, addr) + if err != nil { + t.Fatalf("dial udp server error: %v", err) + } + defer conn.Close() + _, err = conn.Write([]byte("hello frp\n")) + if err != nil { + t.Fatalf("write to udp server error: %v", err) + } + data := make([]byte, 20) + n, err := conn.Read(data) + if err != nil { + t.Fatalf("read from udp server error: %v", err) + } + + if string(bytes.TrimSpace(data[:n])) != "hello frp" { + t.Fatalf("message got from udp server error, get %s", string(data[:n-1])) + } +} diff --git a/tests/run_test.sh b/tests/run_test.sh index cc171f77..5ef490a6 100755 --- a/tests/run_test.sh +++ b/tests/run_test.sh @@ -1,34 +1,8 @@ #!/bin/bash -./bin/echo_server & -./bin/http_server & ./../bin/frps -c ./conf/auto_test_frps.ini & sleep 1 ./../bin/frpc -c ./conf/auto_test_frpc.ini & # wait until proxies are connected -for((i=1; i<15; i++)) -do - sleep 1 - str=`ss -ant|grep 10700|grep LISTEN` - if [ -z "${str}" ]; then - echo "wait" - continue - fi - - str=`ss -ant|grep 10710|grep LISTEN` - if [ -z "${str}" ]; then - echo "wait" - continue - fi - - str=`ss -ant|grep 10711|grep LISTEN` - if [ -z "${str}" ]; then - echo "wait" - continue - fi - - break -done - -sleep 1 +sleep 2