func_test.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. time.Sleep(500 * time.Millisecond)
  26. }
  27. func TestEchoServer(t *testing.T) {
  28. c, err := frpNet.ConnectTcpServer(fmt.Sprintf("127.0.0.1:%d", ECHO_PORT))
  29. if err != nil {
  30. t.Fatalf("connect to echo server error: %v", err)
  31. }
  32. timer := time.Now().Add(time.Duration(5) * time.Second)
  33. c.SetDeadline(timer)
  34. c.Write([]byte(ECHO_TEST_STR + "\n"))
  35. br := bufio.NewReader(c)
  36. buf, err := br.ReadString('\n')
  37. if err != nil {
  38. t.Fatalf("read from echo server error: %v", err)
  39. }
  40. if ECHO_TEST_STR != buf {
  41. t.Fatalf("content error, send [%s], get [%s]", strings.Trim(ECHO_TEST_STR, "\n"), strings.Trim(buf, "\n"))
  42. }
  43. }
  44. func TestHttpServer(t *testing.T) {
  45. client := &http.Client{}
  46. req, _ := http.NewRequest("GET", fmt.Sprintf("http://127.0.0.1:%d", HTTP_PORT), nil)
  47. res, err := client.Do(req)
  48. if err != nil {
  49. t.Fatalf("do http request error: %v", err)
  50. }
  51. if res.StatusCode == 200 {
  52. body, err := ioutil.ReadAll(res.Body)
  53. if err != nil {
  54. t.Fatalf("read from http server error: %v", err)
  55. }
  56. bodystr := string(body)
  57. if bodystr != HTTP_RES_STR {
  58. t.Fatalf("content from http server error [%s], correct string is [%s]", bodystr, HTTP_RES_STR)
  59. }
  60. } else {
  61. t.Fatalf("http code from http server error [%d]", res.StatusCode)
  62. }
  63. }
  64. func TestUdpEchoServer(t *testing.T) {
  65. addr, err := net.ResolveUDPAddr("udp", "127.0.0.1:10712")
  66. if err != nil {
  67. t.Fatalf("do udp request error: %v", err)
  68. }
  69. conn, err := net.DialUDP("udp", nil, addr)
  70. if err != nil {
  71. t.Fatalf("dial udp server error: %v", err)
  72. }
  73. defer conn.Close()
  74. _, err = conn.Write([]byte("hello frp\n"))
  75. if err != nil {
  76. t.Fatalf("write to udp server error: %v", err)
  77. }
  78. data := make([]byte, 20)
  79. n, err := conn.Read(data)
  80. if err != nil {
  81. t.Fatalf("read from udp server error: %v", err)
  82. }
  83. if string(bytes.TrimSpace(data[:n])) != "hello frp" {
  84. t.Fatalf("message got from udp server error, get %s", string(data[:n-1]))
  85. }
  86. }