mirror of https://github.com/ceph/go-ceph
94 lines
2.4 KiB
Go
94 lines
2.4 KiB
Go
|
package rbd
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestGetSnapGroupNamespace(t *testing.T) {
|
||
|
conn := radosConnect(t)
|
||
|
defer conn.Shutdown()
|
||
|
|
||
|
poolname := GetUUID()
|
||
|
err := conn.MakePool(poolname)
|
||
|
require.NoError(t, err)
|
||
|
defer conn.DeletePool(poolname)
|
||
|
|
||
|
ioctx, err := conn.OpenIOContext(poolname)
|
||
|
require.NoError(t, err)
|
||
|
defer ioctx.Destroy()
|
||
|
|
||
|
imageName := "parent"
|
||
|
groupName := "myGroup"
|
||
|
groupSnapName := "myGroupSnap"
|
||
|
options := NewRbdImageOptions()
|
||
|
defer options.Destroy()
|
||
|
err = options.SetUint64(ImageOptionOrder, uint64(testImageOrder))
|
||
|
assert.NoError(t, err)
|
||
|
err = options.SetUint64(ImageOptionFeatures, 1)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
err = CreateImage(ioctx, imageName, testImageSize, options)
|
||
|
assert.NoError(t, err)
|
||
|
|
||
|
img, err := OpenImage(ioctx, imageName, NoSnapshot)
|
||
|
assert.NoError(t, err)
|
||
|
defer func() {
|
||
|
assert.NoError(t, img.Close())
|
||
|
assert.NoError(t, img.Remove())
|
||
|
}()
|
||
|
|
||
|
err = GroupCreate(ioctx, groupName)
|
||
|
require.NoError(t, err)
|
||
|
defer func() {
|
||
|
assert.NoError(t, GroupRemove(ioctx, groupName))
|
||
|
}()
|
||
|
|
||
|
err = GroupImageAdd(ioctx, groupName, ioctx, imageName)
|
||
|
require.NoError(t, err)
|
||
|
defer func() {
|
||
|
assert.NoError(t, GroupImageRemove(ioctx, groupName, ioctx, imageName))
|
||
|
}()
|
||
|
|
||
|
err = GroupSnapCreate(ioctx, groupName, groupSnapName)
|
||
|
require.NoError(t, err)
|
||
|
defer func() {
|
||
|
assert.NoError(t, GroupSnapRemove(ioctx, groupName, groupSnapName))
|
||
|
}()
|
||
|
|
||
|
// Take the details of the 1st snapshot of the image.
|
||
|
snapInfoList, err := img.GetSnapshotNames()
|
||
|
assert.NoError(t, err)
|
||
|
snapInfo := snapInfoList[0]
|
||
|
assert.Positive(t, snapInfo.Id)
|
||
|
assert.Regexp(t, "^\\.group\\.", snapInfo.Name)
|
||
|
|
||
|
// The snapshot is expected to be in the 'group' namespace.
|
||
|
nsType, err := img.GetSnapNamespaceType(snapInfo.Id)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, nsType, SnapNamespaceTypeGroup)
|
||
|
|
||
|
// Get the info from the snapshot in the group.
|
||
|
sgn, err := img.GetSnapGroupNamespace(snapInfo.Id)
|
||
|
assert.NoError(t, err)
|
||
|
require.NotNil(t, sgn)
|
||
|
assert.Equal(t, groupName, sgn.GroupName)
|
||
|
|
||
|
// Negative testing follows.
|
||
|
invalidSnapID := uint64(22)
|
||
|
|
||
|
t.Run("InvalidSnapID", func(t *testing.T) {
|
||
|
_, err := img.GetSnapGroupNamespace(invalidSnapID)
|
||
|
assert.Error(t, err)
|
||
|
})
|
||
|
|
||
|
t.Run("InvalidImage", func(t *testing.T) {
|
||
|
invalidImgName := GetUUID()
|
||
|
invalidImg := GetImage(ioctx, invalidImgName)
|
||
|
_, err := invalidImg.GetSnapGroupNamespace(invalidSnapID)
|
||
|
assert.Error(t, err)
|
||
|
})
|
||
|
}
|