| 100 | } |
| 101 | |
| 102 | func TestDefaultCompactionLevels(t *testing.T) { |
| 103 | levels := litestream.DefaultCompactionLevels |
| 104 | if len(levels) != 4 { |
| 105 | t.Fatalf("DefaultCompactionLevels length=%d, want 4", len(levels)) |
| 106 | } |
| 107 | |
| 108 | // Verify L0 (raw files, no interval) |
| 109 | if levels[0].Level != 0 { |
| 110 | t.Errorf("levels[0].Level=%d, want 0", levels[0].Level) |
| 111 | } |
| 112 | if levels[0].Interval != 0 { |
| 113 | t.Errorf("levels[0].Interval=%v, want 0", levels[0].Interval) |
| 114 | } |
| 115 | |
| 116 | // Verify L1 (30 second compaction) |
| 117 | if levels[1].Level != 1 { |
| 118 | t.Errorf("levels[1].Level=%d, want 1", levels[1].Level) |
| 119 | } |
| 120 | if levels[1].Interval != 30*time.Second { |
| 121 | t.Errorf("levels[1].Interval=%v, want 30s", levels[1].Interval) |
| 122 | } |
| 123 | |
| 124 | // Verify L2 (5 minute compaction) |
| 125 | if levels[2].Level != 2 { |
| 126 | t.Errorf("levels[2].Level=%d, want 2", levels[2].Level) |
| 127 | } |
| 128 | if levels[2].Interval != 5*time.Minute { |
| 129 | t.Errorf("levels[2].Interval=%v, want 5m", levels[2].Interval) |
| 130 | } |
| 131 | |
| 132 | // Verify L3 (hourly compaction) |
| 133 | if levels[3].Level != 3 { |
| 134 | t.Errorf("levels[3].Level=%d, want 3", levels[3].Level) |
| 135 | } |
| 136 | if levels[3].Interval != time.Hour { |
| 137 | t.Errorf("levels[3].Interval=%v, want 1h", levels[3].Interval) |
| 138 | } |
| 139 | |
| 140 | // Verify they validate |
| 141 | if err := levels.Validate(); err != nil { |
| 142 | t.Errorf("DefaultCompactionLevels.Validate()=%v, want nil", err) |
| 143 | } |
| 144 | } |
| 145 | |
| 146 | func TestVFS_CompactionConfig(t *testing.T) { |
| 147 | t.Run("DefaultConfig", func(t *testing.T) { |