tests/avocado: excercise scripts/replay-dump.py in replay tests
This runs replay-dump.py after recording a trace, and fails the test if the script fails. replay-dump.py is modified to exit with non-zero if an error is encountered while parsing, to support this. Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru> Signed-off-by: Nicholas Piggin <npiggin@gmail.com> gitlab with this change v5: Update timeout to 180s because x86 was just exceeding 120s in Message-Id: <20240813050638.446172-4-npiggin@gmail.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20240813202329.1237572-12-alex.bennee@linaro.org>
This commit is contained in:
parent
01a385fb49
commit
4926b6e644
@ -21,6 +21,7 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import struct
|
import struct
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from os import path
|
from os import path
|
||||||
|
|
||||||
@ -100,7 +101,7 @@ def call_decode(table, index, dumpfile):
|
|||||||
print("Could not decode index: %d" % (index))
|
print("Could not decode index: %d" % (index))
|
||||||
print("Entry is: %s" % (decoder))
|
print("Entry is: %s" % (decoder))
|
||||||
print("Decode Table is:\n%s" % (table))
|
print("Decode Table is:\n%s" % (table))
|
||||||
return False
|
raise(Exception("unknown event"))
|
||||||
else:
|
else:
|
||||||
return decoder.fn(decoder.eid, decoder.name, dumpfile)
|
return decoder.fn(decoder.eid, decoder.name, dumpfile)
|
||||||
|
|
||||||
@ -121,7 +122,7 @@ def print_event(eid, name, string=None, event_count=None):
|
|||||||
def decode_unimp(eid, name, _unused_dumpfile):
|
def decode_unimp(eid, name, _unused_dumpfile):
|
||||||
"Unimplemented decoder, will trigger exit"
|
"Unimplemented decoder, will trigger exit"
|
||||||
print("%s not handled - will now stop" % (name))
|
print("%s not handled - will now stop" % (name))
|
||||||
return False
|
raise(Exception("unhandled event"))
|
||||||
|
|
||||||
def decode_plain(eid, name, _unused_dumpfile):
|
def decode_plain(eid, name, _unused_dumpfile):
|
||||||
"Plain events without additional data"
|
"Plain events without additional data"
|
||||||
@ -434,6 +435,7 @@ def decode_file(filename):
|
|||||||
dumpfile)
|
dumpfile)
|
||||||
except Exception as inst:
|
except Exception as inst:
|
||||||
print(f"error {inst}")
|
print(f"error {inst}")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
print(f"Reached {dumpfile.tell()} of {dumpsize} bytes")
|
print(f"Reached {dumpfile.tell()} of {dumpsize} bytes")
|
||||||
|
@ -13,6 +13,7 @@ import lzma
|
|||||||
import shutil
|
import shutil
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
|
import subprocess
|
||||||
|
|
||||||
from avocado import skip
|
from avocado import skip
|
||||||
from avocado import skipUnless
|
from avocado import skipUnless
|
||||||
@ -31,7 +32,7 @@ class ReplayKernelBase(LinuxKernelTest):
|
|||||||
terminates.
|
terminates.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
timeout = 120
|
timeout = 180
|
||||||
KERNEL_COMMON_COMMAND_LINE = 'printk.time=1 panic=-1 '
|
KERNEL_COMMON_COMMAND_LINE = 'printk.time=1 panic=-1 '
|
||||||
|
|
||||||
def run_vm(self, kernel_path, kernel_command_line, console_pattern,
|
def run_vm(self, kernel_path, kernel_command_line, console_pattern,
|
||||||
@ -63,6 +64,8 @@ class ReplayKernelBase(LinuxKernelTest):
|
|||||||
vm.shutdown()
|
vm.shutdown()
|
||||||
logger.info('finished the recording with log size %s bytes'
|
logger.info('finished the recording with log size %s bytes'
|
||||||
% os.path.getsize(replay_path))
|
% os.path.getsize(replay_path))
|
||||||
|
self.run_replay_dump(replay_path)
|
||||||
|
logger.info('successfully tested replay-dump.py')
|
||||||
else:
|
else:
|
||||||
vm.wait()
|
vm.wait()
|
||||||
logger.info('successfully finished the replay')
|
logger.info('successfully finished the replay')
|
||||||
@ -70,6 +73,14 @@ class ReplayKernelBase(LinuxKernelTest):
|
|||||||
logger.info('elapsed time %.2f sec' % elapsed)
|
logger.info('elapsed time %.2f sec' % elapsed)
|
||||||
return elapsed
|
return elapsed
|
||||||
|
|
||||||
|
def run_replay_dump(self, replay_path):
|
||||||
|
try:
|
||||||
|
subprocess.check_call(["./scripts/replay-dump.py",
|
||||||
|
"-f", replay_path],
|
||||||
|
stdout=subprocess.DEVNULL)
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
self.fail('replay-dump.py failed')
|
||||||
|
|
||||||
def run_rr(self, kernel_path, kernel_command_line, console_pattern,
|
def run_rr(self, kernel_path, kernel_command_line, console_pattern,
|
||||||
shift=7, args=None):
|
shift=7, args=None):
|
||||||
replay_path = os.path.join(self.workdir, 'replay.bin')
|
replay_path = os.path.join(self.workdir, 'replay.bin')
|
||||||
|
@ -94,6 +94,8 @@ class ReplayLinux(LinuxTest):
|
|||||||
vm.shutdown()
|
vm.shutdown()
|
||||||
logger.info('finished the recording with log size %s bytes'
|
logger.info('finished the recording with log size %s bytes'
|
||||||
% os.path.getsize(replay_path))
|
% os.path.getsize(replay_path))
|
||||||
|
self.run_replay_dump(replay_path)
|
||||||
|
logger.info('successfully tested replay-dump.py')
|
||||||
else:
|
else:
|
||||||
vm.event_wait('SHUTDOWN', self.timeout)
|
vm.event_wait('SHUTDOWN', self.timeout)
|
||||||
vm.wait()
|
vm.wait()
|
||||||
@ -108,6 +110,14 @@ class ReplayLinux(LinuxTest):
|
|||||||
logger = logging.getLogger('replay')
|
logger = logging.getLogger('replay')
|
||||||
logger.info('replay overhead {:.2%}'.format(t2 / t1 - 1))
|
logger.info('replay overhead {:.2%}'.format(t2 / t1 - 1))
|
||||||
|
|
||||||
|
def run_replay_dump(self, replay_path):
|
||||||
|
try:
|
||||||
|
subprocess.check_call(["./scripts/replay-dump.py",
|
||||||
|
"-f", replay_path],
|
||||||
|
stdout=subprocess.DEVNULL)
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
self.fail('replay-dump.py failed')
|
||||||
|
|
||||||
@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
|
@skipUnless(os.getenv('AVOCADO_TIMEOUT_EXPECTED'), 'Test might timeout')
|
||||||
class ReplayLinuxX8664(ReplayLinux):
|
class ReplayLinuxX8664(ReplayLinux):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user