storageconnection_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package azure
  2. import (
  3. "os"
  4. "path/filepath"
  5. "testing"
  6. "time"
  7. "github.com/opencost/opencost/core/pkg/env"
  8. pkgenv "github.com/opencost/opencost/pkg/env"
  9. )
  10. func TestDeleteFilesOlderThanRetention(t *testing.T) {
  11. testCases := []struct {
  12. name string
  13. pre func()
  14. files map[string]time.Duration
  15. deleted int
  16. expected string
  17. }{
  18. {
  19. name: "Ensure the default value of '2' works",
  20. files: map[string]time.Duration{
  21. "today.gz": 1 * 24 * time.Hour,
  22. "yesterday.gz": 1.5 * 24 * time.Hour,
  23. "two_days_ago.gz": 3 * 24 * time.Hour,
  24. },
  25. deleted: 1,
  26. expected: "today.gz,yesterday.gz",
  27. },
  28. {
  29. name: "Ensure the a value of 7 works",
  30. pre: func() {
  31. env.Set(pkgenv.CloudCostPvRetentionEnvVar, "7")
  32. },
  33. files: map[string]time.Duration{
  34. "today.gz": 1 * 24 * time.Hour,
  35. "yesterday.gz": 1.5 * 24 * time.Hour,
  36. "two_days_ago.gz": 3 * 24 * time.Hour,
  37. },
  38. deleted: 0,
  39. expected: "today.gz,yesterday.gz,two_days_ago.gz",
  40. },
  41. {
  42. name: "Ensure the a value of 7 works",
  43. pre: func() {
  44. env.Set(pkgenv.CloudCostPvRetentionEnvVar, "7")
  45. },
  46. files: map[string]time.Duration{
  47. "today.gz": 1 * 24 * time.Hour,
  48. "yesterday.gz": 1.5 * 24 * time.Hour,
  49. "two_days_ago.gz": 3 * 24 * time.Hour,
  50. "old_file.gz": 8 * 24 * time.Hour,
  51. },
  52. deleted: 1,
  53. expected: "today.gz,yesterday.gz,two_days_ago.gz",
  54. },
  55. }
  56. for _, tt := range testCases {
  57. if tt.pre != nil {
  58. tt.pre()
  59. }
  60. tmpDir, err := os.MkdirTemp("", "test-delete-files")
  61. if err != nil {
  62. t.Errorf("Failed to make temp directory: %v", err)
  63. }
  64. defer os.RemoveAll(tmpDir)
  65. for name, days := range tt.files {
  66. confPath := filepath.Join(tmpDir, name)
  67. err = os.WriteFile(confPath, []byte(`{"status": "ok"}`), 0644)
  68. if err != nil {
  69. t.Errorf("Failed to write file inside temp directory: %v", err)
  70. }
  71. modTime := time.Now().Add(-days)
  72. err = os.Chtimes(confPath, modTime, modTime)
  73. if err != nil {
  74. t.Errorf("Failed to set modification time for file: %v", err)
  75. }
  76. }
  77. sc := &StorageConnection{}
  78. cleaned, err := sc.deleteFilesOlderThanRetention(tmpDir)
  79. if err != nil {
  80. t.Fatalf("unexpected error: %v", err)
  81. }
  82. if len(cleaned) != tt.deleted {
  83. t.Errorf("deleteFilesOlderThanRetention() cleaned %d files, want %d", len(cleaned), tt.deleted)
  84. }
  85. }
  86. }