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