\`j3-ddlZddlZddlZGddeZdaeje dZ ej deje dZ ejeje ddZejeje dd Zd Zejejd d Zejed ZdaddddZdZdZdZdZdZdZGddejZdZdZ dS)NceZdZdS)NoTraceExceptionN)__name__ __module__ __qualname__Y/home/osmocom-build/jenkins/workspace/ttcn3-pcap-client-test/_testenv/testenv/__init__.pyrrsDr rz /../../..TESTENV_SRC_DIRz /../../../..z/../..dataz.linux debian:trixiez~/.cachezosmo-ttcn3-testenvccachez [testenv] Debian_12 Debian_13Debian_Unstable)zdebian:bookwormr zdebian:unstablechddi}||vr)tjd||d|d||S|S)Nggsn ggsn_testszUsing testsuite z (via alias ))loggingdebug)namemappings r resolve_testsuite_name_aliasr!sP G w KKKDKKKLLLt} Kr c  tjtjd}|ddd}|dd}|d dd }|d d |d d}|dddd|ddt dt d|dd}|d}|dd|ddd |d!d"d#d$|d%d&dd'|d(d)d*|dd+dd,|d-d.}|d/d0d1d23|d4d5d6ttj 7|d8d9dd:|d;d<}| }|d=d>dd?|d@dAddB|dCdD}| }|dEdFdGdHdIdJK|dLdMdGdHdNdOtdK|dPdQ}|dRddS|dTdU}|dVdWddX|ddddt d|dYdZdd[|d\d]d^d#d_d`a|db}|dcddde|dfdgdhdidjk|dl}|dmdntdto|dpdqtdto|drds|at jdkrtt%t jt _t jrAt jdtr$t-jdudt _dSdSdSdvt _dS)wNaBuild/install everything for a testsuite and run it. examples: ./testenv.py run mgw ./testenv.py run mgw --test TC_crcx ./testenv.py run mgw --podman --binary-repo osmocom:latest ./testenv.py run mgw --podman --binary-repo osmocom:nightly ./testenv.py run mgw --podman --binary-repo osmocom:nightly:asan ./testenv.py run mgw --io-uring ./testenv.py run ggsn --config open5gs ./testenv.py run ggsn --config 'osmo_ggsn_v4_only' ./testenv.py run ggsn --config 'osmo_ggsn*' )formatter_class descriptionactionT)titledestrequiredinitzinitialize osmo-dev/podman)helpruntime)rr!r zosmo-devzprepare osmo-dev (top-level makefile scripts, for building test components from source when using 'run' without '--binary-repo')podmanz-prepare the podman image (for 'run --podman')z-fz--force store_truez$build image even if it is up-to-date)rr#z-dz--distroz"distribution for podman (default: r)defaultr#runz$build components and run a testsuiteztestsuite options testsuitez8a directory in osmo-ttcn3-hacks.git (msc, bsc, mgw, ...)z-tz--testzKonly run one specific test (e.g. TC_selftest, BTS_Tests_OML.TC_wrong_mdisc)z-cz--configappendz;which testenv.cfg to use (supports * wildcards via fnmatch)z-iz --io-uringzset LIBOSMO_IO_BACKEND=IO_URINGz-Tz--titan-versionz"which eclipse-titan version to usez--fastz>skip recording pcaps (+ sleep before/after) and talloc reportszsource/binary optionsz0All components are built from source by default.z-bz --binary-repo OBS_PROJECTzPuse binary packages from this Osmocom OBS project instead (e.g. osmocom:nightly))metavarr#z-jz--jobsz5number of jobs to run simultaneously (default: nproc))r#typer'z-az--asanz3pass --enable-sanitize to Osmocom configure scriptsz exit optionsz+When and how testenv should exit when done.z-Bz--bisectz@exit with != 0 if at least one test failed (use with git bisect)z-uz --until-nokz-run until there was either a failure or errorz QEMU optionszOFor some tests, the SUT can or must run in QEMU, typically to use kernel GTP-U.z-Dz--debian-kernel store_constkerneldebianz"run SUT in QEMU with debian kernel)rr constr#z-Cz--custom-kernelcustomz$run SUT in QEMU with custom kernel (zconfig file optionszTestsuite and test component configs for nightly/master versions of test components are used, unless a binary repository ending in :latest is set or --latest is used.z--latestzuse latest configszpodman optionsz7All components are run directly on the host by default.z-pz--podmanz run all components inside podmanz-sz--shellz:run an interactive shell before stopping daemons/containerz-Iz--install-packageinstall_packagesPACKAGEz5temporarily install a debian package in the container)r rr,r#zoutput optionsz-lz --log-dirz(log here instead of a random dir in /tmpz-nz--no-teetee store_falsez,don't send test component's output to stdout)r rr#z cache optionsz--cachezcache path (default: )r#r'z--ccachezccache path (default: cleanzclean previous build artifactsz:latestz7Binary repository ends in :latest, using latest configsF)argparseArgumentParserRawDescriptionHelpFormatteradd_subparsers add_parser add_argumentdistro_defaultadd_argument_groupintos cpu_countadd_mutually_exclusive_groupcustom_kernel_pathcache_dir_defaultccache_dir_default parse_argsargsrrr) binary_repoendswithrrlatestr%)parsersubsub_initsub_init_runtime sub_podmansub_rungroups r rGrG-s  $ < :F   hX  M MC~~f+G~HHH..YT].^^L  ",,X@r s sE   _     D      B   & &~7d e eE  . . 0 0E   O     <   & &Y  E  . . 0 0E    1     I4F I I I   & &   E  !  & &'79r s sE   /     C. C C C     I      D   & &'7 8 8E   7     ;   & & 7 7E  9%6 9 9 9!   ;&8 ; ; ;" NN7!ANBBB     D {e5dnEE    0 9 9) D D  MS T T TDKKK      r ctjdkrdSttdd}|r3|tvr,t ddtdSdS)Nr"distro--distro must be one of , )rHrgetattrdistros_repodirsrjoin) distro_args r verify_args_initr[so {fx..JYj(888W$))DT:U:UWWXXXYY88r ctjdkrdStjrtjrt dtjrtjst dtjrtjst dtjr=tjtvr*t ddttj dkrtjst dtj rtjst d tj d krOtj ts+tjd t d ttj t"tj}tj |st d |dS)Nr(ze--binary-repo cannot be used with --asan, consider using '--binary-repo osmocom:nightly:asan' insteadz--binary-repo requires --podmanz--distro requires --podmanrUrVr0z!--kernel-debian requires --podmanz$--install-packages requires --podmanr2zjSee _testenv/README.md for more information on downloading a pre-built kernel or building your own kernel.z>For --kernel-custom, put a symlink or copy of your kernel to: ztestsuite dir not found: )rHrrIasanrr%rTrXrYr/r3rApathexistsrDrcriticalttcn3_hacks_dirr)) testsuite_dirs r verify_args_runrcs {e  DI  s    B B@AAA {=4;=;<<< {Yt{*:::W$))DT:U:UWWXXX {ht{BCCC GT[GEFFF {hrw~~6H'I'I x   t`rttuuuGLL$.AAM 7>>- ( (LJ=JJKKKLLr crttdrtjtt_dSdSdS)zgSome defaults are set later, e.g. after verifying that --distro is not being used without --podman.rTN)hasattrrHrTr>rr r set_args_defaultsrf3s8tX%4;#6$ %%#6#6r cvttttdSN)rGr[rcrfrr r init_argsri:s5LLLr c6eZdZdddddddZfdZdZxZS) ColorFormatterzzzzz)rinfowarningerrorr`resetc|jD]N}d|}|tjvr'tj||j|<Ot dS)NTESTENV_COLOR_)colorskeysupperrAenvirongetsuper__init__)selfcolorenv_var __class__s r rxzColorFormatter.__init__Ksy[%%'' = =E6u{{}}66G"*$$%'Z^^G%<%< E" r c|jtjkrd}n_|jtjkrd}nG|jtjkrd}n/|jtjkrd}n|jtjkrd}|j|td|jd|j _ tj ||}|S)Nrrlrmrnr`z %(msg)sro) levelnorDEBUGINFOWARNINGERRORCRITICALrr log_prefix_style_fmt Formatterformat)ryrecordrzresults r rzColorFormatter.formatSs >W] * *EE ^w| + +EE ^w . .EE ^w} , ,EE ^w/ / /E"k%0\*\\dkRYFZ\\ "))$77 r )rrrrrrxr __classcell__)r|s@r rkrkAse Fr rkct}tj}|tjg|_tj}||||dSrh) rkr getLoggersetLevelrhandlers StreamHandler setFormatter addHandler) formatter root_loggerhandlers r init_loggingresu  I#%%K'''K#%%G ###7#####r c |adSrh)r)news r set_log_prefixrps JJJr )!r8ros.pathrA ExceptionrrHr^realpath__file__rarurvsrc_dirrYdata_dirrDr> expanduserrErFrrXrrGr[rcrfrirrkrrrr r rs     y    '""h#9#9#9:: *..*BG,<,<=V=V=V,W,W X X 7<<((H)<)<)<==v F FW\\"'"2"2h3I3I3I"J"JHUU GLL!3!3J!?!?AUVVW\\"3X>>  # (   WWWtYYY L L LF%%%!!!!!W&!!!H$$$r