2 changed files with 105 additions and 0 deletions
@ -0,0 +1,94 @@ |
|||
package storage |
|||
|
|||
import ( |
|||
"testing" |
|||
|
|||
"github.com/seaweedfs/seaweedfs/weed/storage/needle" |
|||
) |
|||
|
|||
func TestHasFreeDiskLocation(t *testing.T) { |
|||
testCases := []struct { |
|||
name string |
|||
isDiskSpaceLow bool |
|||
maxVolumeCount int32 |
|||
currentVolumes int |
|||
expected bool |
|||
}{ |
|||
{ |
|||
name: "low disk space prevents allocation", |
|||
isDiskSpaceLow: true, |
|||
maxVolumeCount: 10, |
|||
currentVolumes: 5, |
|||
expected: false, |
|||
}, |
|||
{ |
|||
name: "normal disk space and available volume count allows allocation", |
|||
isDiskSpaceLow: false, |
|||
maxVolumeCount: 10, |
|||
currentVolumes: 5, |
|||
expected: true, |
|||
}, |
|||
{ |
|||
name: "volume count at max prevents allocation", |
|||
isDiskSpaceLow: false, |
|||
maxVolumeCount: 2, |
|||
currentVolumes: 2, |
|||
expected: false, |
|||
}, |
|||
{ |
|||
name: "volume count over max prevents allocation", |
|||
isDiskSpaceLow: false, |
|||
maxVolumeCount: 2, |
|||
currentVolumes: 3, |
|||
expected: false, |
|||
}, |
|||
{ |
|||
name: "volume count just under max allows allocation", |
|||
isDiskSpaceLow: false, |
|||
maxVolumeCount: 2, |
|||
currentVolumes: 1, |
|||
expected: true, |
|||
}, |
|||
{ |
|||
name: "max volume count is 0 allows allocation", |
|||
isDiskSpaceLow: false, |
|||
maxVolumeCount: 0, |
|||
currentVolumes: 100, |
|||
expected: true, |
|||
}, |
|||
{ |
|||
name: "max volume count is 0 but low disk space prevents allocation", |
|||
isDiskSpaceLow: true, |
|||
maxVolumeCount: 0, |
|||
currentVolumes: 100, |
|||
expected: false, |
|||
}, |
|||
} |
|||
|
|||
for _, tc := range testCases { |
|||
t.Run(tc.name, func(t *testing.T) { |
|||
// setup
|
|||
diskLocation := &DiskLocation{ |
|||
volumes: make(map[needle.VolumeId]*Volume), |
|||
isDiskSpaceLow: tc.isDiskSpaceLow, |
|||
MaxVolumeCount: tc.maxVolumeCount, |
|||
} |
|||
for i := 0; i < tc.currentVolumes; i++ { |
|||
diskLocation.volumes[needle.VolumeId(i+1)] = &Volume{} |
|||
} |
|||
|
|||
store := &Store{ |
|||
Locations: []*DiskLocation{diskLocation}, |
|||
} |
|||
|
|||
// act
|
|||
result := store.hasFreeDiskLocation(diskLocation) |
|||
|
|||
// assert
|
|||
if result != tc.expected { |
|||
t.Errorf("Expected hasFreeDiskLocation() = %v; want %v for volumes:%d/%d, lowSpace:%v", |
|||
result, tc.expected, len(diskLocation.volumes), diskLocation.MaxVolumeCount, diskLocation.isDiskSpaceLow) |
|||
} |
|||
}) |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue