Message ID | 1240955328-23358-2-git-send-email-dhuff@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
David Huff wrote: > This will allow for adding of additional tests with out modifying the "code." > > One would just add the testname.py file to the test_dir and edit the comfig file. > --- > client/tests/kvm_runtest_2/kvm_runtest_2.py | 32 +++++++++++++++++++------- > 1 files changed, 23 insertions(+), 9 deletions(-) > > diff --git a/client/tests/kvm_runtest_2/kvm_runtest_2.py b/client/tests/kvm_runtest_2/kvm_runtest_2.py > index fda7282..b6477f5 100644 > --- a/client/tests/kvm_runtest_2/kvm_runtest_2.py > +++ b/client/tests/kvm_runtest_2/kvm_runtest_2.py > @@ -2,6 +2,7 @@ > > import sys > import os > +import inspect > import time > import shelve > import random > @@ -21,26 +22,26 @@ class test_routine: > class kvm_runtest_2(test.test): > version = 1 > > + > def setup(self): > pass > > def initialize(self): > - # Define the test routines corresponding to different values of the 'type' field > + # directory where to look for tests > + self.test_dir = os.path.join(self.bindir, "kvm_tests") > + > + # pre-defined the test routines corresponding to different values of the 'type' field > self.test_routines = { > - # type module name routine > + # type module name routine name > "steps": test_routine("kvm_guest_wizard", "run_steps"), > "stepmaker": test_routine("stepmaker", "run_stepmaker"), > - "boot": test_routine("kvm_tests", "run_boot"), > - "migration": test_routine("kvm_tests", "run_migration"), > - "yum_update": test_routine("kvm_tests", "run_yum_update"), > - "autotest": test_routine("kvm_tests", "run_autotest"), > "kvm_install": test_routine("kvm_install", "run_kvm_install"), > - "linux_s3": test_routine("kvm_tests", "run_linux_s3"), > } > - > + > # Make it possible to import modules from the test's bindir > sys.path.append(self.bindir) > - > + sys.path.append(self.test_dir) > + > def run_once(self, params): > import kvm_log > import kvm_utils > @@ -74,6 +75,12 @@ class kvm_runtest_2(test.test): > type = params.get("type") > routine_obj = self.test_routines.get(type) If routine_obj exists, use it, instead of dynamically load according to type. > # If type could not be found in self.test_routines... > + # look for test in kvm_tests directory, where type = 'testname' > + # defined in file 'testname'.py and test routine method run_'testname' > + if os.path.isfile(os.path.join(self.test_dir,type+".py")): > + module_name = type > + routine_name = "run_"+module_name > + routine_obj = test_routine(moudule_name,routine_name) 1. Nit: Please leave a space after comma. 2. Typo moudule_name. > if not routine_obj: > message = "Unsupported test type: %s" % type > kvm_log.error(message) > @@ -83,6 +90,13 @@ class kvm_runtest_2(test.test): > # Dynamically import the module > module = __import__(routine_obj.module_name) > # Get the needed routine > + try: > + inspect.isfunction(eval("module."+routine_obj.routine_name)) 1. Nit: f = eval("module."+routine_obj.routine_name) inspect.isfunction(f) ... routing_obj.routing = f 2. If you call inspect.isfunction(), check its return-value. It can return false. ( If you do not call inspect it would fail later when routine_obj.routine is called ). Regards, Uri. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/client/tests/kvm_runtest_2/kvm_runtest_2.py b/client/tests/kvm_runtest_2/kvm_runtest_2.py index fda7282..b6477f5 100644 --- a/client/tests/kvm_runtest_2/kvm_runtest_2.py +++ b/client/tests/kvm_runtest_2/kvm_runtest_2.py @@ -2,6 +2,7 @@ import sys import os +import inspect import time import shelve import random @@ -21,26 +22,26 @@ class test_routine: class kvm_runtest_2(test.test): version = 1 + def setup(self): pass def initialize(self): - # Define the test routines corresponding to different values of the 'type' field + # directory where to look for tests + self.test_dir = os.path.join(self.bindir, "kvm_tests") + + # pre-defined the test routines corresponding to different values of the 'type' field self.test_routines = { - # type module name routine + # type module name routine name "steps": test_routine("kvm_guest_wizard", "run_steps"), "stepmaker": test_routine("stepmaker", "run_stepmaker"), - "boot": test_routine("kvm_tests", "run_boot"), - "migration": test_routine("kvm_tests", "run_migration"), - "yum_update": test_routine("kvm_tests", "run_yum_update"), - "autotest": test_routine("kvm_tests", "run_autotest"), "kvm_install": test_routine("kvm_install", "run_kvm_install"), - "linux_s3": test_routine("kvm_tests", "run_linux_s3"), } - + # Make it possible to import modules from the test's bindir sys.path.append(self.bindir) - + sys.path.append(self.test_dir) + def run_once(self, params): import kvm_log import kvm_utils @@ -74,6 +75,12 @@ class kvm_runtest_2(test.test): type = params.get("type") routine_obj = self.test_routines.get(type) # If type could not be found in self.test_routines... + # look for test in kvm_tests directory, where type = 'testname' + # defined in file 'testname'.py and test routine method run_'testname' + if os.path.isfile(os.path.join(self.test_dir,type+".py")): + module_name = type + routine_name = "run_"+module_name + routine_obj = test_routine(moudule_name,routine_name) if not routine_obj: message = "Unsupported test type: %s" % type kvm_log.error(message) @@ -83,6 +90,13 @@ class kvm_runtest_2(test.test): # Dynamically import the module module = __import__(routine_obj.module_name) # Get the needed routine + try: + inspect.isfunction(eval("module."+routine_obj.routine_name)) + except Exception, e: + kvm_log.error("Test failed: %s" % e) + kvm_log.error("could not load:%s" % eval("module."+routine_obj.routine_name)) + raise + routine_obj.routine = eval("module." + routine_obj.routine_name) # Preprocess