db_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package manager
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "os"
  6. "path/filepath"
  7. "testing"
  8. "time"
  9. . "github.com/smartystreets/goconvey/convey"
  10. . "github.com/tuna/tunasync/internal"
  11. )
  12. func TestBoltAdapter(t *testing.T) {
  13. Convey("boltAdapter should work", t, func() {
  14. tmpDir, err := ioutil.TempDir("", "tunasync")
  15. defer os.RemoveAll(tmpDir)
  16. So(err, ShouldBeNil)
  17. dbType, dbFile := "bolt", filepath.Join(tmpDir, "bolt.db")
  18. boltDB, err := makeDBAdapter(dbType, dbFile)
  19. So(err, ShouldBeNil)
  20. defer func() {
  21. // close boltDB
  22. err := boltDB.Close()
  23. So(err, ShouldBeNil)
  24. }()
  25. testWorkerIDs := []string{"test_worker1", "test_worker2"}
  26. Convey("create worker", func() {
  27. for _, id := range testWorkerIDs {
  28. w := workerStatus{
  29. ID: id,
  30. Token: "token_" + id,
  31. LastOnline: time.Now(),
  32. }
  33. w, err = boltDB.CreateWorker(w)
  34. So(err, ShouldBeNil)
  35. }
  36. Convey("get exists worker", func() {
  37. _, err := boltDB.GetWorker(testWorkerIDs[0])
  38. So(err, ShouldBeNil)
  39. })
  40. Convey("list exist worker", func() {
  41. ws, err := boltDB.ListWorkers()
  42. So(err, ShouldBeNil)
  43. So(len(ws), ShouldEqual, 2)
  44. })
  45. Convey("get inexist worker", func() {
  46. _, err := boltDB.GetWorker("invalid workerID")
  47. So(err, ShouldNotBeNil)
  48. })
  49. })
  50. Convey("update mirror status", func() {
  51. status1 := mirrorStatus{
  52. Name: "arch-sync1",
  53. Worker: testWorkerIDs[0],
  54. IsMaster: true,
  55. Status: Success,
  56. LastUpdate: time.Now(),
  57. Upstream: "mirrors.tuna.tsinghua.edu.cn",
  58. Size: "3GB",
  59. }
  60. status2 := mirrorStatus{
  61. Name: "arch-sync2",
  62. Worker: testWorkerIDs[1],
  63. IsMaster: true,
  64. Status: Success,
  65. LastUpdate: time.Now(),
  66. Upstream: "mirrors.tuna.tsinghua.edu.cn",
  67. Size: "4GB",
  68. }
  69. _, err := boltDB.UpdateMirrorStatus(status1.Worker, status1.Name, status1)
  70. _, err = boltDB.UpdateMirrorStatus(status2.Worker, status2.Name, status2)
  71. So(err, ShouldBeNil)
  72. Convey("get mirror status", func() {
  73. m, err := boltDB.GetMirrorStatus(testWorkerIDs[0], status1.Name)
  74. So(err, ShouldBeNil)
  75. expectedJSON, err := json.Marshal(status1)
  76. So(err, ShouldBeNil)
  77. actualJSON, err := json.Marshal(m)
  78. So(err, ShouldBeNil)
  79. So(string(actualJSON), ShouldEqual, string(expectedJSON))
  80. })
  81. Convey("list mirror status", func() {
  82. ms, err := boltDB.ListMirrorStatus(testWorkerIDs[0])
  83. So(err, ShouldBeNil)
  84. expectedJSON, err := json.Marshal([]mirrorStatus{status1})
  85. So(err, ShouldBeNil)
  86. actualJSON, err := json.Marshal(ms)
  87. So(err, ShouldBeNil)
  88. So(string(actualJSON), ShouldEqual, string(expectedJSON))
  89. })
  90. Convey("list all mirror status", func() {
  91. ms, err := boltDB.ListAllMirrorStatus()
  92. So(err, ShouldBeNil)
  93. expectedJSON, err := json.Marshal([]mirrorStatus{status1, status2})
  94. So(err, ShouldBeNil)
  95. actualJSON, err := json.Marshal(ms)
  96. So(err, ShouldBeNil)
  97. So(string(actualJSON), ShouldEqual, string(expectedJSON))
  98. })
  99. })
  100. })
  101. }