aboutsummaryrefslogtreecommitdiff
path: root/weed/storage/disk_location_test.go
diff options
context:
space:
mode:
authorDan <dan@zem.org.uk>2024-07-10 08:30:28 +0100
committerGitHub <noreply@github.com>2024-07-10 00:30:28 -0700
commitbd54669d58eb02dba5fa75d39971b9e7e32c1c0e (patch)
tree1f1dde800a4bda3a212447e02742d88f087a04f1 /weed/storage/disk_location_test.go
parent0a2f4896cfc451989080b0705cb27bdcfff46b28 (diff)
downloadseaweedfs-bd54669d58eb02dba5fa75d39971b9e7e32c1c0e.tar.xz
seaweedfs-bd54669d58eb02dba5fa75d39971b9e7e32c1c0e.zip
Detect underflow when calculating unused space (#5758)
* Detect underflow when calculating unused space * Detect underflow when calculating unused space
Diffstat (limited to 'weed/storage/disk_location_test.go')
-rw-r--r--weed/storage/disk_location_test.go78
1 files changed, 78 insertions, 0 deletions
diff --git a/weed/storage/disk_location_test.go b/weed/storage/disk_location_test.go
new file mode 100644
index 000000000..d105a477f
--- /dev/null
+++ b/weed/storage/disk_location_test.go
@@ -0,0 +1,78 @@
+package storage
+
+import (
+ "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: "hdd",
+ 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)
+ }
+
+}