Skip to content

Commit

Permalink
tests/avocado: excercise scripts/replay-dump.py in replay tests
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
npiggin authored and stsquad committed Aug 16, 2024
1 parent 01a385f commit 4926b6e
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 3 deletions.
6 changes: 4 additions & 2 deletions scripts/replay-dump.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import argparse
import struct
import os
import sys
from collections import namedtuple
from os import path

Expand Down Expand Up @@ -100,7 +101,7 @@ def call_decode(table, index, dumpfile):
print("Could not decode index: %d" % (index))
print("Entry is: %s" % (decoder))
print("Decode Table is:\n%s" % (table))
return False
raise(Exception("unknown event"))
else:
return decoder.fn(decoder.eid, decoder.name, dumpfile)

Expand All @@ -121,7 +122,7 @@ def print_event(eid, name, string=None, event_count=None):
def decode_unimp(eid, name, _unused_dumpfile):
"Unimplemented decoder, will trigger exit"
print("%s not handled - will now stop" % (name))
return False
raise(Exception("unhandled event"))

def decode_plain(eid, name, _unused_dumpfile):
"Plain events without additional data"
Expand Down Expand Up @@ -434,6 +435,7 @@ def decode_file(filename):
dumpfile)
except Exception as inst:
print(f"error {inst}")
sys.exit(1)

finally:
print(f"Reached {dumpfile.tell()} of {dumpsize} bytes")
Expand Down
13 changes: 12 additions & 1 deletion tests/avocado/replay_kernel.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import shutil
import logging
import time
import subprocess

from avocado import skip
from avocado import skipUnless
Expand All @@ -31,7 +32,7 @@ class ReplayKernelBase(LinuxKernelTest):
terminates.
"""

timeout = 120
timeout = 180
KERNEL_COMMON_COMMAND_LINE = 'printk.time=1 panic=-1 '

def run_vm(self, kernel_path, kernel_command_line, console_pattern,
Expand Down Expand Up @@ -63,13 +64,23 @@ def run_vm(self, kernel_path, kernel_command_line, console_pattern,
vm.shutdown()
logger.info('finished the recording with log size %s bytes'
% os.path.getsize(replay_path))
self.run_replay_dump(replay_path)
logger.info('successfully tested replay-dump.py')
else:
vm.wait()
logger.info('successfully finished the replay')
elapsed = time.time() - start_time
logger.info('elapsed time %.2f sec' % 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,
shift=7, args=None):
replay_path = os.path.join(self.workdir, 'replay.bin')
Expand Down
10 changes: 10 additions & 0 deletions tests/avocado/replay_linux.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ def launch_and_wait(self, record, args, shift):
vm.shutdown()
logger.info('finished the recording with log size %s bytes'
% os.path.getsize(replay_path))
self.run_replay_dump(replay_path)
logger.info('successfully tested replay-dump.py')
else:
vm.event_wait('SHUTDOWN', self.timeout)
vm.wait()
Expand All @@ -108,6 +110,14 @@ def run_rr(self, args=None, shift=7):
logger = logging.getLogger('replay')
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')
class ReplayLinuxX8664(ReplayLinux):
"""
Expand Down

0 comments on commit 4926b6e

Please sign in to comment.