Change in vdsm[master]: tests: type checking for primitive types
fromani at redhat.com
fromani at redhat.com
Mon Jun 16 10:59:14 UTC 2014
Francesco Romani has uploaded a new change for review.
Change subject: tests: type checking for primitive types
......................................................................
tests: type checking for primitive types
This patch adds type checking for the return types of the API.
Only primitive types (bool, *int, float, str) are supported;
full type checking, including enum values and types defined
in the schema, will be implemented in future patches.
This will help avoiding future mistakes like the one fixed in
http://gerrit.ovirt.org/#/c/28781/1
Change-Id: I8463b5148e710bbb3b336d4b79fae183a71d89da
Signed-off-by: Francesco Romani <fromani at redhat.com>
---
M tests/vmApiTests.py
1 file changed, 54 insertions(+), 4 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/02/28802/1
diff --git a/tests/vmApiTests.py b/tests/vmApiTests.py
index a616d45..4c84d59 100644
--- a/tests/vmApiTests.py
+++ b/tests/vmApiTests.py
@@ -40,6 +40,36 @@
vm._vmStats.stop()
+def isBool(value):
+ return value in ('true', 'false')
+
+
+def isInt(value):
+ try:
+ return str(int(value)) == value
+ except ValueError:
+ return False
+
+
+def isFloat(value):
+ try:
+ float(value)
+ return True
+ except ValueError:
+ return False
+
+
+def isStr(value):
+ return isinstance(value, str)
+
+
+PRIMITIVE_TYPES = {
+ 'bool': isBool,
+ 'int': isInt, 'uint': isInt,
+ 'float': isFloat,
+ 'str': isStr}
+
+
class TestVmStats(TestCaseBase):
@utils.memoized
def _getAPI(self):
@@ -50,16 +80,36 @@
return vdsmapi.get_api(apiPath)
def assertVmStatsSchemaCompliancy(self, schema, stats):
+ def isOptional(apiItem):
+ return apiItem[0] == '*'
+
+ def getApiItemName(apiItem):
+ return apiItem[1:] if isOptional(apiItem) else apiItem
+
+ def assertTypeCompliancy(stats, apiName, apiType):
+ if apiName in ('displayPort', 'displaySecurePort',
+ 'guestCPUCount'):
+ # known exceptions. FIXME: fix these.
+ return
+ if isinstance(apiType, str) and apiType in PRIMITIVE_TYPES:
+ self.assertTrue(
+ PRIMITIVE_TYPES[apiType](stats[apiName]),
+ "%s (%s) is not %s" % (
+ apiName, str(stats[apiName]), apiType))
+ # TODO: more type checking
+
api = self._getAPI()
ref = api['types'][schema]['data']
for apiItem, apiType in ref.items():
- if apiItem[0] == '*':
+ apiName = getApiItemName(apiItem)
+ if isOptional(apiItem):
# optional, may be absent and it is fine
- self.assertTrue(stats.get(apiItem[1:], True))
+ if apiName in stats:
+ assertTypeCompliancy(stats, apiName, apiType)
else:
# mandatory
- self.assertIn(apiItem, stats)
- # TODO: type checking
+ self.assertIn(apiName, stats)
+ assertTypeCompliancy(stats, apiName, apiType)
def testDownStats(self):
with FakeVM() as fake:
--
To view, visit http://gerrit.ovirt.org/28802
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I8463b5148e710bbb3b336d4b79fae183a71d89da
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Francesco Romani <fromani at redhat.com>
More information about the vdsm-patches
mailing list