71 lines
1.9 KiB
Python
71 lines
1.9 KiB
Python
#!/usr/bin/python
|
|
|
|
"""Test argspec functions"""
|
|
|
|
import inspect
|
|
import os.path
|
|
import sys
|
|
import unittest
|
|
|
|
import koji.tasks
|
|
|
|
|
|
# jump through hoops to import kojid
|
|
KOJID_FILENAME = os.path.dirname(__file__) + "/../builder/kojid"
|
|
if sys.version_info[0] >= 3:
|
|
import importlib.util
|
|
spec = importlib.util.spec_from_file_location("kojid", KOJID_FILENAME)
|
|
kojid = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(kojid)
|
|
else:
|
|
import imp
|
|
kojid = imp.load_source('koji_kojid', KOJID_FILENAME)
|
|
|
|
|
|
class ParseTaskParamsCase(unittest.TestCase):
|
|
"""Main test case container"""
|
|
|
|
def test_parse_task_params(self):
|
|
"""Test parse_task_params"""
|
|
|
|
# simple case
|
|
ret = koji.tasks.parse_task_params('sleep', [4])
|
|
self.assertEqual(ret, {'n':4})
|
|
|
|
# bad args
|
|
with self.assertRaises(koji.ParameterError):
|
|
koji.tasks.parse_task_params('sleep', [4, 5])
|
|
|
|
# bad method
|
|
with self.assertRaises(TypeError):
|
|
koji.tasks.parse_task_params('MISSINGMETHOD', [1,2,3])
|
|
|
|
# new style
|
|
params = {'__method__': 'hello', 'n': 1}
|
|
ret = koji.tasks.parse_task_params('hello', [params])
|
|
del params['__method__']
|
|
self.assertEqual(ret, params)
|
|
self.assertIsNot(ret, params)
|
|
# ^data should be copied
|
|
|
|
|
|
def test_legacy_data(self):
|
|
for method in koji.tasks.LEGACY_SIGNATURES:
|
|
for mod in kojid, koji.tasks:
|
|
h_class = getattr(mod, method, None)
|
|
if h_class:
|
|
break
|
|
else:
|
|
continue
|
|
|
|
spec = inspect.getargspec(h_class.handler)
|
|
# unbound method, so strip "self"
|
|
spec.args.pop(0)
|
|
|
|
# for the methods we have, at least one of the signatures should
|
|
# match
|
|
self.assertIn(argspec, koji.tasks.LEGACY_SIGNATURES[method])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|