You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.6 KiB
51 lines
1.6 KiB
package storage
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestSpaceCalculation(t *testing.T) {
|
|
// Test the space calculation logic
|
|
testCases := []struct {
|
|
name string
|
|
volumeSize uint64
|
|
indexSize uint64
|
|
preallocate int64
|
|
expectedMin int64
|
|
}{
|
|
{
|
|
name: "Large volume, small preallocate",
|
|
volumeSize: 244 * 1024 * 1024 * 1024, // 244GB
|
|
indexSize: 1024 * 1024, // 1MB
|
|
preallocate: 1024, // 1KB
|
|
expectedMin: int64((244*1024*1024*1024 + 1024*1024) * 11 / 10), // +10% buffer
|
|
},
|
|
{
|
|
name: "Small volume, large preallocate",
|
|
volumeSize: 100 * 1024 * 1024, // 100MB
|
|
indexSize: 1024, // 1KB
|
|
preallocate: 1024 * 1024 * 1024, // 1GB
|
|
expectedMin: int64(1024 * 1024 * 1024 * 11 / 10), // preallocate + 10%
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
// Calculate space needed using the same logic as our fix
|
|
estimatedCompactSize := int64(tc.volumeSize + tc.indexSize)
|
|
spaceNeeded := tc.preallocate
|
|
if estimatedCompactSize > tc.preallocate {
|
|
spaceNeeded = estimatedCompactSize
|
|
}
|
|
// Add 10% safety buffer
|
|
spaceNeeded = spaceNeeded + (spaceNeeded / 10)
|
|
|
|
if spaceNeeded < tc.expectedMin {
|
|
t.Errorf("Space calculation too low: got %d, expected at least %d", spaceNeeded, tc.expectedMin)
|
|
}
|
|
|
|
t.Logf("Volume size: %d bytes, Space needed: %d bytes (%.2f%% of volume size)",
|
|
tc.volumeSize, spaceNeeded, float64(spaceNeeded)/float64(tc.volumeSize)*100)
|
|
})
|
|
}
|
|
}
|