1
0

func_test.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package tests
  2. import (
  3. "fmt"
  4. "testing"
  5. "time"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. var (
  9. TEST_STR = "frp is a fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet."
  10. TEST_TCP_PORT int = 10701
  11. TEST_TCP_FRP_PORT int = 10801
  12. TEST_TCP_EC_FRP_PORT int = 10901
  13. TEST_TCP_ECHO_STR string = "tcp type:" + TEST_STR
  14. TEST_UDP_PORT int = 10702
  15. TEST_UDP_FRP_PORT int = 10802
  16. TEST_UDP_EC_FRP_PORT int = 10902
  17. TEST_UDP_ECHO_STR string = "udp type:" + TEST_STR
  18. TEST_UNIX_DOMAIN_ADDR string = "/tmp/frp_echo_server.sock"
  19. TEST_UNIX_DOMAIN_FRP_PORT int = 10803
  20. TEST_UNIX_DOMAIN_STR string = "unix domain type:" + TEST_STR
  21. TEST_HTTP_PORT int = 10704
  22. TEST_HTTP_FRP_PORT int = 10804
  23. TEST_HTTP_NORMAL_STR string = "http normal string: " + TEST_STR
  24. TEST_HTTP_FOO_STR string = "http foo string: " + TEST_STR
  25. TEST_HTTP_BAR_STR string = "http bar string: " + TEST_STR
  26. TEST_STCP_FRP_PORT int = 10805
  27. TEST_STCP_EC_FRP_PORT int = 10905
  28. TEST_STCP_ECHO_STR string = "stcp type:" + TEST_STR
  29. )
  30. func init() {
  31. go StartTcpEchoServer()
  32. go StartUdpEchoServer()
  33. go StartUnixDomainServer()
  34. go StartHttpServer()
  35. time.Sleep(500 * time.Millisecond)
  36. }
  37. func TestTcp(t *testing.T) {
  38. assert := assert.New(t)
  39. // Normal
  40. addr := fmt.Sprintf("127.0.0.1:%d", TEST_TCP_FRP_PORT)
  41. res, err := sendTcpMsg(addr, TEST_TCP_ECHO_STR)
  42. assert.NoError(err)
  43. assert.Equal(TEST_TCP_ECHO_STR, res)
  44. // Encrytion and compression
  45. addr = fmt.Sprintf("127.0.0.1:%d", TEST_TCP_EC_FRP_PORT)
  46. res, err = sendTcpMsg(addr, TEST_TCP_ECHO_STR)
  47. assert.NoError(err)
  48. assert.Equal(TEST_TCP_ECHO_STR, res)
  49. }
  50. func TestUdp(t *testing.T) {
  51. assert := assert.New(t)
  52. // Normal
  53. addr := fmt.Sprintf("127.0.0.1:%d", TEST_UDP_FRP_PORT)
  54. res, err := sendUdpMsg(addr, TEST_UDP_ECHO_STR)
  55. assert.NoError(err)
  56. assert.Equal(TEST_UDP_ECHO_STR, res)
  57. // Encrytion and compression
  58. addr = fmt.Sprintf("127.0.0.1:%d", TEST_UDP_EC_FRP_PORT)
  59. res, err = sendUdpMsg(addr, TEST_UDP_ECHO_STR)
  60. assert.NoError(err)
  61. assert.Equal(TEST_UDP_ECHO_STR, res)
  62. }
  63. func TestUnixDomain(t *testing.T) {
  64. assert := assert.New(t)
  65. // Normal
  66. addr := fmt.Sprintf("127.0.0.1:%d", TEST_UNIX_DOMAIN_FRP_PORT)
  67. res, err := sendTcpMsg(addr, TEST_UNIX_DOMAIN_STR)
  68. if assert.NoError(err) {
  69. assert.Equal(TEST_UNIX_DOMAIN_STR, res)
  70. }
  71. }
  72. func TestStcp(t *testing.T) {
  73. assert := assert.New(t)
  74. // Normal
  75. addr := fmt.Sprintf("127.0.0.1:%d", TEST_STCP_FRP_PORT)
  76. res, err := sendTcpMsg(addr, TEST_STCP_ECHO_STR)
  77. if assert.NoError(err) {
  78. assert.Equal(TEST_STCP_ECHO_STR, res)
  79. }
  80. // Encrytion and compression
  81. addr = fmt.Sprintf("127.0.0.1:%d", TEST_STCP_EC_FRP_PORT)
  82. res, err = sendTcpMsg(addr, TEST_STCP_ECHO_STR)
  83. if assert.NoError(err) {
  84. assert.Equal(TEST_STCP_ECHO_STR, res)
  85. }
  86. }
  87. func TestHttp(t *testing.T) {
  88. assert := assert.New(t)
  89. // web01
  90. code, body, err := sendHttpMsg("GET", fmt.Sprintf("http://127.0.0.1:%d", TEST_HTTP_FRP_PORT), "", nil)
  91. if assert.NoError(err) {
  92. assert.Equal(200, code)
  93. assert.Equal(TEST_HTTP_NORMAL_STR, body)
  94. }
  95. // web02
  96. code, body, err = sendHttpMsg("GET", fmt.Sprintf("http://127.0.0.1:%d", TEST_HTTP_FRP_PORT), "test2.frp.com", nil)
  97. if assert.NoError(err) {
  98. assert.Equal(200, code)
  99. assert.Equal(TEST_HTTP_NORMAL_STR, body)
  100. }
  101. // error host header
  102. code, body, err = sendHttpMsg("GET", fmt.Sprintf("http://127.0.0.1:%d", TEST_HTTP_FRP_PORT), "errorhost.frp.com", nil)
  103. if assert.NoError(err) {
  104. assert.Equal(404, code)
  105. }
  106. // web03
  107. code, body, err = sendHttpMsg("GET", fmt.Sprintf("http://127.0.0.1:%d", TEST_HTTP_FRP_PORT), "test3.frp.com", nil)
  108. if assert.NoError(err) {
  109. assert.Equal(200, code)
  110. assert.Equal(TEST_HTTP_NORMAL_STR, body)
  111. }
  112. code, body, err = sendHttpMsg("GET", fmt.Sprintf("http://127.0.0.1:%d/foo", TEST_HTTP_FRP_PORT), "test3.frp.com", nil)
  113. if assert.NoError(err) {
  114. assert.Equal(200, code)
  115. assert.Equal(TEST_HTTP_FOO_STR, body)
  116. }
  117. // web04
  118. code, body, err = sendHttpMsg("GET", fmt.Sprintf("http://127.0.0.1:%d/bar", TEST_HTTP_FRP_PORT), "test3.frp.com", nil)
  119. if assert.NoError(err) {
  120. assert.Equal(200, code)
  121. assert.Equal(TEST_HTTP_BAR_STR, body)
  122. }
  123. // web05
  124. code, body, err = sendHttpMsg("GET", fmt.Sprintf("http://127.0.0.1:%d", TEST_HTTP_FRP_PORT), "test5.frp.com", nil)
  125. if assert.NoError(err) {
  126. assert.Equal(401, code)
  127. }
  128. header := make(map[string]string)
  129. header["Authorization"] = basicAuth("test", "test")
  130. code, body, err = sendHttpMsg("GET", fmt.Sprintf("http://127.0.0.1:%d", TEST_HTTP_FRP_PORT), "test5.frp.com", header)
  131. if assert.NoError(err) {
  132. assert.Equal(401, code)
  133. }
  134. }