func_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package tests
  2. import (
  3. "bufio"
  4. "bytes"
  5. "fmt"
  6. "io/ioutil"
  7. "net"
  8. "net/http"
  9. "strings"
  10. "testing"
  11. "time"
  12. frpNet "github.com/fatedier/frp/utils/net"
  13. )
  14. var (
  15. ECHO_PORT int64 = 10711
  16. UDP_ECHO_PORT int64 = 10712
  17. HTTP_PORT int64 = 10710
  18. ECHO_TEST_STR string = "Hello World\n"
  19. HTTP_RES_STR string = "Hello World"
  20. )
  21. func init() {
  22. go StartEchoServer()
  23. go StartUdpEchoServer()
  24. go StartHttpServer()
  25. go StartUnixDomainServer()
  26. time.Sleep(500 * time.Millisecond)
  27. }
  28. func TestEchoServer(t *testing.T) {
  29. c, err := frpNet.ConnectTcpServer(fmt.Sprintf("127.0.0.1:%d", ECHO_PORT))
  30. if err != nil {
  31. t.Fatalf("connect to echo server error: %v", err)
  32. }
  33. timer := time.Now().Add(time.Duration(5) * time.Second)
  34. c.SetDeadline(timer)
  35. c.Write([]byte(ECHO_TEST_STR + "\n"))
  36. br := bufio.NewReader(c)
  37. buf, err := br.ReadString('\n')
  38. if err != nil {
  39. t.Fatalf("read from echo server error: %v", err)
  40. }
  41. if ECHO_TEST_STR != buf {
  42. t.Fatalf("content error, send [%s], get [%s]", strings.Trim(ECHO_TEST_STR, "\n"), strings.Trim(buf, "\n"))
  43. }
  44. }
  45. func TestHttpServer(t *testing.T) {
  46. client := &http.Client{}
  47. req, _ := http.NewRequest("GET", fmt.Sprintf("http://127.0.0.1:%d", HTTP_PORT), nil)
  48. res, err := client.Do(req)
  49. if err != nil {
  50. t.Fatalf("do http request error: %v", err)
  51. }
  52. if res.StatusCode == 200 {
  53. body, err := ioutil.ReadAll(res.Body)
  54. if err != nil {
  55. t.Fatalf("read from http server error: %v", err)
  56. }
  57. bodystr := string(body)
  58. if bodystr != HTTP_RES_STR {
  59. t.Fatalf("content from http server error [%s], correct string is [%s]", bodystr, HTTP_RES_STR)
  60. }
  61. } else {
  62. t.Fatalf("http code from http server error [%d]", res.StatusCode)
  63. }
  64. }
  65. func TestUdpEchoServer(t *testing.T) {
  66. addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:10712")
  67. if err != nil {
  68. t.Fatalf("do udp request error: %v", err)
  69. }
  70. conn, err := net.DialUDP("udp", nil, addr)
  71. if err != nil {
  72. t.Fatalf("dial udp server error: %v", err)
  73. }
  74. defer conn.Close()
  75. _, err = conn.Write([]byte("hello frp\n"))
  76. if err != nil {
  77. t.Fatalf("write to udp server error: %v", err)
  78. }
  79. data := make([]byte, 20)
  80. n, err := conn.Read(data)
  81. if err != nil {
  82. t.Fatalf("read from udp server error: %v", err)
  83. }
  84. if string(bytes.TrimSpace(data[:n])) != "hello frp" {
  85. t.Fatalf("message got from udp server error, get %s", string(data[:n-1]))
  86. }
  87. }
  88. func TestUnixDomainServer(t *testing.T) {
  89. c, err := frpNet.ConnectTcpServer(fmt.Sprintf("127.0.0.1:%d", 10704))
  90. if err != nil {
  91. t.Fatalf("connect to echo server error: %v", err)
  92. }
  93. timer := time.Now().Add(time.Duration(5) * time.Second)
  94. c.SetDeadline(timer)
  95. c.Write([]byte(ECHO_TEST_STR + "\n"))
  96. br := bufio.NewReader(c)
  97. buf, err := br.ReadString('\n')
  98. if err != nil {
  99. t.Fatalf("read from echo server error: %v", err)
  100. }
  101. if ECHO_TEST_STR != buf {
  102. t.Fatalf("content error, send [%s], get [%s]", strings.Trim(ECHO_TEST_STR, "\n"), strings.Trim(buf, "\n"))
  103. }
  104. }