store_vacuum_test.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package storage
  2. import (
  3. "testing"
  4. )
  5. func TestSpaceCalculation(t *testing.T) {
  6. // Test the space calculation logic
  7. testCases := []struct {
  8. name string
  9. volumeSize uint64
  10. indexSize uint64
  11. preallocate int64
  12. expectedMin int64
  13. }{
  14. {
  15. name: "Large volume, small preallocate",
  16. volumeSize: 244 * 1024 * 1024 * 1024, // 244GB
  17. indexSize: 1024 * 1024, // 1MB
  18. preallocate: 1024, // 1KB
  19. expectedMin: int64((244*1024*1024*1024 + 1024*1024) * 11 / 10), // +10% buffer
  20. },
  21. {
  22. name: "Small volume, large preallocate",
  23. volumeSize: 100 * 1024 * 1024, // 100MB
  24. indexSize: 1024, // 1KB
  25. preallocate: 1024 * 1024 * 1024, // 1GB
  26. expectedMin: int64(1024 * 1024 * 1024 * 11 / 10), // preallocate + 10%
  27. },
  28. }
  29. for _, tc := range testCases {
  30. t.Run(tc.name, func(t *testing.T) {
  31. // Calculate space needed using the same logic as our fix
  32. estimatedCompactSize := int64(tc.volumeSize + tc.indexSize)
  33. spaceNeeded := tc.preallocate
  34. if estimatedCompactSize > tc.preallocate {
  35. spaceNeeded = estimatedCompactSize
  36. }
  37. // Add 10% safety buffer
  38. spaceNeeded = spaceNeeded + (spaceNeeded / 10)
  39. if spaceNeeded < tc.expectedMin {
  40. t.Errorf("Space calculation too low: got %d, expected at least %d", spaceNeeded, tc.expectedMin)
  41. }
  42. t.Logf("Volume size: %d bytes, Space needed: %d bytes (%.2f%% of volume size)",
  43. tc.volumeSize, spaceNeeded, float64(spaceNeeded)/float64(tc.volumeSize)*100)
  44. })
  45. }
  46. }