config_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package worker
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "testing"
  6. . "github.com/smartystreets/goconvey/convey"
  7. )
  8. func TestConfig(t *testing.T) {
  9. var cfgBlob = `
  10. [global]
  11. name = "test_worker"
  12. log_dir = "/var/log/tunasync/{{.Name}}"
  13. mirror_dir = "/data/mirrors"
  14. concurrent = 10
  15. interval = 240
  16. [manager]
  17. api_base = "https://127.0.0.1:5000"
  18. token = "some_token"
  19. [[mirrors]]
  20. name = "AOSP"
  21. provider = "command"
  22. upstream = "https://aosp.google.com/"
  23. interval = 720
  24. mirror_dir = "/data/git/AOSP"
  25. [mirrors.env]
  26. REPO = "/usr/local/bin/aosp-repo"
  27. [[mirrors]]
  28. name = "debian"
  29. provider = "two-stage-rsync"
  30. stage1_profile = "debian"
  31. upstream = "rsync://ftp.debian.org/debian/"
  32. use_ipv6 = true
  33. [[mirrors]]
  34. name = "fedora"
  35. provider = "rsync"
  36. upstream = "rsync://ftp.fedoraproject.org/fedora/"
  37. use_ipv6 = true
  38. exclude_file = "/etc/tunasync.d/fedora-exclude.txt"
  39. `
  40. Convey("When giving invalid file", t, func() {
  41. cfg, err := loadConfig("/path/to/invalid/file")
  42. So(err, ShouldNotBeNil)
  43. So(cfg, ShouldBeNil)
  44. })
  45. Convey("Everything should work on valid config file", t, func() {
  46. tmpfile, err := ioutil.TempFile("", "tunasync")
  47. So(err, ShouldEqual, nil)
  48. defer os.Remove(tmpfile.Name())
  49. err = ioutil.WriteFile(tmpfile.Name(), []byte(cfgBlob), 0644)
  50. So(err, ShouldEqual, nil)
  51. defer tmpfile.Close()
  52. cfg, err := loadConfig(tmpfile.Name())
  53. So(err, ShouldBeNil)
  54. So(cfg.Global.Name, ShouldEqual, "test_worker")
  55. So(cfg.Global.Interval, ShouldEqual, 240)
  56. So(cfg.Global.MirrorDir, ShouldEqual, "/data/mirrors")
  57. So(cfg.Manager.APIBase, ShouldEqual, "https://127.0.0.1:5000")
  58. m := cfg.Mirrors[0]
  59. So(m.Name, ShouldEqual, "AOSP")
  60. So(m.MirrorDir, ShouldEqual, "/data/git/AOSP")
  61. So(m.Provider, ShouldEqual, ProvCommand)
  62. So(m.Interval, ShouldEqual, 720)
  63. So(m.Env["REPO"], ShouldEqual, "/usr/local/bin/aosp-repo")
  64. m = cfg.Mirrors[1]
  65. So(m.Name, ShouldEqual, "debian")
  66. So(m.MirrorDir, ShouldEqual, "")
  67. So(m.Provider, ShouldEqual, ProvTwoStageRsync)
  68. m = cfg.Mirrors[2]
  69. So(m.Name, ShouldEqual, "fedora")
  70. So(m.MirrorDir, ShouldEqual, "")
  71. So(m.Provider, ShouldEqual, ProvRsync)
  72. So(m.ExcludeFile, ShouldEqual, "/etc/tunasync.d/fedora-exclude.txt")
  73. So(len(cfg.Mirrors), ShouldEqual, 3)
  74. })
  75. }