staggered_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright (C) 2014 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at https://mozilla.org/MPL/2.0/.
  6. package versioner
  7. import (
  8. "os"
  9. "sort"
  10. "strconv"
  11. "testing"
  12. "time"
  13. "github.com/d4l3k/messagediff"
  14. "github.com/syncthing/syncthing/lib/fs"
  15. )
  16. func TestStaggeredVersioningVersionCount(t *testing.T) {
  17. /* Default settings:
  18. {30, 3600}, // first hour -> 30 sec between versions
  19. {3600, 86400}, // next day -> 1 h between versions
  20. {86400, 592000}, // next 30 days -> 1 day between versions
  21. {604800, maxAge}, // next year -> 1 week between versions
  22. */
  23. loc, _ := time.LoadLocation("Local")
  24. now, _ := time.ParseInLocation(TimeFormat, "20160415-140000", loc)
  25. files := []string{
  26. // 14:00:00 is "now"
  27. "test~20160415-140000", // 0 seconds ago
  28. "test~20160415-135959", // 1 second ago
  29. "test~20160415-135958", // 2 seconds ago
  30. "test~20160415-135900", // 1 minute ago
  31. "test~20160415-135859", // 1 minute 1 second ago
  32. "test~20160415-135830", // 1 minute 30 seconds ago
  33. "test~20160415-135829", // 1 minute 31 seconds ago
  34. "test~20160415-135700", // 3 minutes ago
  35. "test~20160415-135630", // 3 minutes 30 seconds ago
  36. "test~20160415-133000", // 30 minutes ago
  37. "test~20160415-132900", // 31 minutes ago
  38. "test~20160415-132500", // 35 minutes ago
  39. "test~20160415-132000", // 40 minutes ago
  40. "test~20160415-130000", // 60 minutes ago
  41. "test~20160415-124000", // 80 minutes ago
  42. "test~20160415-122000", // 100 minutes ago
  43. "test~20160415-110000", // 120 minutes ago
  44. }
  45. sort.Strings(files)
  46. delete := []string{
  47. "test~20160415-140000", // 0 seconds ago
  48. "test~20160415-135959", // 1 second ago
  49. "test~20160415-135900", // 1 minute ago
  50. "test~20160415-135830", // 1 minute 30 second ago
  51. "test~20160415-130000", // 60 minutes ago
  52. "test~20160415-124000", // 80 minutes ago
  53. }
  54. sort.Strings(delete)
  55. os.MkdirAll("testdata/.stversions", 0755)
  56. defer os.RemoveAll("testdata")
  57. v := NewStaggered("", fs.NewFilesystem(fs.FilesystemTypeBasic, "testdata"), map[string]string{"maxAge": strconv.Itoa(365 * 86400)}).(*Staggered)
  58. v.testCleanDone = make(chan struct{})
  59. defer v.Stop()
  60. go v.Serve()
  61. <-v.testCleanDone
  62. rem := v.toRemove(files, now)
  63. if diff, equal := messagediff.PrettyDiff(delete, rem); !equal {
  64. t.Errorf("Incorrect deleted files; got %v, expected %v\n%v", rem, delete, diff)
  65. }
  66. }