mockservers.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package framework
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/fatedier/frp/test/e2e/mock/server"
  6. "github.com/fatedier/frp/test/e2e/pkg/port"
  7. )
  8. const (
  9. TCPEchoServerPort = "TCPEchoServerPort"
  10. UDPEchoServerPort = "UDPEchoServerPort"
  11. UDSEchoServerAddr = "UDSEchoServerAddr"
  12. )
  13. type MockServers struct {
  14. tcpEchoServer *server.Server
  15. udpEchoServer *server.Server
  16. udsEchoServer *server.Server
  17. }
  18. func NewMockServers(portAllocator *port.Allocator) *MockServers {
  19. s := &MockServers{}
  20. tcpPort := portAllocator.Get()
  21. udpPort := portAllocator.Get()
  22. s.tcpEchoServer = server.New(server.TCP, server.WithBindPort(tcpPort), server.WithEchoMode(true))
  23. s.udpEchoServer = server.New(server.UDP, server.WithBindPort(udpPort), server.WithEchoMode(true))
  24. udsIndex := portAllocator.Get()
  25. udsAddr := fmt.Sprintf("%s/frp_echo_server_%d.sock", os.TempDir(), udsIndex)
  26. os.Remove(udsAddr)
  27. s.udsEchoServer = server.New(server.Unix, server.WithBindAddr(udsAddr), server.WithEchoMode(true))
  28. return s
  29. }
  30. func (m *MockServers) Run() error {
  31. if err := m.tcpEchoServer.Run(); err != nil {
  32. return err
  33. }
  34. if err := m.udpEchoServer.Run(); err != nil {
  35. return err
  36. }
  37. if err := m.udsEchoServer.Run(); err != nil {
  38. return err
  39. }
  40. return nil
  41. }
  42. func (m *MockServers) Close() {
  43. m.tcpEchoServer.Close()
  44. m.udpEchoServer.Close()
  45. m.udsEchoServer.Close()
  46. os.Remove(m.udsEchoServer.BindAddr())
  47. }
  48. func (m *MockServers) GetTemplateParams() map[string]interface{} {
  49. ret := make(map[string]interface{})
  50. ret[TCPEchoServerPort] = m.tcpEchoServer.BindPort()
  51. ret[UDPEchoServerPort] = m.udpEchoServer.BindPort()
  52. ret[UDSEchoServerAddr] = m.udsEchoServer.BindAddr()
  53. return ret
  54. }
  55. func (m *MockServers) GetParam(key string) interface{} {
  56. params := m.GetTemplateParams()
  57. if v, ok := params[key]; ok {
  58. return v
  59. }
  60. return nil
  61. }