77import logging
88import os
99import platform
10- import random
1110import re
1211import shlex
1312import shutil
@@ -981,15 +980,15 @@ def __init__(self):
981980 self ._bsim_out_path = os .getenv ('BSIM_OUT_PATH' , '' )
982981 if self ._bsim_out_path :
983982 self ._bsim_out_path = os .path .join (self ._bsim_out_path , 'bin' )
984- self ._exe_paths = []
983+ self ._exe_paths = {}
985984 self ._tc_output = []
986985 self ._start_time = 0
987986
988987 def _set_start_time (self ):
989988 self ._start_time = time .time ()
990989
991- def _get_exe_path (self , index ):
992- return self ._exe_paths [index if index < len ( self . _exe_paths ) else 0 ]
990+ def _get_exe_path (self , name = None ):
991+ return self ._exe_paths [name ]
993992
994993 def configure (self , instance ):
995994 def replacer (exe_name ):
@@ -1000,22 +999,27 @@ def replacer(exe_name):
1000999 if not self ._bsim_out_path :
10011000 raise Exception ('Cannot copy bsim exe - BSIM_OUT_PATH not provided.' )
10021001
1003- exe_names = []
1004- for exe_name in self .instance .testsuite .harness_config .get ('bsim_exe_name' , []):
1005- new_exe_name = f'bs_{ self .instance .platform .name } _{ exe_name } '
1006- exe_names .append (replacer (new_exe_name ))
1002+ exe_names = {}
1003+ cfg = self .instance .testsuite .harness_config
1004+
1005+ build_exe_name = cfg .get ('bsim_exe_name' , None )
1006+ if build_exe_name :
1007+ exe_names [None ] = replacer (f'bs_{ self .instance .platform .name } _{ build_exe_name } ' )
1008+ else :
1009+ for exe_name in [dev ['exe' ] for dev in cfg .get ('bsim_devices' , [])]:
1010+ exe_names [exe_name ] = replacer (f'bs_{ self .instance .platform .name } _{ exe_name } ' )
10071011
10081012 if not exe_names :
1009- exe_names = [f'bs_{ replacer (self .instance .name )} ' ]
1013+ exe_names [ None ] = [f'bs_{ replacer (self .instance .name )} ' ]
10101014
10111015 self ._exe_paths = \
1012- [ os .path .join (self ._bsim_out_path , exe_name ) for exe_name in exe_names ]
1016+ { name_id : os .path .join (self ._bsim_out_path , exe ) for name_id , exe in exe_names . items ()}
10131017
10141018 def clean_exes (self ):
10151019 self ._set_start_time ()
10161020
10171021 try :
1018- for exe_path in [ self ._get_exe_path ( i ) for i in range ( len ( self . _exe_paths ))] :
1022+ for exe_path in self ._exe_paths . values () :
10191023 if os .path .exists (exe_path ):
10201024 os .remove (exe_path )
10211025 except Exception as e :
@@ -1024,7 +1028,7 @@ def clean_exes(self):
10241028 def wait_bsim_ready (self ):
10251029 start_time = time .time ()
10261030 while time .time () - start_time < Bsim .BSIM_READY_TIMEOUT_S :
1027- if all ([os .path .exists (self . _get_exe_path ( i )) for i in range ( len ( self ._exe_paths ) )]):
1031+ if all ([os .path .exists (f_path ) for f_path in self ._exe_paths . values ( )]):
10281032 return True
10291033 time .sleep (0.1 )
10301034
@@ -1044,7 +1048,7 @@ def build(self):
10441048 return
10451049
10461050 try :
1047- new_exe_path = self ._get_exe_path (0 )
1051+ new_exe_path = self ._get_exe_path ()
10481052 logger .debug (f'Copying executable from { original_exe_path } to { new_exe_path } ' )
10491053 shutil .copy (original_exe_path , new_exe_path )
10501054 self .status = TwisterStatus .PASS
@@ -1088,17 +1092,6 @@ def _output_reader(self, proc):
10881092 proc .communicate ()
10891093
10901094 def _generate_commands (self ):
1091- def rs ():
1092- return f'-rs={ random .randint (0 , 2 ** 10 - 1 )} '
1093-
1094- def expand_args (dev_id ):
1095- try :
1096- args = [str (eval (v )[dev_id ]) if v .startswith ('[' ) else v for v in extra_args ]
1097- return [arg for arg in args if args if arg ]
1098- except Exception as e :
1099- logger .warning (f'Unable to expand extra arguments set { extra_args } : { e } ' )
1100- return extra_args
1101-
11021095 bsim_phy_path = os .path .join (self ._bsim_out_path , 'bs_2G4_phy_v1' )
11031096 suite_id = f'-s={ self .instance .name .split (os .path .sep )[- 1 ].replace ("." , "_" )} '
11041097
@@ -1107,28 +1100,32 @@ def expand_args(dev_id):
11071100 sim_length = f'-sim_length={ cfg .get ("bsim_sim_length" , self .DEFAULT_SIM_LENGTH )} '
11081101 extra_args = cfg .get ('bsim_options' , [])
11091102 phy_extra_args = cfg .get ('bsim_phy_options' , [])
1110- test_ids = cfg .get ('bsim_test_ids ' , [])
1111- if not test_ids :
1112- logger .error ('No test ids specified for bsim test' )
1103+ devices = cfg .get ('bsim_devices ' , [])
1104+ if not devices :
1105+ logger .error (f 'No devices specified for bsim test { self . instance . name } ' )
11131106 self .status = TwisterStatus .ERROR
11141107 return []
11151108
1116- cmds = [[self ._get_exe_path (i ), verbosity , suite_id , f'-d={ i } ' , f'-testid={ t_id } ' , rs ()]
1117- + expand_args (i ) for i , t_id in enumerate (test_ids )]
1118- cmds .append ([bsim_phy_path , verbosity , suite_id , f'-D={ len (test_ids )} ' , sim_length ]
1109+ cmds = []
1110+ for i , dev in enumerate (devices ):
1111+ exe = self ._get_exe_path (dev .get ('exe' , None ))
1112+ cmds .append ([exe , verbosity , suite_id , f'-d={ i } ' , f'-testid={ dev ["test_id" ]} ' ]
1113+ + extra_args + dev .get ('options' , []))
1114+
1115+ cmds .append ([bsim_phy_path , verbosity , suite_id , f'-D={ len (devices )} ' , sim_length ]
11191116 + phy_extra_args )
11201117
11211118 return cmds
11221119
11231120 def _clean_up_files (self ):
11241121 # Clean-up any log files that the test may have generated
11251122 files = glob .glob (os .path .join (self ._bsim_out_path , '*.log' ))
1126- # files += glob.glob( os.path.join( self._bsim_out_path, '*.bin'))
1127- try :
1128- for file in [ f for f in files if os . path . getctime ( f ) > self . _start_time ] :
1123+ recent_files = [ f for f in files if os .path .getctime ( f ) > self ._start_time ]
1124+ for file in recent_files :
1125+ try :
11291126 os .remove (file )
1130- except Exception as e :
1131- logger .warning (f'Failed to clean up bsim log files : { e } ' )
1127+ except Exception as e :
1128+ logger .warning (f'Failed to clean up bsim log file { file } : { e } ' )
11321129
11331130 def bsim_run (self , timeout ):
11341131 try :
0 commit comments