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) | |
| 		}) | |
| 	} | |
| }
 |