oeqa.buildperf: introduce runCmd2()

Special runCmd() for build perf tests which doesn't raise an
AssertionError when the command fails. This causes command failures to
be detected as test errors instead of test failures. This way "failed"
state of tests is reserved for future making it possible to set e.g.
thresholds for certain measurement results.

(From OE-Core rev: 09590ac76a19ee1b1b4a9188f7fce5029f0de52a)

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Markus Lehtonen 2016-06-29 19:45:41 +03:00 committed by Richard Purdie
parent f4128f0e46
commit d82a795683
2 changed files with 12 additions and 6 deletions

View File

@ -14,5 +14,6 @@ from .base import (BuildPerfTestCase,
BuildPerfTestLoader,
BuildPerfTestResult,
BuildPerfTestRunner,
KernelDropCaches)
KernelDropCaches,
runCmd2)
from .test_basic import *

View File

@ -21,6 +21,7 @@ import time
import traceback
import unittest
from datetime import datetime, timedelta
from functools import partial
from oeqa.utils.commands import runCmd, get_bb_vars
from oeqa.utils.git import GitError, GitRepo
@ -28,6 +29,10 @@ from oeqa.utils.git import GitError, GitRepo
# Get logger for this module
log = logging.getLogger('build-perf')
# Our own version of runCmd which does not raise AssertErrors which would cause
# errors to interpreted as failures
runCmd2 = partial(runCmd, assert_error=False)
class KernelDropCaches(object):
"""Container of the functions for dropping kernel caches"""
@ -39,7 +44,7 @@ class KernelDropCaches(object):
from getpass import getpass
from locale import getdefaultlocale
cmd = ['sudo', '-k', '-n', 'tee', '/proc/sys/vm/drop_caches']
ret = runCmd(cmd, ignore_status=True, data=b'0')
ret = runCmd2(cmd, ignore_status=True, data=b'0')
if ret.output.startswith('sudo:'):
pass_str = getpass(
"\nThe script requires sudo access to drop caches between "
@ -59,7 +64,7 @@ class KernelDropCaches(object):
input_data = b''
cmd += ['tee', '/proc/sys/vm/drop_caches']
input_data += b'3'
runCmd(cmd, data=input_data)
runCmd2(cmd, data=input_data)
def time_cmd(cmd, **kwargs):
@ -71,7 +76,7 @@ def time_cmd(cmd, **kwargs):
timecmd += cmd
# TODO: 'ignore_status' could/should be removed when globalres.log is
# deprecated. The function would just raise an exception, instead
ret = runCmd(timecmd, ignore_status=True, **kwargs)
ret = runCmd2(timecmd, ignore_status=True, **kwargs)
timedata = tmpf.file.read()
return ret, timedata
@ -213,7 +218,7 @@ class BuildPerfTestCase(unittest.TestCase):
"""Run a command and log it's output"""
cmd_log = os.path.join(self.out_dir, 'commands.log')
with open(cmd_log, 'a') as fobj:
runCmd(cmd, stdout=fobj)
runCmd2(cmd, stdout=fobj)
def measure_cmd_resources(self, cmd, name, legend):
"""Measure system resource usage of a command"""
@ -265,7 +270,7 @@ class BuildPerfTestCase(unittest.TestCase):
"""Estimate disk usage of a file or directory"""
# TODO: 'ignore_status' could/should be removed when globalres.log is
# deprecated. The function would just raise an exception, instead
ret = runCmd(['du', '-s', path], ignore_status=True)
ret = runCmd2(['du', '-s', path], ignore_status=True)
if ret.status:
log.error("du failed, disk usage will be reported as 0")
size = 0