test.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package commands
  2. import (
  3. "fmt"
  4. "log"
  5. "github.com/v2fly/v2ray-core/v4"
  6. "github.com/v2fly/v2ray-core/v4/commands/base"
  7. )
  8. // CmdTest tests config files
  9. var CmdTest = &base.Command{
  10. CustomFlags: true,
  11. UsageLine: "{{.Exec}} test [-format=json] [-c config.json] [-d dir]",
  12. Short: "Test config files",
  13. Long: `
  14. Test config files, without launching V2Ray server.
  15. Arguments:
  16. -c, -config
  17. Config file for V2Ray. Multiple assign is accepted.
  18. -d, -confdir
  19. A dir with config files. Multiple assign is accepted.
  20. -r
  21. Load confdir recursively.
  22. -format
  23. Format of input files. (default "json")
  24. Examples:
  25. {{.Exec}} {{.LongName}} -c config.json
  26. {{.Exec}} {{.LongName}} -d path/to/dir
  27. Use "{{.Exec}} help format-loader" for more information about format.
  28. `,
  29. Run: executeTest,
  30. }
  31. func executeTest(cmd *base.Command, args []string) {
  32. setConfigFlags(cmd)
  33. cmd.Flag.Parse(args)
  34. extension, err := getLoaderExtension()
  35. if err != nil {
  36. base.Fatalf(err.Error())
  37. }
  38. if len(configDirs) > 0 {
  39. dirReader := readConfDir
  40. if *configDirRecursively {
  41. dirReader = readConfDirRecursively
  42. }
  43. for _, d := range configDirs {
  44. log.Println("Using confdir from arg:", d)
  45. configFiles = append(configFiles, dirReader(d, extension)...)
  46. }
  47. }
  48. if len(configFiles) == 0 {
  49. if len(configDirs) == 0 {
  50. cmd.Flag.Usage()
  51. base.SetExitStatus(1)
  52. base.Exit()
  53. }
  54. base.Fatalf("no config file found with extension: %s", extension)
  55. }
  56. printVersion()
  57. _, err = startV2RayTesting()
  58. if err != nil {
  59. base.Fatalf("Test failed: %s", err)
  60. }
  61. fmt.Println("Configuration OK.")
  62. }
  63. func startV2RayTesting() (core.Server, error) {
  64. config, err := core.LoadConfig(*configFormat, configFiles[0], configFiles)
  65. if err != nil {
  66. return nil, newError("failed to read config files: [", configFiles.String(), "]").Base(err)
  67. }
  68. server, err := core.New(config)
  69. if err != nil {
  70. return nil, newError("failed to create server").Base(err)
  71. }
  72. return server, nil
  73. }