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 struct | ||||
| import os | ||||
| import sys | ||||
| from collections import namedtuple | ||||
| from os import path | ||||
| 
 | ||||
| @ -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) | ||||
| 
 | ||||
| @ -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" | ||||
| @ -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") | ||||
|  | ||||
| @ -13,6 +13,7 @@ import lzma | ||||
| import shutil | ||||
| import logging | ||||
| import time | ||||
| import subprocess | ||||
| 
 | ||||
| from avocado import skip | ||||
| from avocado import skipUnless | ||||
| @ -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, | ||||
| @ -63,6 +64,8 @@ class ReplayKernelBase(LinuxKernelTest): | ||||
|             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') | ||||
| @ -70,6 +73,14 @@ class ReplayKernelBase(LinuxKernelTest): | ||||
|         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') | ||||
|  | ||||
| @ -94,6 +94,8 @@ class ReplayLinux(LinuxTest): | ||||
|             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() | ||||
| @ -108,6 +110,14 @@ class ReplayLinux(LinuxTest): | ||||
|         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): | ||||
|     """ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Nicholas Piggin
						Nicholas Piggin