#!/usr/bin/python # testkernel # # Create a config that builds the kernel+patches specified, # then runs the tests specified in the control file supplied. # # Run that control file on the comma-separated list of machines supplied # by dumping a control file in $AUTOTEST_DIR/queue/machine. import os, sys, time if len(sys.argv) < 5: print "Usage: testkernel " sys.exit(1) (client, control, kernel, config) = sys.argv[1:5] if len(sys.argv) > 5: patches = sys.argv[5:] else: patches = [] # Need to be careful to create the control file atomically, so don't end up # executing half of it. Try to create it in the same filesystem, then move it. queuedir = os.path.join(os.environ['AUTOTEST_DIR'], 'queue') tmpfile = os.path.join(queuedir, 'tmp_control.%d' % os.getpid()) c = open(tmpfile, 'w') print >> c, "def step_init():" print >> c, "\t" + "job.next_step([step_test])" print >> c, "\t" + "testkernel = job.kernel('%s')" % kernel if patches: patch_list = ', '.join(["'%s'" % x for x in patches]) print >> c, "\t" + "testkernel.patch(%s)" % patch_list print >> c, "\t" + "testkernel.config('%s')" % config print >> c, "\t" + "testkernel.build()" print >> c, "\t" + "testkernel.boot()" print >> c, "" print >> c, "def step_test():" for line in open(control, 'r'): print >> c, "\t" + line, c.close() # This is pretty revolting, but will do as a hack for testing jobname = os.path.basename(control) + '.' + os.path.basename(kernel) output = os.path.join(queuedir, client, jobname) if os.path.exists(output): output += ".%d" % int(time.time()) os.rename(tmpfile, output)