This patch allows you to have tests/a/b/foo, rather than just tests/foo
eg. this:
job.run_test('a.sleeptest', seconds = 1)
job.run_test('b.c.sleeptest', seconds = 1)
Results in:
START ---- ---- timestamp=1269622268 localtime=Mar 26 09:51:08
START a.sleeptest a.sleeptest timestamp=1269622268
localtime=Mar 26 09:51:08
GOOD a.sleeptest a.sleeptest
timestamp=1269622270 localtime=Mar 26 09:51:10 completed
successfully
END GOOD a.sleeptest a.sleeptest
timestamp=1269622270 localtime=Mar 26 09:51:10
START b.c.sleeptest b.c.sleeptest timestamp=1269622270
localtime=Mar 26 09:51:10
GOOD b.c.sleeptest b.c.sleeptest
timestamp=1269622272 localtime=Mar 26 09:51:12 completed
successfully
END GOOD b.c.sleeptest b.c.sleeptest
timestamp=1269622272 localtime=Mar 26 09:51:12
END GOOD ---- ---- timestamp=1269622272 localtime=Mar
26 09:51:12
and picks up from tests/a/sleeptest and tests/b/c/sleeptest
Signed-off-by: Martin J. Bligh <[email protected]>
Index: client/common_lib/test.py
===================================================================
--- client/common_lib/test.py (revision 4348)
+++ client/common_lib/test.py (working copy)
@@ -615,62 +615,55 @@
# if this is not a plain test name then download and install the
# specified test
if url.endswith('.tar.bz2'):
- (group, testname) = _installtest(job, url)
- bindir = os.path.join(job.testdir, 'download', group, testname)
+ (testgroup, testname) = _installtest(job, url)
+ bindir = os.path.join(job.testdir, 'download', testgroup, testname)
+ importdir = os.path.join(testdir, 'download', testgroup)
site_bindir = None
+ modulename = '%s.%s' % (re.sub('/', '.', testgroup), testname)
+ classname = '%s.%s' % (modulename, testname)
+ path = testname
else:
- # if the test is local, it can be found in either testdir
- # or site_testdir. tests in site_testdir override tests
- # defined in testdir
- (group, testname) = ('', url)
- bindir = os.path.join(job.testdir, group, testname)
- if hasattr(job, 'site_testdir'):
- site_bindir = os.path.join(job.site_testdir,
- group, testname)
- else:
- site_bindir = None
+ # If the test is local, it may be under either testdir or site_testdir.
+ # Tests in site_testdir override tests defined in testdir
+ testname = path = url
+ testgroup = ''
+ path = re.sub('\.', '/', testname)
+ modulename = os.path.basename(path)
+ classname = '%s.%s' % (modulename, modulename)
- # The job object here can be that of a server side job or a client
- # side job. 'install_pkg' method won't be present for server side
- # jobs, so do the fetch only if that method is present in the job
- # obj.
+ # Try installing the test package
+ # The job object may be either a server side job or a client side job.
+ # 'install_pkg' method will be present only if it's a client side job.
if hasattr(job, 'install_pkg'):
try:
+ bindir = os.path.join(job.testdir, testname)
job.install_pkg(testname, 'test', bindir)
except error.PackageInstallError, e:
# continue as a fall back mechanism and see if the test code
# already exists on the machine
pass
+ bindir = testdir = None
+ for dir in [job.testdir, getattr(job, 'site_testdir', None)]:
+ if dir is not None and os.path.exists(os.path.join(dir, path)):
+ testdir = dir
+ importdir = bindir = os.path.join(dir, path)
+ if not bindir:
+ raise error.TestError(testname + ': test does not exist')
+
outputdir = os.path.join(job.resultdir, testname)
if tag:
outputdir += '.' + tag
- # if we can find the test in site_bindir, use this version
- if site_bindir and os.path.exists(site_bindir):
- bindir = site_bindir
- testdir = job.site_testdir
- elif os.path.exists(bindir):
- testdir = job.testdir
- else:
- raise error.TestError(testname + ': test does not exist')
-
local_namespace['job'] = job
local_namespace['bindir'] = bindir
local_namespace['outputdir'] = outputdir
- if group:
- sys.path.insert(0, os.path.join(testdir, 'download'))
- group += '.'
- else:
- sys.path.insert(0, os.path.join(testdir, testname))
-
+ sys.path.insert(0, importdir)
try:
- exec ("import %s%s" % (group, testname),
+ exec ('import %s' % modulename, local_namespace, global_namespace)
+ exec ("mytest = %s(job, bindir, outputdir)" % classname,
local_namespace, global_namespace)
- exec ("mytest = %s%s.%s(job, bindir, outputdir)" %
- (group, testname, testname),
- local_namespace, global_namespace)
finally:
sys.path.pop(0)
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest