tls_test.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
  1. package ci
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. "github.com/fatedier/frp/tests/config"
  7. "github.com/fatedier/frp/tests/consts"
  8. "github.com/fatedier/frp/tests/util"
  9. "github.com/stretchr/testify/assert"
  10. )
  11. const FRPS_TLS_TCP_CONF = `
  12. [common]
  13. bind_addr = 0.0.0.0
  14. bind_port = 20000
  15. log_file = console
  16. log_level = debug
  17. token = 123456
  18. `
  19. const FRPC_TLS_TCP_CONF = `
  20. [common]
  21. server_addr = 127.0.0.1
  22. server_port = 20000
  23. log_file = console
  24. log_level = debug
  25. token = 123456
  26. protocol = tcp
  27. tls_enable = true
  28. [tcp]
  29. type = tcp
  30. local_port = 10701
  31. remote_port = 20801
  32. `
  33. func TestTlsOverTCP(t *testing.T) {
  34. assert := assert.New(t)
  35. frpsCfgPath, err := config.GenerateConfigFile(consts.FRPS_NORMAL_CONFIG, FRPS_TLS_TCP_CONF)
  36. if assert.NoError(err) {
  37. defer os.Remove(frpsCfgPath)
  38. }
  39. frpcCfgPath, err := config.GenerateConfigFile(consts.FRPC_NORMAL_CONFIG, FRPC_TLS_TCP_CONF)
  40. if assert.NoError(err) {
  41. defer os.Remove(frpcCfgPath)
  42. }
  43. frpsProcess := util.NewProcess(consts.FRPS_BIN_PATH, []string{"-c", frpsCfgPath})
  44. err = frpsProcess.Start()
  45. if assert.NoError(err) {
  46. defer frpsProcess.Stop()
  47. }
  48. time.Sleep(200 * time.Millisecond)
  49. frpcProcess := util.NewProcess(consts.FRPC_BIN_PATH, []string{"-c", frpcCfgPath})
  50. err = frpcProcess.Start()
  51. if assert.NoError(err) {
  52. defer frpcProcess.Stop()
  53. }
  54. time.Sleep(500 * time.Millisecond)
  55. // test tcp
  56. res, err := util.SendTcpMsg("127.0.0.1:20801", consts.TEST_TCP_ECHO_STR)
  57. assert.NoError(err)
  58. assert.Equal(consts.TEST_TCP_ECHO_STR, res)
  59. }
  60. const FRPS_TLS_KCP_CONF = `
  61. [common]
  62. bind_addr = 0.0.0.0
  63. bind_port = 20000
  64. kcp_bind_port = 20000
  65. log_file = console
  66. log_level = debug
  67. token = 123456
  68. `
  69. const FRPC_TLS_KCP_CONF = `
  70. [common]
  71. server_addr = 127.0.0.1
  72. server_port = 20000
  73. log_file = console
  74. log_level = debug
  75. token = 123456
  76. protocol = kcp
  77. tls_enable = true
  78. [tcp]
  79. type = tcp
  80. local_port = 10701
  81. remote_port = 20801
  82. `
  83. func TestTLSOverKCP(t *testing.T) {
  84. assert := assert.New(t)
  85. frpsCfgPath, err := config.GenerateConfigFile(consts.FRPS_NORMAL_CONFIG, FRPS_TLS_KCP_CONF)
  86. if assert.NoError(err) {
  87. defer os.Remove(frpsCfgPath)
  88. }
  89. frpcCfgPath, err := config.GenerateConfigFile(consts.FRPC_NORMAL_CONFIG, FRPC_TLS_KCP_CONF)
  90. if assert.NoError(err) {
  91. defer os.Remove(frpcCfgPath)
  92. }
  93. frpsProcess := util.NewProcess(consts.FRPS_BIN_PATH, []string{"-c", frpsCfgPath})
  94. err = frpsProcess.Start()
  95. if assert.NoError(err) {
  96. defer frpsProcess.Stop()
  97. }
  98. time.Sleep(200 * time.Millisecond)
  99. frpcProcess := util.NewProcess(consts.FRPC_BIN_PATH, []string{"-c", frpcCfgPath})
  100. err = frpcProcess.Start()
  101. if assert.NoError(err) {
  102. defer frpcProcess.Stop()
  103. }
  104. time.Sleep(500 * time.Millisecond)
  105. // test tcp
  106. res, err := util.SendTcpMsg("127.0.0.1:20801", consts.TEST_TCP_ECHO_STR)
  107. assert.NoError(err)
  108. assert.Equal(consts.TEST_TCP_ECHO_STR, res)
  109. }
  110. const FRPS_TLS_WS_CONF = `
  111. [common]
  112. bind_addr = 0.0.0.0
  113. bind_port = 20000
  114. log_file = console
  115. log_level = debug
  116. token = 123456
  117. `
  118. const FRPC_TLS_WS_CONF = `
  119. [common]
  120. server_addr = 127.0.0.1
  121. server_port = 20000
  122. log_file = console
  123. log_level = debug
  124. token = 123456
  125. protocol = websocket
  126. tls_enable = true
  127. [tcp]
  128. type = tcp
  129. local_port = 10701
  130. remote_port = 20801
  131. `
  132. func TestTLSOverWebsocket(t *testing.T) {
  133. assert := assert.New(t)
  134. frpsCfgPath, err := config.GenerateConfigFile(consts.FRPS_NORMAL_CONFIG, FRPS_TLS_WS_CONF)
  135. if assert.NoError(err) {
  136. defer os.Remove(frpsCfgPath)
  137. }
  138. frpcCfgPath, err := config.GenerateConfigFile(consts.FRPC_NORMAL_CONFIG, FRPC_TLS_WS_CONF)
  139. if assert.NoError(err) {
  140. defer os.Remove(frpcCfgPath)
  141. }
  142. frpsProcess := util.NewProcess(consts.FRPS_BIN_PATH, []string{"-c", frpsCfgPath})
  143. err = frpsProcess.Start()
  144. if assert.NoError(err) {
  145. defer frpsProcess.Stop()
  146. }
  147. time.Sleep(200 * time.Millisecond)
  148. frpcProcess := util.NewProcess(consts.FRPC_BIN_PATH, []string{"-c", frpcCfgPath})
  149. err = frpcProcess.Start()
  150. if assert.NoError(err) {
  151. defer frpcProcess.Stop()
  152. }
  153. time.Sleep(500 * time.Millisecond)
  154. // test tcp
  155. res, err := util.SendTcpMsg("127.0.0.1:20801", consts.TEST_TCP_ECHO_STR)
  156. assert.NoError(err)
  157. assert.Equal(consts.TEST_TCP_ECHO_STR, res)
  158. }
  159. const FRPS_TLS_ONLY_TCP_CONF = `
  160. [common]
  161. bind_addr = 0.0.0.0
  162. bind_port = 20000
  163. log_file = console
  164. log_level = debug
  165. token = 123456
  166. tls_only = true
  167. `
  168. const FRPC_TLS_ONLY_TCP_CONF = `
  169. [common]
  170. server_addr = 127.0.0.1
  171. server_port = 20000
  172. log_file = console
  173. log_level = debug
  174. token = 123456
  175. protocol = tcp
  176. tls_enable = true
  177. [tcp]
  178. type = tcp
  179. local_port = 10701
  180. remote_port = 20801
  181. `
  182. const FRPC_TLS_ONLY_NO_TLS_TCP_CONF = `
  183. [common]
  184. server_addr = 127.0.0.1
  185. server_port = 20000
  186. log_file = console
  187. log_level = debug
  188. token = 123456
  189. protocol = tcp
  190. tls_enable = false
  191. [tcp]
  192. type = tcp
  193. local_port = 10701
  194. remote_port = 20802
  195. `
  196. func TestTlsOnlyOverTCP(t *testing.T) {
  197. assert := assert.New(t)
  198. frpsCfgPath, err := config.GenerateConfigFile(consts.FRPS_NORMAL_CONFIG, FRPS_TLS_ONLY_TCP_CONF)
  199. if assert.NoError(err) {
  200. defer os.Remove(frpsCfgPath)
  201. }
  202. frpcWithTlsCfgPath, err := config.GenerateConfigFile(consts.FRPC_NORMAL_CONFIG, FRPC_TLS_ONLY_TCP_CONF)
  203. if assert.NoError(err) {
  204. defer os.Remove(frpcWithTlsCfgPath)
  205. }
  206. frpsProcess := util.NewProcess(consts.FRPS_BIN_PATH, []string{"-c", frpsCfgPath})
  207. err = frpsProcess.Start()
  208. if assert.NoError(err) {
  209. defer frpsProcess.Stop()
  210. }
  211. time.Sleep(200 * time.Millisecond)
  212. frpcProcessWithTls := util.NewProcess(consts.FRPC_BIN_PATH, []string{"-c", frpcWithTlsCfgPath})
  213. err = frpcProcessWithTls.Start()
  214. if assert.NoError(err) {
  215. defer frpcProcessWithTls.Stop()
  216. }
  217. time.Sleep(500 * time.Millisecond)
  218. // test tcp over tls
  219. res, err := util.SendTcpMsg("127.0.0.1:20801", consts.TEST_TCP_ECHO_STR)
  220. assert.NoError(err)
  221. assert.Equal(consts.TEST_TCP_ECHO_STR, res)
  222. frpcProcessWithTls.Stop()
  223. frpcWithoutTlsCfgPath, err := config.GenerateConfigFile(consts.FRPC_NORMAL_CONFIG, FRPC_TLS_ONLY_NO_TLS_TCP_CONF)
  224. if assert.NoError(err) {
  225. defer os.Remove(frpcWithTlsCfgPath)
  226. }
  227. frpcProcessWithoutTls := util.NewProcess(consts.FRPC_BIN_PATH, []string{"-c", frpcWithoutTlsCfgPath})
  228. err = frpcProcessWithoutTls.Start()
  229. if assert.NoError(err) {
  230. defer frpcProcessWithoutTls.Stop()
  231. }
  232. time.Sleep(500 * time.Millisecond)
  233. // test tcp without tls
  234. _, err = util.SendTcpMsg("127.0.0.1:20802", consts.TEST_TCP_ECHO_STR)
  235. assert.Error(err)
  236. }