diff --git a/cephfs/file_test.go b/cephfs/file_test.go index 3324322..dd0239e 100644 --- a/cephfs/file_test.go +++ b/cephfs/file_test.go @@ -21,7 +21,7 @@ func TestFileOpen(t *testing.T) { assert.NotNil(t, f1) err = f1.Close() assert.NoError(t, err) - // TODO: clean up file + assert.NoError(t, mount.Unlink(fname)) }) t.Run("errorMissing", func(t *testing.T) { @@ -39,6 +39,7 @@ func TestFileOpen(t *testing.T) { assert.NotNil(t, f1) err = f1.Close() assert.NoError(t, err) + defer func() { assert.NoError(t, mount.Unlink(fname)) }() s, err := os.Stat(path.Join(CephMountDir, fname)) assert.NoError(t, err) @@ -59,6 +60,7 @@ func TestFileReadWrite(t *testing.T) { assert.EqualValues(t, 12, n) err = f1.Close() assert.NoError(t, err) + defer func() { assert.NoError(t, mount.Unlink(fname)) }() buf := make([]byte, 1024) f2, err := mount.Open(fname, os.O_RDONLY, 0) @@ -107,6 +109,7 @@ func TestFileReadWriteAt(t *testing.T) { assert.EqualValues(t, 3, n) err = f1.Close() assert.NoError(t, err) + defer func() { assert.NoError(t, mount.Unlink(fname)) }() buf := make([]byte, 4) f2, err := mount.Open(fname, os.O_RDONLY, 0) @@ -153,6 +156,7 @@ func TestFileInterfaces(t *testing.T) { f1, err := mount.Open(fname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) assert.NoError(t, err) defer func() { assert.NoError(t, f1.Close()) }() + defer func() { assert.NoError(t, mount.Unlink(fname)) }() var w io.Writer = f1 _, err = w.Write([]byte("foo")) @@ -167,6 +171,7 @@ func TestFileInterfaces(t *testing.T) { f1, err = mount.Open(fname, os.O_RDONLY, 0666) assert.NoError(t, err) defer func() { assert.NoError(t, f1.Close()) }() + defer func() { assert.NoError(t, mount.Unlink(fname)) }() var r io.Reader = f1 buf := make([]byte, 32) @@ -184,6 +189,7 @@ func TestFileSeek(t *testing.T) { f1, err := mount.Open(fname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) assert.NoError(t, err) defer func() { assert.NoError(t, f1.Close()) }() + defer func() { assert.NoError(t, mount.Unlink(fname)) }() o, err := f1.Seek(8, SeekSet) assert.NoError(t, err) @@ -198,6 +204,7 @@ func TestFileSeek(t *testing.T) { f1, err := mount.Open(fname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) assert.NoError(t, err) defer func() { assert.NoError(t, f1.Close()) }() + defer func() { assert.NoError(t, mount.Unlink(fname)) }() o, err := f1.Seek(8, 1776) assert.Error(t, err) @@ -208,6 +215,7 @@ func TestFileSeek(t *testing.T) { f1, err := mount.Open(fname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666) assert.NoError(t, err) defer func() { assert.NoError(t, f1.Close()) }() + defer func() { assert.NoError(t, mount.Unlink(fname)) }() o, err := f1.Seek(-22, SeekSet) assert.Error(t, err) diff --git a/cephfs/path.go b/cephfs/path.go index 5bde60e..a47b86f 100644 --- a/cephfs/path.go +++ b/cephfs/path.go @@ -44,3 +44,15 @@ func (mount *MountInfo) RemoveDir(path string) error { ret := C.ceph_rmdir(mount.mount, cPath) return getError(ret) } + +// Unlink removes a file. +// +// Implements: +// int ceph_unlink(struct ceph_mount_info *cmount, const char *path); +func (mount *MountInfo) Unlink(path string) error { + cPath := C.CString(path) + defer C.free(unsafe.Pointer(cPath)) + + ret := C.ceph_unlink(mount.mount, cPath) + return getError(ret) +}