2023-11-08 11:09:36 +00:00
|
|
|
package rbd
|
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestImageResize2(t *testing.T) {
|
|
|
|
cc := 0
|
2024-02-13 06:19:38 +00:00
|
|
|
cb := func(_, total uint64, v interface{}) int {
|
2023-11-08 11:09:36 +00:00
|
|
|
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()
|
|
|
|
}
|