
    .h'-                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZ	d dl
Z	d dlZ	d dlZd dlZdadadadadadadad ad Zd ZddZi fdZd Zd	 Zg di fd
Zg di fdZd Zd Zd Z d Z!d Z"d Z#d Z$ddZ%dS )    NFc                  j    t           j                            dddt          gdd          j        dk    S )NpodmanimageexistsFT)check	no_podmanr   )testenvcmdrun
image_name
returncode     N/home/osmocom-build/jenkins/workspace/ttcn3-ns-test/_testenv/testenv/podman.pyimage_existsr      s/    ;??HgxDE]a?bbmqrrrr   c                     t           j                            ddt          ddgddd          } t	          j        | j                  d         d                             d	d
          d         }t          j        	                    |d          }t          j        d|            t          j                            d          rt          j        d           dS t          j                            t           j        d          }t          j        |          j        }t          j                            |          }t          j        dt+          |                              d	          d                     ||k     S )Nr   historyz--formatjsonT)capture_outputr   textr   created.   z%Y-%m-%dT%H:%M:%SzImage creation date: !TESTENV_NO_IMAGE_UP_TO_DATE_CHECKz'Assuming the podman image is up-to-datezpodman/DockerfilezDockerfile last modified: )r	   r
   r   r   r   loadsstdoutsplitdatetimestrptimeloggingdebugosenvirongetpathjoindata_dirstatst_mtimeutcfromtimestampstr)r   r   
dockerfilemtimes       r   image_up_to_dater.      sC   koo	9j*f=	   G j((+I6<<S!DDQGG((2EFFGM3'33444 
z~~9:: ?@@@tg.0CDDJGJ(E..u55EMIs5zz/?/?/D/DQ/GIIJJJ7?r   Tc                    | r`t                      rRt                      rDt          j        dt                      t
          j        j        rt          j        d           nd S t          j        dt                      t
          j	        
                    ddddt           dt          t          j                            t
          j        d	          gd
           d S )NzPodman image is up-to-date: z&Building anyway since --force was usedzBuilding podman image: buildahbuildz--build-argzDISTRO=-tr   T)r   )r   r.   r    r!   r   r	   argsforceinfor
   r   distror"   r%   r&   r'   )check_existings    r   image_buildr8   :   s     >> 	.00 	MEEEFFF|! FGGGGL7:77888KOOfGLL)844	
       r   c                     g }t           j                            | d                                          D ]\  }}|d| d| gz  }|S )NT-e=)r	   r
   generate_envitems)envretkeyvals       r   generate_env_podmanrB   R   sX    
CK,,S$77==?? & &Snnsnn%%Jr   c                      t          t          j        dt          j                  at           dat
                              dd                              dd          ad S )Nr6   z-osmo-ttcn3-testenv:-_)getattrr	   r3   distro_defaultr6   r   replacer   r   r   init_image_name_distrorJ   [   sQ     W\8W-CDDF///J##C--55c3??JJJr   c                  z   t           j                                        } t          j                            t           j        j        dd|            at          j                            t           j        j        dd|            a	t          j
        t          d           t          j
        t          d           t          j
        t           j        j        d           t                       t                      st          j        d          t                      sot          j                            d          dk    r$t%          j        d	           t)          d
           n(t%          j        d           t%          j        d           t-          j        t0                     t           j        j        rdad S d S )Nr   zvar-cache-aptzvar-lib-aptTexist_okzDMissing podman image, run 'testenv.py init podman' first to build itTESTENV_REBUILD_OUTDATED_IMAGE1zQThe podman image is outdated, rebuilding it... (TESTENV_REBUILD_OUTDATED_IMAGE=1)Fz[The podman image might be outdated, consider running 'testenv.py init podman' to rebuild itz@Set TESTENV_REBUILD_OUTDATED_IMAGE=1 to rebuild it automatically)r	   r
   distro_cache_suffixr"   r%   r&   r3   cacheapt_dir_var_cacheapt_dir_var_libmakedirsccacherJ   r   NoTraceExceptionr.   r#   r$   r    warningr8   r!   atexitregisterstopshellrun_shell_on_stop)suffixs    r   initr^   d   s}   
 [,,..FW\%7C[SYC[C[\\gll7<#5xAWvAWAWXXOK!D1111K$////K#d3333>> o&'mnnn ^:>>:;;sBBOoppp
 Om   M\]]]
OD| ! ! !r   c                 "   t           st          d|            t          |          }|t          |          z  }|dgz  }|r|d|gz  }t	          | t
                    rdd| g} t          j        j        ddg|z   t           gz   | z   g|R dd	i|S )
NzTAttempting to execute a command in podman, but the container isn't running anymore: r2   -wsh-cr   execr   T)	container_nameRuntimeErrorlistrB   
isinstancer+   r	   r
   r   )r
   podman_optscwdr>   r3   kwargss         r   exec_cmdrk      s     ywruwwxxx{##K&s+++KD6K
 #c{"#s  T3;?	6[(N+;;cA 
   	  r   c                    t          |          t          |          z   }|r|d|gz  }t          | t                    rdd| g} ddg|z   t          gz   | z   } t          j        d|             t          j        |           S )Nr`   ra   rb   r   rc   + )	rf   rB   rg   r+   rd   r    r!   
subprocessPopen)r
   rh   ri   r>   s       r   exec_cmd_backgroundrp      s    {##&9#&>&>>K
 #c{"#s  T3V
{
*n-=
=
CCM*s**C   r   c                      	 	 t          j        d           t          j        ddt          ddgt          j                  } | j        rt          j        d           d S \# t          $ r Y d S w xY w)	NT   r   rc   touchz/tmp/watchdog)stderrz0feed_watchdog_loop: podman container has stopped)
timesleeprn   r   rd   DEVNULLr   r    r!   KeyboardInterrupt)ps    r   feed_watchdog_looprz      s    
	JqMMM&.'?[dndvwwwA| PQQQ	    s   AA A 
A-,A-c                      t          d          D ]'} t          j        d           t                      r d S (t	          d          )Nd   g?zPodman failed to start)rangeru   rv   
is_runningre   )is    r   wait_until_startedr      sK    3ZZ  
3<< 	FF	
/
0
00r   c                    t           j                            t          j        j        d          }t          j        |d           t          j        d|             t          j
        | t          j                                                   t                       t          j        t                     }|                                 d S )Nr   TrL   rm   )r>   )target)r"   r%   r&   r	   testdirtestdir_topdirrT   r    r!   rn   ro   r
   r<   r   multiprocessingProcessrz   start)r
   log_dirfeed_watchdog_processs      r   start_in_backgroundr      s    gll7?98DDGK$''''M*s**Sgk66889999+3;MNNN!!!!!r   c                  6   t           j        j        } t           j                                        }t           j        j         dt           at          j	        
                    t           j        d          }ddddt          ddd	d
|  dt           dd| dddddt           ddt           dddddddg}t           j        j        r|ddgz  }n|d| d| gz  }t           j        j        rt          j                            d          s&t          j	                            d          r|ddgz  }t          j	                            t           j                  r+t          j        t           j                  }|d| d| dgz  }|d|  d|  dt           j        j         dt           j        j         dt           j        j         dt           j        j         dt           j         dt           j         t4          t          j	        
                    t           j        d           g
z  }t7          |           t9          d!d"g           t          j	        
                    t          d#          }t          j	                            |          st9          g d$           d S d S )%NrE   zpodman/seccomp.jsonr   r   z--rmz--namez--log-driverz	json-filez	--log-optzpath=z/podman/z.logz--security-opt=seccomp=z--cap-add=NET_ADMINz--cap-add=NET_RAWz--cap-add=SYS_ADMINz--device=/dev/net/tunz--volumez:/var/cache/aptz:/var/lib/aptz--sysctlz"net.ipv4.conf.all.send_redirects=0z&net.ipv4.conf.default.send_redirects=0r:   zPODMAN=1zTESTENV_BINARY_REPO=1rD   TESTENV_NO_KVMz/dev/kvmz/dev/kvm:/dev/kvmz:rozscripts/testenv-podman-main.shrmz /etc/apt/apt.conf.d/docker-cleanzpkgcache.binzapt-get-qupdate)r	   r   r   osmo_devget_osmo_dev_dirprefixrestart_countrd   r"   r%   r&   r'   rR   rS   r3   binary_repokernelr#   r$   r   islinkcustom_kernel_pathreadlinkrQ   rU   src_dirr   r   rk   )r   osmo_dev_dirseccompr
   destpkgcaches         r   r   r      s    _3N#4466L.@@@@N gll7+-BCCG 	<<<<<<+'++---))),01C6 | 	
#
 	

 	,,l,,
 	

 | 5z~~.// 	5BGNN:4N4N 	5J 344C7>>'455 	5;w9::DJ4 3 3$ 3 3 344C,,N,,<44 244<66!466?..W_..
W%'GHH C d67888w||-~>>H7>>(## .,,,-----. .r   c                     t           j                                        \  } }t           j                            ddd|  gd          j        sd S t           j                                        }t          j	        d|  d           |rt          j	        d           nt          j	        d           t          j        d	           d S )
Ntestz-dz/opt/eclipse-titan-F)r   z# not found in the podman container!z3Consider modifying _testenv/data/podman/Dockerfile.z7Try './testenv.py init podman' to update the container.r   )r	   testenv_cfgget_titan_version_first_cfgr
   r   r   r   r.   r    errorsysexit)versionrF   
up_to_dates      r   check_titan_versionr   !  s    $@@BBJGQ;??FD*I*I*IJRW?XXc 0022JMTTTTUUU QKLLLLOPPPHQKKKKKr   c                     d} | dz  } | t           j        j                            dd          z  } | dz  } | t           j        t
                   z  } | dz  } d}t          dd	d
t          j        |            d| g           d} | dz  } | dz  } d}t          dd	d
t          j        |            d| g           t          g d           d S )Nzdeb [signed-by=/obs.key]z( https://downloads.osmocom.org/packages/rD   z://z/ ./z$/etc/apt/sources.list.d/osmocom.listra   rb   zecho z > zPackage: *
z$Pin: origin "downloads.osmocom.org"
zPin-Priority: 1100
z&/etc/apt/preferences.d/osmocom-apt-pinr   )	r	   r3   r   rI   distros_repodirsr6   rk   shlexquote)configr%   s     r   enable_binary_repor   /  s    'F
88F
gl&..sD999F
cMF
g&v..F
fF1DdD@%+f"5"5@@$@@ABBB F
55F
$$F3DdD@%+f"5"5@@$@@ABBB((()))))r   c                  r    t           dS dddddt            g} t          j        | dd          j        sdS dS )	NFr   psr   z--filterzname=T)r   r   )rd   rn   r   r   )r
   s    r   r~   r~   D  sL    uT4-E^-E-E
FC>#d>>>E u4r   c                 *   t                      sd S t          j                                         | sBt          r;t          j        d           t          dgdgt          j        j        d d           da| rdnd}t          j        d|            t          r4t          
                                 t                                           d a	t          j                            d	d
t          gdd           d a| rt          dz  at!                       d S d S )Nz=Running interactive shell before stopping container (--shell)bashz-iF)ri   stdinr   z
 (restart) zStopping podman containerr   killT)r   r   r   )r~   r	   coredumpget_backtracer\   r    r5   rk   r   r   	terminatewaitr
   r   rd   r   r   )restartrestart_msgs     r   rZ   rZ   O  s     <<  ""$$$ "( "TUUU 	&D6w'>dRWXXXX!")1,,rKL:[::;;; %'')))""$$$ $KOOXv~6$eOTTTN  r   )T)F)&rX   r   r   r    r   r"   r   rn   testenv.cmdr	   testenv.testdirtestenv.coredumpru   r   r   r6   rd   rR   rS   r   r\   r   r   r.   r8   rB   rJ   r^   rk   rp   rz   r   r   r   r   r   r~   rZ   r   r   r   <module>r      s           				                   




	   s s s  6   0     @ @ @!! !! !!H !d    . *,2 ! ! ! !   1 1 1
" 
" 
"K. K. K.\  * * **  # # # # # #r   