go-ceph/rbd/resize_test.go
Khayyam Saleem 51b8287148 librbd exposes rbd_resize2, which allows clients to pass in a boolean controlling
whether or not the allocation should be allowed to shrink, and a progress-tracking
callback. This contribution extends go-ceph to be able to call rbd_resize2.

Closes #933

Signed-off-by: Khayyam Saleem <khayyam.saleem@gmail.com>
2023-11-08 19:51:30 +00:00

74 lines
1.6 KiB
Go

//go:build ceph_preview
package rbd
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestImageResize2(t *testing.T) {
cc := 0
cb := func(offset, total uint64, v interface{}) int {
cc++
val := v.(int)
assert.Equal(t, 0, val)
assert.Equal(t, uint64(2), total)
return 0
}
conn := radosConnect(t)
poolname := GetUUID()
err := conn.MakePool(poolname)
assert.NoError(t, err)
ioctx, err := conn.OpenIOContext(poolname)
require.NoError(t, err)
name := GetUUID()
reqSize := uint64(1024 * 1024 * 4) // 4MB
err = quickCreate(ioctx, name, reqSize, testImageOrder)
assert.NoError(t, err)
image, err := OpenImage(ioctx, name, NoSnapshot)
assert.NoError(t, err)
size, err := image.GetSize()
assert.NoError(t, err)
assert.Equal(t, size, reqSize)
newReqSize := reqSize * 2
// Test normal resize (no shrinking allowed)
err = image.Resize2(newReqSize, false, cb, nil)
assert.NoError(t, err)
size, err = image.GetSize()
assert.NoError(t, err)
assert.Equal(t, size, newReqSize)
// Resize to a smaller size with shrinking allowed
err = image.Resize2(reqSize, true, cb, 0)
assert.NoError(t, err)
// Attempt to resize to a smaller size with shrinking disallowed (should error)
err = image.Resize2(reqSize-1024*1024, false, cb, 0)
assert.Error(t, err)
err = image.Close()
assert.NoError(t, err)
err = image.Resize2(newReqSize, false, cb, 0)
assert.Error(t, err) // Expect an error since the image is not open/
err = image.Remove()
assert.NoError(t, err)
ioctx.Destroy()
conn.DeletePool(poolname)
conn.Shutdown()
}