summaryrefslogtreecommitdiff
path: root/morph
diff options
context:
space:
mode:
authorLars Wirzenius <lars.wirzenius@codethink.co.uk>2011-12-09 17:03:04 +0000
committerLars Wirzenius <lars.wirzenius@codethink.co.uk>2011-12-09 17:14:56 +0000
commitd441caf6b9620dbe10eb51d31d6d6055c9161ae0 (patch)
treedf2e78c151ee0404fa467e6755bbe78517cd65e6 /morph
parentc90af8cff7819d40d0fdd14f1ea9c162f7d5d7d2 (diff)
downloadmorph-d441caf6b9620dbe10eb51d31d6d6055c9161ae0.tar.gz
add a "morph test" command
Diffstat (limited to 'morph')
-rwxr-xr-xmorph50
1 files changed, 50 insertions, 0 deletions
diff --git a/morph b/morph
index eda5cf58..84ccefbc 100755
--- a/morph
+++ b/morph
@@ -55,7 +55,27 @@ class Morph(cliapp.Application):
'DANGEROUS and will install stuff on your '
'system')
+ self.settings.boolean(['test-console'],
+ 'show what the system outputs on the serial '
+ 'console during tests')
+ self.settings.integer(['test-timeout'],
+ 'abort test if system doesn\'t produce '
+ 'expected output in TIMEOUT seconds '
+ '(default: %default)',
+ metavar='TIMEOUT',
+ default=10)
+
def cmd_build(self, args):
+ '''Build a binary from a morphology.
+
+ Command line arguments are the repository, git tree-ish reference,
+ and morphology filename. The binary gets put into the cache.
+
+ (The triplet of command line arguments may be repeated as many
+ times as necessary.)
+
+ '''
+
tempdir = morphlib.tempdir.Tempdir()
builder = morphlib.builder.Builder(tempdir, self)
@@ -73,6 +93,36 @@ class Morph(cliapp.Application):
if args:
raise cliapp.AppException('Extra args on command line: %s' % args)
+ def cmd_testsysimg(self, args):
+ '''Run tests for a built system image.
+
+ Command line arguments are the filename of the system image,
+ and the filenames of the Python modules that contain the test
+ "stories". Each module must have a variable called "story",
+ which is a list of tuples. Each tuple is either two strings
+ (one to send, the other a regular expression for what is expected
+ in return), or two strings and a timeout in seconds.
+
+ testsysimg runs the image under KVM, and accesses it via a
+ serial console, and runs the test stories, one by one.
+
+ '''
+
+ if not args:
+ raise cliapp.AppException('Missing command line arguments. '
+ 'Run with --help to see usage.')
+
+ system = morphlib.tester.KvmSystem(args[0],
+ verbose=self.settings['test-console'],
+ timeout=self.settings['test-timeout'])
+
+ for filename in args[1:]:
+ self.msg('Running %s' % filename)
+ module = morphlib.tester.load_module(filename)
+ story_steps = getattr(module, 'story')
+ story = morphlib.tester.TestStory(system, story_steps, self.msg)
+ story.run()
+ self.msg('Finished OK.')
def msg(self, msg):
'''Show a message to the user about what is going on.'''