[alsa-devel] [PATCH 2/2] hda-emu: Initial draft of test framework implementation
Takashi Iwai
tiwai at suse.de
Wed Aug 8 12:03:15 CEST 2012
At Wed, 08 Aug 2012 11:55:45 +0200,
David Henningsson wrote:
>
>
> So - this is mostly to satisfy your curiousity, to show how far I am
> with the framework. I don't know how much more it offers compared to the
> diff scripts you run at your side, so it's up to you whether you
> actually want to commit this now, or whether you want to wait for me to
> develop more tests (jack plug/unplug, set controls and such).
I see no reason to avoid committing :)
It's always good to keep in sync.
Applied both patches now. Thanks.
Takashi
>
>
> On 08/08/2012 11:54 AM, David Henningsson wrote:
> > Still work in progress, but it is starting to prove useful.
> >
> > Signed-off-by: David Henningsson <david.henningsson at canonical.com>
> > ---
> > tester/hda-emu-tester.py | 61 ++++++++++++++++++++++++++
> > tester/runall.sh | 3 ++
> > tester/runner.py | 109 ++++++++++++++++++++++++++++++++++++++++++++++
> > 3 files changed, 173 insertions(+)
> > create mode 100755 tester/hda-emu-tester.py
> > create mode 100755 tester/runall.sh
> > create mode 100644 tester/runner.py
> >
> > diff --git a/tester/hda-emu-tester.py b/tester/hda-emu-tester.py
> > new file mode 100755
> > index 0000000..a931651
> > --- /dev/null
> > +++ b/tester/hda-emu-tester.py
> > @@ -0,0 +1,61 @@
> > +#!/usr/bin/env python
> > +
> > +# hda-emu-tester - a test framework around hda-emu
> > +#
> > +# Written by David Henningsson <david.henningsson at canonical.com>
> > +#
> > +# Copyright 2012 Canonical Ltd.
> > +#
> > +# This program is free software: you can redistribute it and/or modify it
> > +# under the terms of the GNU General Public License version 3, as published
> > +# by the Free Software Foundation.
> > +#
> > +# This program is distributed in the hope that it will be useful, but
> > +# WITHOUT ANY WARRANTY; without even the implied warranties of
> > +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
> > +# PURPOSE. See the GNU General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU General Public License along
> > +# with this program. If not, see <http://www.gnu.org/licenses/>.
> > +
> > +def handle_argv():
> > + import argparse
> > + parser = argparse.ArgumentParser(description='Hda-emu automated test wrapper.')
> > + parser.add_argument('--file', dest='file', required=True, help='alsa-info filename')
> > + return parser.parse_args()
> > +
> > +def run_test(argv):
> > + import runner
> > + result = runner.HdaEmuRunner()
> > + result.set_alsa_info_file(argv.file)
> > + result.run_standard()
> > + return result
> > +
> > +def get_exit_code(result):
> > + if result.errors > 9:
> > + return 29
> > + if result.errors > 0:
> > + return 20 + result.errors
> > + if result.warnings > 9:
> > + return 19
> > + if result.warnings > 0:
> > + return 10 + result.warnings
> > + return 0
> > +
> > +def main():
> > + import sys
> > + try:
> > + argv_dict = handle_argv()
> > + result = run_test(argv_dict)
> > + exitcode = get_exit_code(result)
> > + if result.errors > 0 or result.warnings > 0:
> > + print '{0} errors, {1} warnings. ({2})'.format(result.errors, result.warnings, argv_dict.file)
> > + except:
> > + import traceback
> > + traceback.print_exc()
> > + sys.exit(99)
> > +
> > + sys.exit(exitcode)
> > +
> > +if __name__ == "__main__":
> > + main()
> > diff --git a/tester/runall.sh b/tester/runall.sh
> > new file mode 100755
> > index 0000000..d078f35
> > --- /dev/null
> > +++ b/tester/runall.sh
> > @@ -0,0 +1,3 @@
> > +#!/bin/sh
> > +find ../codecs/canonical/ -type f | sort | xargs -n1 ./hda-emu-tester.py --file
> > +
> > diff --git a/tester/runner.py b/tester/runner.py
> > new file mode 100644
> > index 0000000..28953be
> > --- /dev/null
> > +++ b/tester/runner.py
> > @@ -0,0 +1,109 @@
> > +# hda-emu-tester - a test framework around hda-emu
> > +#
> > +# Written by David Henningsson <david.henningsson at canonical.com>
> > +#
> > +# Copyright 2012 Canonical Ltd.
> > +#
> > +# This program is free software: you can redistribute it and/or modify it
> > +# under the terms of the GNU General Public License version 3, as published
> > +# by the Free Software Foundation.
> > +#
> > +# This program is distributed in the hope that it will be useful, but
> > +# WITHOUT ANY WARRANTY; without even the implied warranties of
> > +# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
> > +# PURPOSE. See the GNU General Public License for more details.
> > +#
> > +# You should have received a copy of the GNU General Public License along
> > +# with this program. If not, see <http://www.gnu.org/licenses/>.
> > +
> > +import subprocess
> > +import os
> > +
> > +class HdaEmuRunner():
> > +
> > + def __init__(self):
> > + self.child_args = "../hda-emu -M -F"
> > + self.alsa_info = "/proc/asound/card0/codec#0"
> > + self.errors = 0
> > + self.warnings = 0
> > +
> > + def set_alsa_info_file(self, filename):
> > + self.alsa_info = filename
> > +
> > + def start_process(self):
> > + import shlex
> > + from subprocess import PIPE, STDOUT
> > +
> > + args = shlex.split(self.child_args)
> > + args.append(self.alsa_info)
> > + self.child = subprocess.Popen(args, bufsize=0, stdin=PIPE, stdout=PIPE, stderr=PIPE)
> > +
> > + def stop_process(self):
> > + if self.child is None:
> > + return
> > + self.child.terminate()
> > + self.child.wait()
> > + self.child = None
> > +
> > +
> > + def check_stdout(self):
> > + s = os.read(self.child.stdout.fileno(), 65536)
> > + # print "Stdout received (", len(s), ")"
> > + if s == "":
> > + print "Unexpected EOF of stdout (hda-emu crashed?)"
> > + self.errors += 1
> > + return
> > + self.stdout_total += s
> > +
> > + q, _, self.stdout_total = self.stdout_total.rpartition('\n')
> > + for s in q.splitlines():
> > + if s.startswith("Error:"):
> > + self.errors += 1
> > + # print s
> > + if s.startswith("Warning:"):
> > + self.warnings += 1
> > + # print s
> > +
> > + def check_stderr(self):
> > + s = os.read(self.child.stderr.fileno(), 65536)
> > + # print "Stderr received (", len(s), ")"
> > + if s == "":
> > + print "Unexpected EOF of stderr (hda-emu crashed?)"
> > + self.errors += 1
> > + return False
> > + if s == "> ":
> > + return True
> > + print "Unexpected stderr output: '" + prompt + "'"
> > + self.errors += 1
> > + return False
> > +
> > + def run_command(self, command=None):
> > + if command:
> > + self.child.stdin.write(command + '\n')
> > + self.child.stdin.flush()
> > +
> > + import select
> > + self.stdout_total = ""
> > + pipelist = [self.child.stdout, self.child.stderr]
> > + while True:
> > + readable, _, broken = select.select(pipelist, [], pipelist, 3)
> > + for q in broken:
> > + print "Broken pipe (hda-emu crashed?)"
> > + self.errors += 1
> > + return
> > + if readable == []:
> > + print "Timeout waiting for hda-emu"
> > + self.errors += 1
> > + return
> > + if self.child.stdout in readable:
> > + self.check_stdout()
> > + if self.child.stderr in readable:
> > + if self.check_stderr():
> > + return
> > +
> > + def run_standard(self):
> > + self.start_process()
> > + self.run_command() # Initial parsing
> > + self.run_command("pm") # S3 test
> > + self.stop_process()
> > +
> >
>
>
>
> --
> David Henningsson, Canonical Ltd.
> https://launchpad.net/~diwic
>
More information about the Alsa-devel
mailing list