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.
		
		
		
		
		
			
		
			
				
					
					
						
							79 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							79 lines
						
					
					
						
							2.2 KiB
						
					
					
				| package storage | |
| 
 | |
| import ( | |
| 	"github.com/seaweedfs/seaweedfs/weed/storage/types" | |
| 	"testing" | |
| 	"time" | |
| 
 | |
| 	"github.com/seaweedfs/seaweedfs/weed/storage/backend" | |
| 	"github.com/seaweedfs/seaweedfs/weed/storage/needle" | |
| 	"github.com/seaweedfs/seaweedfs/weed/util" | |
| ) | |
| 
 | |
| type ( | |
| 	mockBackendStorageFile struct { | |
| 		backend.DiskFile | |
| 
 | |
| 		datSize int64 | |
| 	} | |
| ) | |
| 
 | |
| func (df *mockBackendStorageFile) GetStat() (datSize int64, modTime time.Time, err error) { | |
| 	return df.datSize, time.Now(), nil | |
| } | |
| 
 | |
| type ( | |
| 	mockNeedleMapper struct { | |
| 		NeedleMap | |
| 
 | |
| 		idxSize uint64 | |
| 	} | |
| ) | |
| 
 | |
| func (nm *mockNeedleMapper) IndexFileSize() (idxSize uint64) { | |
| 	return nm.idxSize | |
| } | |
| 
 | |
| func TestUnUsedSpace(t *testing.T) { | |
| 	minFreeSpace := util.MinFreeSpace{Type: util.AsPercent, Percent: 1, Raw: "1"} | |
| 
 | |
| 	diskLocation := DiskLocation{ | |
| 		Directory:              "/test/", | |
| 		DirectoryUuid:          "1234", | |
| 		IdxDirectory:           "/test/", | |
| 		DiskType:               types.HddType, | |
| 		MaxVolumeCount:         0, | |
| 		OriginalMaxVolumeCount: 0, | |
| 		MinFreeSpace:           minFreeSpace, | |
| 	} | |
| 	diskLocation.volumes = make(map[needle.VolumeId]*Volume) | |
| 
 | |
| 	volumes := [3]*Volume{ | |
| 		{dir: diskLocation.Directory, dirIdx: diskLocation.IdxDirectory, Collection: "", Id: 0, DataBackend: &mockBackendStorageFile{datSize: 990}, nm: &mockNeedleMapper{idxSize: 10}}, | |
| 		{dir: diskLocation.Directory, dirIdx: diskLocation.IdxDirectory, Collection: "", Id: 1, DataBackend: &mockBackendStorageFile{datSize: 990}, nm: &mockNeedleMapper{idxSize: 10}}, | |
| 		{dir: diskLocation.Directory, dirIdx: diskLocation.IdxDirectory, Collection: "", Id: 2, DataBackend: &mockBackendStorageFile{datSize: 990}, nm: &mockNeedleMapper{idxSize: 10}}, | |
| 	} | |
| 
 | |
| 	for i, vol := range volumes { | |
| 		diskLocation.SetVolume(needle.VolumeId(i), vol) | |
| 	} | |
| 
 | |
| 	// Testing when there's still space | |
| 	unUsedSpace := diskLocation.UnUsedSpace(1200) | |
| 	if unUsedSpace != 600 { | |
| 		t.Errorf("unUsedSpace incorrect: %d != %d", unUsedSpace, 1500) | |
| 	} | |
| 
 | |
| 	// Testing when there's exactly 0 space | |
| 	unUsedSpace = diskLocation.UnUsedSpace(1000) | |
| 	if unUsedSpace != 0 { | |
| 		t.Errorf("unUsedSpace incorrect: %d != %d", unUsedSpace, 0) | |
| 	} | |
| 
 | |
| 	// Testing when there's negative free space | |
| 	unUsedSpace = diskLocation.UnUsedSpace(900) | |
| 	if unUsedSpace != 0 { | |
| 		t.Errorf("unUsedSpace incorrect: %d != %d", unUsedSpace, 0) | |
| 	} | |
| 
 | |
| }
 |