From patchwork Wed Jun 3 05:47:49 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Goldish X-Patchwork-Id: 27612 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n535m7k0008822 for ; Wed, 3 Jun 2009 05:48:07 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752107AbZFCFrt (ORCPT ); Wed, 3 Jun 2009 01:47:49 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752031AbZFCFrt (ORCPT ); Wed, 3 Jun 2009 01:47:49 -0400 Received: from mx1.redhat.com ([66.187.233.31]:47244 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751805AbZFCFrs (ORCPT ); Wed, 3 Jun 2009 01:47:48 -0400 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n535loGw005595 for ; Wed, 3 Jun 2009 01:47:50 -0400 Received: from mail05.corp.redhat.com (zmail05.collab.prod.int.phx2.redhat.com [10.5.5.46]) by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n535lnQq002225; Wed, 3 Jun 2009 01:47:49 -0400 Date: Wed, 3 Jun 2009 01:47:49 -0400 (EDT) From: Michael Goldish To: David Huff Cc: kvm@vger.kernel.org Message-ID: <1152256503.1061111244008069064.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> In-Reply-To: <346382647.1061041244007938766.JavaMail.root@zmail05.collab.prod.int.phx2.redhat.com> Subject: Re: [PATCH] Modified kvm_runtest_2.py to look for tests in kvm_tests/ MIME-Version: 1.0 X-Originating-IP: [10.5.5.71] X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Regardless of whether the idea should be implemented, I think the code can be simplified a bit, to look something like this: type = params.get("type") routine_obj = self.test_routines.get(type) if routine_obj: module_name = routine_obj.module_name routine_name = routine_obj.routine_name else: module_name = type routine_name = "run_" + type try: module = __import__(module_name) routine = eval("module." + routine_name) except: raise error.TestError("Could not find test routine for type '%s'" % type) # Preprocess ... Obviously this means that routine will be used instead of routine_obj.routine throughout the rest of run_once. We don't need inspect because if there's anything wrong with ., the test will fail anyway and print the exception info like it does for normal failures. Also, there's no need to store test_dir as an attribute. Just do: sys.path.append(os.path.join(self.bindir, "kvm_tests")) Let me know what you think. ----- Original Message ----- From: "David Huff" To: kvm@vger.kernel.org Cc: "David Huff" Sent: Tuesday, May 26, 2009 7:27:00 PM (GMT+0200) Auto-Detected Subject: [PATCH] Modified kvm_runtest_2.py to look for tests in kvm_tests/ 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. fixed typo --- 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..6420191 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(module_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