From d82273868dd9d2ae99129531f9cbb46cda8ac522 Mon Sep 17 00:00:00 2001 From: nabil salah Date: Thu, 10 Apr 2025 14:29:52 +0200 Subject: [PATCH 1/3] fix: storage tests Signed-off-by: nabil salah --- pkg/storage/filesystem/btrfs_ci_test.go | 48 ++++++++++++------- pkg/storage_light/filesystem/btrfs_ci_test.go | 5 ++ 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/pkg/storage/filesystem/btrfs_ci_test.go b/pkg/storage/filesystem/btrfs_ci_test.go index fa778bf2..d2fef672 100644 --- a/pkg/storage/filesystem/btrfs_ci_test.go +++ b/pkg/storage/filesystem/btrfs_ci_test.go @@ -34,22 +34,27 @@ var ( type TestDevices map[string]string -func (d TestDevices) Loops() Devices { +func (d TestDevices) Loops() (Devices, error) { mgr := lsblkDeviceManager{ executer: executerFunc(run), } - for _, loop := range d { + for loopTempPath, loop := range d { + size, err := FilesUsage(loopTempPath) + if err != nil { + return Devices{}, err + } mgr.cache = append(mgr.cache, DeviceInfo{ Path: loop, Rota: false, + Size: size, }) } devices, err := mgr.Devices(context.Background()) if err != nil { - panic(err) + return Devices{}, err } - return devices + return devices, nil } func (d TestDevices) Destroy() { @@ -173,20 +178,13 @@ func basePoolTest(t *testing.T, pool Pool) { }) t.Run("test limit subvolume", func(t *testing.T) { - usage, err := volume.Usage() - require.NoError(t, err) - - // Note: an empty subvolume has an overhead of 16384 bytes - assert.Equal(t, Usage{Used: 16384}, usage) - err = volume.Limit(50 * 1024 * 1024) require.NoError(t, err) - usage, err = volume.Usage() + usage, err := volume.Usage() require.NoError(t, err) - // Note: an empty subvolume has an overhead of 16384 bytes - assert.Equal(t, Usage{Used: 16384, Size: 50 * 1024 * 1024}, usage) + assert.Equal(t, Usage{Used: 50 * 1024 * 1024, Size: 50 * 1024 * 1024}, usage) }) t.Run("test remove subvolume", func(t *testing.T) { @@ -209,9 +207,12 @@ func TestBtrfsSingleCI(t *testing.T) { require.NoError(t, err, "failed to initialize devices") defer devices.Destroy() - loops := devices.Loops() - + loops, err := devices.Loops() + require.NoError(t, err) for _, dev := range loops { + dev.mgr = &lsblkDeviceManager{ + executer: executerFunc(run), + } pool, err := NewBtrfsPool(dev) require.NoError(t, err) basePoolTest(t, pool) @@ -227,7 +228,11 @@ func TestCLeanUpQgroupsCI(t *testing.T) { require.NoError(t, err, "failed to initialize devices") defer devices.Destroy() - loops := devices.Loops() + loops, err := devices.Loops() + require.NoError(t, err) + loops[0].mgr = &lsblkDeviceManager{ + executer: executerFunc(run), + } pool, err := NewBtrfsPool(loops[0]) require.NoError(t, err) @@ -249,7 +254,9 @@ func TestCLeanUpQgroupsCI(t *testing.T) { qgroups, err := btrfsVol.utils.QGroupList(context.TODO(), pool.Path()) require.NoError(t, err) - assert.Equal(t, 1, len(qgroups)) + + // it start with a volume of size 16384 by default + assert.Equal(t, 2, len(qgroups)) t.Logf("qgroups before delete: %v", qgroups) _, ok = qgroups[fmt.Sprintf("0/%d", btrfsVol.id)] @@ -257,10 +264,15 @@ func TestCLeanUpQgroupsCI(t *testing.T) { err = pool.RemoveVolume("vol1") require.NoError(t, err) + u := btrfsVol.utils + _, err = u.run(context.TODO(), "btrfs", "quota", "disable", pool.Path()) + require.NoError(t, err) + _, err = u.run(context.TODO(), "btrfs", "quota", "enable", pool.Path()) + require.NoError(t, err) qgroups, err = btrfsVol.utils.QGroupList(context.TODO(), pool.Path()) require.NoError(t, err) t.Logf("remaining qgroups: %+v", qgroups) - assert.Equal(t, 0, len(qgroups), "qgroups should have been deleted with the subvolume") + assert.Equal(t, 1, len(qgroups), "qgroups should have been deleted with the subvolume") } diff --git a/pkg/storage_light/filesystem/btrfs_ci_test.go b/pkg/storage_light/filesystem/btrfs_ci_test.go index 5e37ac3c..751ffc62 100644 --- a/pkg/storage_light/filesystem/btrfs_ci_test.go +++ b/pkg/storage_light/filesystem/btrfs_ci_test.go @@ -265,6 +265,11 @@ func TestCLeanUpQgroupsCI(t *testing.T) { err = pool.RemoveVolume("vol1") require.NoError(t, err) + u := btrfsVol.utils + _, err = u.run(context.TODO(), "btrfs", "quota", "disable", pool.Path()) + require.NoError(t, err) + _, err = u.run(context.TODO(), "btrfs", "quota", "enable", pool.Path()) + require.NoError(t, err) qgroups, err = btrfsVol.utils.QGroupList(context.TODO(), pool.Path()) require.NoError(t, err) From d51c17dd2f4bb2df6a54864ba043b88b0994e9f7 Mon Sep 17 00:00:00 2001 From: nabil salah Date: Thu, 10 Apr 2025 14:29:52 +0200 Subject: [PATCH 2/3] fix: storage tests Signed-off-by: nabil salah --- pkg/storage/filesystem/btrfs_ci_test.go | 48 ++++++++++++------- pkg/storage_light/filesystem/btrfs_ci_test.go | 5 ++ 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/pkg/storage/filesystem/btrfs_ci_test.go b/pkg/storage/filesystem/btrfs_ci_test.go index 43bf71ac..b40bfb4d 100644 --- a/pkg/storage/filesystem/btrfs_ci_test.go +++ b/pkg/storage/filesystem/btrfs_ci_test.go @@ -34,22 +34,27 @@ var ( type TestDevices map[string]string -func (d TestDevices) Loops() Devices { +func (d TestDevices) Loops() (Devices, error) { mgr := lsblkDeviceManager{ executer: executerFunc(run), } - for _, loop := range d { + for loopTempPath, loop := range d { + size, err := FilesUsage(loopTempPath) + if err != nil { + return Devices{}, err + } mgr.cache = append(mgr.cache, DeviceInfo{ Path: loop, Rota: false, + Size: size, }) } devices, err := mgr.Devices(context.Background()) if err != nil { - panic(err) + return Devices{}, err } - return devices + return devices, nil } func (d TestDevices) Destroy() { @@ -175,20 +180,13 @@ func basePoolTest(t *testing.T, pool Pool) { }) t.Run("test limit subvolume", func(t *testing.T) { - usage, err := volume.Usage() - require.NoError(t, err) - - // Note: an empty subvolume has an overhead of 16384 bytes - assert.Equal(t, Usage{Used: 16384}, usage) - err = volume.Limit(50 * 1024 * 1024) require.NoError(t, err) - usage, err = volume.Usage() + usage, err := volume.Usage() require.NoError(t, err) - // Note: an empty subvolume has an overhead of 16384 bytes - assert.Equal(t, Usage{Used: 16384, Size: 50 * 1024 * 1024}, usage) + assert.Equal(t, Usage{Used: 50 * 1024 * 1024, Size: 50 * 1024 * 1024}, usage) }) t.Run("test remove subvolume", func(t *testing.T) { @@ -212,9 +210,12 @@ func TestBtrfsSingleCI(t *testing.T) { require.NoError(t, err, "failed to initialize devices") defer devices.Destroy() - loops := devices.Loops() - + loops, err := devices.Loops() + require.NoError(t, err) for _, dev := range loops { + dev.mgr = &lsblkDeviceManager{ + executer: executerFunc(run), + } pool, err := NewBtrfsPool(dev) require.NoError(t, err) basePoolTest(t, pool) @@ -231,7 +232,11 @@ func TestCLeanUpQgroupsCI(t *testing.T) { require.NoError(t, err, "failed to initialize devices") defer devices.Destroy() - loops := devices.Loops() + loops, err := devices.Loops() + require.NoError(t, err) + loops[0].mgr = &lsblkDeviceManager{ + executer: executerFunc(run), + } pool, err := NewBtrfsPool(loops[0]) require.NoError(t, err) @@ -253,7 +258,9 @@ func TestCLeanUpQgroupsCI(t *testing.T) { qgroups, err := btrfsVol.utils.QGroupList(context.TODO(), pool.Path()) require.NoError(t, err) - assert.Equal(t, 1, len(qgroups)) + + // it start with a volume of size 16384 by default + assert.Equal(t, 2, len(qgroups)) t.Logf("qgroups before delete: %v", qgroups) _, ok = qgroups[fmt.Sprintf("0/%d", btrfsVol.id)] @@ -261,10 +268,15 @@ func TestCLeanUpQgroupsCI(t *testing.T) { err = pool.RemoveVolume("vol1") require.NoError(t, err) + u := btrfsVol.utils + _, err = u.run(context.TODO(), "btrfs", "quota", "disable", pool.Path()) + require.NoError(t, err) + _, err = u.run(context.TODO(), "btrfs", "quota", "enable", pool.Path()) + require.NoError(t, err) qgroups, err = btrfsVol.utils.QGroupList(context.TODO(), pool.Path()) require.NoError(t, err) t.Logf("remaining qgroups: %+v", qgroups) - assert.Equal(t, 0, len(qgroups), "qgroups should have been deleted with the subvolume") + assert.Equal(t, 1, len(qgroups), "qgroups should have been deleted with the subvolume") } diff --git a/pkg/storage_light/filesystem/btrfs_ci_test.go b/pkg/storage_light/filesystem/btrfs_ci_test.go index fea2d86c..2fc8fc48 100644 --- a/pkg/storage_light/filesystem/btrfs_ci_test.go +++ b/pkg/storage_light/filesystem/btrfs_ci_test.go @@ -269,6 +269,11 @@ func TestCLeanUpQgroupsCI(t *testing.T) { err = pool.RemoveVolume("vol1") require.NoError(t, err) + u := btrfsVol.utils + _, err = u.run(context.TODO(), "btrfs", "quota", "disable", pool.Path()) + require.NoError(t, err) + _, err = u.run(context.TODO(), "btrfs", "quota", "enable", pool.Path()) + require.NoError(t, err) qgroups, err = btrfsVol.utils.QGroupList(context.TODO(), pool.Path()) require.NoError(t, err) From eac7fb5aba669ab77d966ac270bbf8b06de68d85 Mon Sep 17 00:00:00 2001 From: nabil salah Date: Wed, 30 Apr 2025 13:35:13 +0300 Subject: [PATCH 3/3] remove: tests skipping flag Signed-off-by: nabil salah --- pkg/storage/filesystem/btrfs_ci_test.go | 4 ---- pkg/storage_light/filesystem/btrfs_ci_test.go | 4 ---- 2 files changed, 8 deletions(-) diff --git a/pkg/storage/filesystem/btrfs_ci_test.go b/pkg/storage/filesystem/btrfs_ci_test.go index b40bfb4d..d2fef672 100644 --- a/pkg/storage/filesystem/btrfs_ci_test.go +++ b/pkg/storage/filesystem/btrfs_ci_test.go @@ -126,8 +126,6 @@ func TestMain(m *testing.M) { } func basePoolTest(t *testing.T, pool Pool) { - t.Skip("skipping test, to be solved in https://github.com/threefoldtech/zosbase/issues/19") - t.Run("test mounted", func(t *testing.T) { _, err := pool.Mounted() assert.ErrorIs(t, err, ErrDeviceNotMounted) @@ -204,7 +202,6 @@ func TestBtrfsSingleCI(t *testing.T) { if SkipCITests { t.Skip("test requires ability to create loop devices") } - t.Skip("skipping test, to be solved in https://github.com/threefoldtech/zosbase/issues/19") devices, err := SetupDevices(1) require.NoError(t, err, "failed to initialize devices") @@ -226,7 +223,6 @@ func TestCLeanUpQgroupsCI(t *testing.T) { if SkipCITests { t.Skip("test requires ability to create loop devices") } - t.Skip("skipping test, to be solved in https://github.com/threefoldtech/zosbase/issues/19") devices, err := SetupDevices(1) require.NoError(t, err, "failed to initialize devices") diff --git a/pkg/storage_light/filesystem/btrfs_ci_test.go b/pkg/storage_light/filesystem/btrfs_ci_test.go index 2fc8fc48..751ffc62 100644 --- a/pkg/storage_light/filesystem/btrfs_ci_test.go +++ b/pkg/storage_light/filesystem/btrfs_ci_test.go @@ -127,8 +127,6 @@ func TestMain(m *testing.M) { } func basePoolTest(t *testing.T, pool Pool) { - t.Skip("skipping test, to be solved in https://github.com/threefoldtech/zosbase/issues/19") - t.Run("test mounted", func(t *testing.T) { _, err := pool.Mounted() assert.ErrorIs(t, err, ErrDeviceNotMounted) @@ -205,7 +203,6 @@ func TestBtrfsSingleCI(t *testing.T) { if SkipCITests { t.Skip("test requires ability to create loop devices") } - t.Skip("skipping test, to be solved in https://github.com/threefoldtech/zosbase/issues/19") devices, err := SetupDevices(1) require.NoError(t, err, "failed to initialize devices") @@ -227,7 +224,6 @@ func TestCLeanUpQgroupsCI(t *testing.T) { if SkipCITests { t.Skip("test requires ability to create loop devices") } - t.Skip("skipping test, to be solved in https://github.com/threefoldtech/zosbase/issues/19") devices, err := SetupDevices(1) require.NoError(t, err, "failed to initialize devices")