func_test.go 2.6 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. "github.com/stretchr/testify/assert"
  14. )
  15. var (
  16. TEST_STR = "frp is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet."
  17. TEST_TCP_PORT int64 = 10701
  18. TEST_TCP_FRP_PORT int64 = 10801
  19. TEST_TCP_EC_FRP_PORT int64 = 10901
  20. TEST_TCP_ECHO_STR string = "tcp type:" + TEST_STR
  21. TEST_UDP_PORT int64 = 10702
  22. TEST_UDP_FRP_PORT int64 = 10802
  23. TEST_UDP_ECHO_STR string = "udp type:" + TEST_STR
  24. TEST_UNIX_DOMAIN_ADDR string = "/tmp/frp_echo_server.sock"
  25. TEST_UNIX_DOMAIN_FRP_PORT int64 = 10803
  26. TEST_UNIX_DOMAIN_STR string = "unix domain type:" + TEST_STR
  27. TEST_HTTP_PORT int64 = 10704
  28. TEST_HTTP_FRP_PORT int64 = 10804
  29. TEST_HTTP_WEB01_STR string = "http web01:" + TEST_STR
  30. )
  31. func init() {
  32. go StartTcpEchoServer()
  33. go StartUdpEchoServer()
  34. go StartUnixDomainServer()
  35. go StartHttpServer()
  36. time.Sleep(500 * time.Millisecond)
  37. }
  38. func TestTcpServer(t *testing.T) {
  39. assert := assert.New(t)
  40. // Normal
  41. addr := fmt.Sprintf("127.0.0.1:%d", TEST_TCP_FRP_PORT)
  42. res, err := sendTcpMsg(addr, TEST_TCP_ECHO_STR)
  43. assert.NoError(err)
  44. assert.Equal(TEST_TCP_ECHO_STR, res)
  45. // Encrytion and compression
  46. addr = fmt.Sprintf("127.0.0.1:%d", TEST_TCP_EC_FRP_PORT)
  47. res, err = sendTcpMsg(addr, TEST_TCP_ECHO_STR)
  48. assert.NoError(err)
  49. assert.Equal(TEST_TCP_ECHO_STR, res)
  50. }
  51. func TestUdpEchoServer(t *testing.T) {
  52. assert := assert.New(t)
  53. // Normal
  54. addr := fmt.Sprintf("127.0.0.1:%d", TEST_UDP_FRP_PORT)
  55. res, err := sendUdpMsg(addr, TEST_UDP_ECHO_STR)
  56. assert.NoError(err)
  57. assert.Equal(TEST_UDP_ECHO_STR, res)
  58. func TestUnixDomainServer(t *testing.T) {
  59. assert := assert.New(t)
  60. // Normal
  61. addr := fmt.Sprintf("127.0.0.1:%d", TEST_UNIX_DOMAIN_FRP_PORT)
  62. res, err := sendTcpMsg(addr, TEST_UNIX_DOMAIN_STR)
  63. assert.NoError(err)
  64. assert.Equal(TEST_UNIX_DOMAIN_STR, res)
  65. }
  66. func TestHttpServer(t *testing.T) {
  67. client := &http.Client{}
  68. req, _ := http.NewRequest("GET", fmt.Sprintf("http://127.0.0.1:%d", HTTP_PORT), nil)
  69. res, err := client.Do(req)
  70. if err != nil {
  71. t.Fatalf("do http request error: %v", err)
  72. }
  73. if res.StatusCode == 200 {
  74. body, err := ioutil.ReadAll(res.Body)
  75. if err != nil {
  76. t.Fatalf("read from http server error: %v", err)
  77. }
  78. bodystr := string(body)
  79. if bodystr != HTTP_RES_STR {
  80. t.Fatalf("content from http server error [%s], correct string is [%s]", bodystr, HTTP_RES_STR)
  81. }
  82. } else {
  83. t.Fatalf("http code from http server error [%d]", res.StatusCode)
  84. }
  85. }