Improve SDL API function argument validation
Improve SDL API set() function argument validation to cover also dictionary items.
Issue-ID: RIC-379.
Signed-off-by: Timo Tietavainen <timo.tietavainen@nokia.com>
Change-Id: I006ec530e0127a731f96154088e29b3b9d0e49c6
diff --git a/docs/release-notes.rst b/docs/release-notes.rst
index 257c772..bd884a6 100644
--- a/docs/release-notes.rst
+++ b/docs/release-notes.rst
@@ -33,6 +33,10 @@
Version history
---------------
+[2.0.4] - 2020-05-13
+
+* Enhance SDL API set() function argument validation to cover also dictionary items.
+
[2.0.3] - 2020-01-22
* Add a new SDL storage API function `is_active()` to check healthiness of SDL instance.
diff --git a/ricsdl-package/ricsdl/__init__.py b/ricsdl-package/ricsdl/__init__.py
index 8d4b484..b4e3750 100644
--- a/ricsdl-package/ricsdl/__init__.py
+++ b/ricsdl-package/ricsdl/__init__.py
@@ -31,7 +31,7 @@
)
-__version__ = '2.0.3'
+__version__ = '2.0.4'
__all__ = [
diff --git a/ricsdl-package/ricsdl/syncstorage.py b/ricsdl-package/ricsdl/syncstorage.py
index 29adb17..0a2d9b3 100644
--- a/ricsdl-package/ricsdl/syncstorage.py
+++ b/ricsdl-package/ricsdl/syncstorage.py
@@ -143,6 +143,7 @@
@func_arg_checker(SdlTypeError, 1, ns=str, data_map=dict)
def set(self, ns: str, data_map: Dict[str, bytes]) -> None:
+ self._validate_key_value_dict(data_map)
self.__dbbackend.set(ns, data_map)
@func_arg_checker(SdlTypeError, 1, ns=str, key=str, old_data=bytes, new_data=bytes)
@@ -216,3 +217,11 @@
def get_configuration(self) -> _Configuration:
"""Return configuration what was valid when the SDL instance was initiated."""
return self.__configuration
+
+ @classmethod
+ def _validate_key_value_dict(cls, kv):
+ for k, v in kv.items():
+ if not isinstance(k, str):
+ raise SdlTypeError(r"Wrong dict key type: {}={}. Must be: str".format(k, type(k)))
+ if not isinstance(v, bytes):
+ raise SdlTypeError(r"Wrong dict value type: {}={}. Must be: bytes".format(v, type(v)))
diff --git a/ricsdl-package/tests/test_syncstorage.py b/ricsdl-package/tests/test_syncstorage.py
index 29fd5d4..7fb08dc 100644
--- a/ricsdl-package/tests/test_syncstorage.py
+++ b/ricsdl-package/tests/test_syncstorage.py
@@ -74,6 +74,10 @@
self.storage.set(123, {'a': b'v1'})
with pytest.raises(SdlTypeError):
self.storage.set('ns', [1, 2])
+ with pytest.raises(SdlTypeError):
+ self.storage.set('ns', {0xbad: b'v1'})
+ with pytest.raises(SdlTypeError):
+ self.storage.set('ns', {'a': 0xbad})
def test_set_if_function_success(self):
self.mock_db_backend.set_if.return_value = True