server_env.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package scenarios
  2. import (
  3. "os"
  4. "os/exec"
  5. "path/filepath"
  6. "runtime"
  7. "time"
  8. "v2ray.com/core/app/log"
  9. "fmt"
  10. "io/ioutil"
  11. "sync"
  12. _ "v2ray.com/core"
  13. "v2ray.com/core/common/retry"
  14. )
  15. var (
  16. runningServers = make([]*exec.Cmd, 0, 10)
  17. testBinaryPath string
  18. testBinaryPathGen sync.Once
  19. )
  20. func GenTestBinaryPath() {
  21. testBinaryPathGen.Do(func() {
  22. var tempDir string
  23. err := retry.Timed(5, 100).On(func() error {
  24. dir, err := ioutil.TempDir("", "v2ray")
  25. if err != nil {
  26. return err
  27. }
  28. tempDir = dir
  29. return nil
  30. })
  31. if err != nil {
  32. panic(err)
  33. }
  34. file := filepath.Join(tempDir, "v2ray.test")
  35. if runtime.GOOS == "windows" {
  36. file += ".exe"
  37. }
  38. testBinaryPath = file
  39. fmt.Printf("Generated binary path: %s\n", file)
  40. })
  41. }
  42. func GetSourcePath() string {
  43. return filepath.Join("v2ray.com", "core", "main")
  44. }
  45. func TestFile(filename string) string {
  46. return filepath.Join(os.Getenv("GOPATH"), "src", "v2ray.com", "core", "testing", "scenarios", "data", filename)
  47. }
  48. func InitializeServerSetOnce(testcase string) error {
  49. if err := InitializeServerServer(testcase); err != nil {
  50. return err
  51. }
  52. if err := InitializeServerClient(testcase); err != nil {
  53. return err
  54. }
  55. return nil
  56. }
  57. func InitializeServerServer(testcase string) error {
  58. return InitializeServer(TestFile(testcase + "_server.json"))
  59. }
  60. func InitializeServerClient(testcase string) error {
  61. return InitializeServer(TestFile(testcase + "_client.json"))
  62. }
  63. func InitializeServer(configFile string) error {
  64. err := BuildV2Ray()
  65. if err != nil {
  66. return err
  67. }
  68. proc := RunV2Ray(configFile)
  69. err = proc.Start()
  70. if err != nil {
  71. return err
  72. }
  73. time.Sleep(time.Second)
  74. runningServers = append(runningServers, proc)
  75. return nil
  76. }
  77. func CloseAllServers() {
  78. log.Info("Closing all servers.")
  79. for _, server := range runningServers {
  80. server.Process.Signal(os.Interrupt)
  81. server.Process.Wait()
  82. }
  83. runningServers = make([]*exec.Cmd, 0, 10)
  84. log.Info("All server closed.")
  85. }