cephfs: add MountWithRoot to implement the root arg to ceph_mount

The existing Mount() method did not provide a way to access the root
path argument to ceph_mount. This new function allows the caller to
specify an alternate root dir for the mount.

Signed-off-by: John Mulligan <jmulligan@redhat.com>
This commit is contained in:
John Mulligan 2020-02-13 17:18:01 -05:00 committed by Niels de Vos
parent d2e8f936b2
commit 8948b20f5a
2 changed files with 63 additions and 0 deletions

View File

@ -91,6 +91,17 @@ func (mount *MountInfo) Mount() error {
return getError(ret) return getError(ret)
} }
// MountWithRoot mounts the file system using the path provided for the root of
// the mount. This establishes a connection capable of I/O.
//
// Implements:
// int ceph_mount(struct ceph_mount_info *cmount, const char *root);
func (mount *MountInfo) MountWithRoot(root string) error {
croot := C.CString(root)
defer C.free(unsafe.Pointer(croot))
return getError(C.ceph_mount(mount.mount, croot))
}
// Unmount the file system. // Unmount the file system.
// //
// Implements: // Implements:

View File

@ -276,3 +276,55 @@ func TestMdsCommandError(t *testing.T) {
assert.NotEqual(t, "", string(info)) assert.NotEqual(t, "", string(info))
assert.Contains(t, string(info), "unparseable JSON") assert.Contains(t, string(info), "unparseable JSON")
} }
func TestMountWithRoot(t *testing.T) {
bMount := fsConnect(t)
defer func() {
assert.NoError(t, bMount.Unmount())
assert.NoError(t, bMount.Release())
}()
dir1 := "/test-mount-with-root"
err := bMount.MakeDir(dir1, 0755)
assert.NoError(t, err)
defer bMount.RemoveDir(dir1)
sub1 := "/i.was.here"
dir2 := dir1 + sub1
err = bMount.MakeDir(dir2, 0755)
assert.NoError(t, err)
defer bMount.RemoveDir(dir2)
t.Run("withRoot", func(t *testing.T) {
mount, err := CreateMount()
require.NoError(t, err)
require.NotNil(t, mount)
defer func() {
assert.NoError(t, mount.Unmount())
assert.NoError(t, mount.Release())
}()
err = mount.ReadDefaultConfigFile()
require.NoError(t, err)
err = mount.MountWithRoot(dir1)
assert.NoError(t, err)
err = mount.ChangeDir(sub1)
assert.NoError(t, err)
})
t.Run("badRoot", func(t *testing.T) {
mount, err := CreateMount()
require.NoError(t, err)
require.NotNil(t, mount)
defer func() {
assert.NoError(t, mount.Release())
}()
err = mount.ReadDefaultConfigFile()
require.NoError(t, err)
err = mount.MountWithRoot("/i-yam-what-i-yam")
assert.Error(t, err)
})
}