rbd: additional error checking in GetPoolMetadata, SetPoolMetadata and RemovePoolMetadata

added a check to validate ioctx in all the three *PoolMetadata functions

Signed-off-by: Mudit Agarwal <muagarwa@redhat.com>
This commit is contained in:
Mudit Agarwal 2020-06-11 07:32:12 +05:30 committed by John Mulligan
parent 624230cdbd
commit 7be8bbfe81
2 changed files with 30 additions and 0 deletions

View File

@ -23,6 +23,10 @@ import (
// Implements:
// int rbd_pool_metadata_get(rados_ioctx_t io_ctx, const char *key, char *value, size_t *val_len);
func GetPoolMetadata(ioctx *rados.IOContext, key string) (string, error) {
if ioctx == nil {
return "", ErrNoIOContext
}
cKey := C.CString(key)
defer C.free(unsafe.Pointer(cKey))
@ -52,6 +56,10 @@ func GetPoolMetadata(ioctx *rados.IOContext, key string) (string, error) {
// Implements:
// int rbd_pool_metadata_set(rados_ioctx_t io_ctx, const char *key, const char *value);
func SetPoolMetadata(ioctx *rados.IOContext, key, value string) error {
if ioctx == nil {
return ErrNoIOContext
}
cKey := C.CString(key)
defer C.free(unsafe.Pointer(cKey))
cValue := C.CString(value)
@ -66,6 +74,10 @@ func SetPoolMetadata(ioctx *rados.IOContext, key, value string) error {
// Implements:
// int rbd_pool_metadata_remove(rados_ioctx_t io_ctx, const char *key)
func RemovePoolMetadata(ioctx *rados.IOContext, key string) error {
if ioctx == nil {
return ErrNoIOContext
}
cKey := C.CString(key)
defer C.free(unsafe.Pointer(cKey))

View File

@ -30,6 +30,24 @@ func TestPoolMetadata(t *testing.T) {
assert.Error(t, err)
})
t.Run("NullKey", func(t *testing.T) {
_, err := GetPoolMetadata(ioctx, "")
assert.Error(t, err)
err = SetPoolMetadata(ioctx, "", "")
assert.NoError(t, err)
err = RemovePoolMetadata(ioctx, "")
assert.NoError(t, err)
})
t.Run("NullIOContext", func(t *testing.T) {
_, err := GetPoolMetadata(nil, "someKey")
assert.Error(t, err)
err = SetPoolMetadata(nil, "someKey", "someValue")
assert.Error(t, err)
err = RemovePoolMetadata(nil, "someKey")
assert.Error(t, err)
})
t.Run("SetGetValues", func(t *testing.T) {
var (
key1 = "key1"