mirror of
https://github.com/ceph/go-ceph
synced 2025-02-09 06:46:53 +00:00
test/rbd: Add tests for Image.Seek()
Signed-off-by: Niels de Vos <ndevos@redhat.com>
This commit is contained in:
parent
2faaf93287
commit
9381485fac
11
rbd/rbd.go
11
rbd/rbd.go
@ -47,6 +47,11 @@ const (
|
|||||||
|
|
||||||
// Features that only work when used with a single client using the image for writes.
|
// Features that only work when used with a single client using the image for writes.
|
||||||
RbdFeaturesSingleClient = uint64(C.RBD_FEATURES_SINGLE_CLIENT)
|
RbdFeaturesSingleClient = uint64(C.RBD_FEATURES_SINGLE_CLIENT)
|
||||||
|
|
||||||
|
// Image.Seek() constants
|
||||||
|
SeekSet = int(C.SEEK_SET)
|
||||||
|
SeekCur = int(C.SEEK_CUR)
|
||||||
|
SeekEnd = int(C.SEEK_END)
|
||||||
)
|
)
|
||||||
|
|
||||||
// bits for Image.validate() and Snapshot.validate()
|
// bits for Image.validate() and Snapshot.validate()
|
||||||
@ -863,11 +868,11 @@ func (image *Image) Write(data []byte) (n int, err error) {
|
|||||||
|
|
||||||
func (image *Image) Seek(offset int64, whence int) (int64, error) {
|
func (image *Image) Seek(offset int64, whence int) (int64, error) {
|
||||||
switch whence {
|
switch whence {
|
||||||
case 0:
|
case SeekSet:
|
||||||
image.offset = offset
|
image.offset = offset
|
||||||
case 1:
|
case SeekCur:
|
||||||
image.offset += offset
|
image.offset += offset
|
||||||
case 2:
|
case SeekEnd:
|
||||||
stats, err := image.Stat()
|
stats, err := image.Stat()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
|
@ -392,6 +392,76 @@ func TestImageRename(t *testing.T) {
|
|||||||
conn.Shutdown()
|
conn.Shutdown()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestImageSeek(t *testing.T) {
|
||||||
|
conn, _ := rados.NewConn()
|
||||||
|
conn.ReadDefaultConfigFile()
|
||||||
|
conn.Connect()
|
||||||
|
|
||||||
|
poolname := GetUUID()
|
||||||
|
err := conn.MakePool(poolname)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
ioctx, err := conn.OpenIOContext(poolname)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
name := GetUUID()
|
||||||
|
img, err := Create(ioctx, name, 1<<22, 22)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
err = img.Open()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = img.Seek(0, SeekSet)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
bytes_in := []byte("input data")
|
||||||
|
n_in, err := img.Write(bytes_in)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, n_in, len(bytes_in))
|
||||||
|
|
||||||
|
pos, err := img.Seek(0, SeekCur)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, pos, int64(n_in))
|
||||||
|
|
||||||
|
pos, err = img.Seek(0, SeekSet)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, pos, int64(0))
|
||||||
|
|
||||||
|
bytes_out := make([]byte, len(bytes_in))
|
||||||
|
n_out, err := img.Read(bytes_out)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, n_out, len(bytes_out))
|
||||||
|
assert.Equal(t, bytes_in, bytes_out)
|
||||||
|
|
||||||
|
pos, err = img.Seek(0, SeekCur)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, pos, int64(n_out))
|
||||||
|
|
||||||
|
pos, err = img.Seek(0, SeekSet)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, pos, int64(0))
|
||||||
|
|
||||||
|
pos, err = img.Seek(0, SeekEnd)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, pos, int64(1<<22))
|
||||||
|
|
||||||
|
_, err = img.Seek(0, -1)
|
||||||
|
assert.Error(t, err)
|
||||||
|
|
||||||
|
err = img.Close()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
_, err = img.Seek(0, SeekEnd)
|
||||||
|
assert.Equal(t, err, ErrImageNotOpen)
|
||||||
|
|
||||||
|
err = img.Remove()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
ioctx.Destroy()
|
||||||
|
conn.DeletePool(poolname)
|
||||||
|
conn.Shutdown()
|
||||||
|
}
|
||||||
|
|
||||||
func TestIOReaderWriter(t *testing.T) {
|
func TestIOReaderWriter(t *testing.T) {
|
||||||
conn, _ := rados.NewConn()
|
conn, _ := rados.NewConn()
|
||||||
conn.ReadDefaultConfigFile()
|
conn.ReadDefaultConfigFile()
|
||||||
@ -420,7 +490,7 @@ func TestIOReaderWriter(t *testing.T) {
|
|||||||
err = img.Flush()
|
err = img.Flush()
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
_, err = img.Seek(0, 0)
|
_, err = img.Seek(0, SeekSet)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
var stats2 *ImageInfo
|
var stats2 *ImageInfo
|
||||||
@ -429,12 +499,12 @@ func TestIOReaderWriter(t *testing.T) {
|
|||||||
|
|
||||||
assert.Equal(t, &stats, &stats2)
|
assert.Equal(t, &stats, &stats2)
|
||||||
|
|
||||||
_, err = img.Seek(0, 0)
|
_, err = img.Seek(0, SeekSet)
|
||||||
bytes_in := []byte("input data")
|
bytes_in := []byte("input data")
|
||||||
_, err = img.Write(bytes_in)
|
_, err = img.Write(bytes_in)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
_, err = img.Seek(0, 0)
|
_, err = img.Seek(0, SeekSet)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
||||||
bytes_out := make([]byte, len(bytes_in))
|
bytes_out := make([]byte, len(bytes_in))
|
||||||
|
Loading…
Reference in New Issue
Block a user