§
    °³Ùgå"  ã                   óä   — d 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mZ ddl	m
Z
  G d„ dej        ¦  «        Z G d„ dej        ej        ¦  «        Z G d	„ d
ej        ¦  «        Zd„ Zd„ ZdS )z Common utilities used in testingé    N)Úcontent)Úoptionsc                   ó(   ‡ — e Zd ZdZd„ Zˆ fd„Zˆ xZS )ÚDiveDirzaDive into given directory and return back on cleanup.

    :ivar path: The target directory.
    c                 ó   — || _         d S ©N)Úpath)Úselfr	   s     úD/granary/edev/quantum/lib/python3.11/site-packages/pbr/tests/base.pyÚ__init__zDiveDir.__init__=   s   € ØˆŒ	ˆ	ˆ	ó    c                 óê   •— t          t          | ¦  «                             ¦   «          |                      t          j        t	          j        ¦   «         ¦  «         t	          j        | j        ¦  «         d S r   )Úsuperr   ÚsetUpÚ
addCleanupÚosÚchdirÚgetcwdr	   )r
   Ú	__class__s    €r   r   zDiveDir.setUp@   sS   ø€ Ý�g�tÑÔ×"Ò"Ñ$Ô$Ð$Ø�Š�œ¥"¤)¡+¤+Ñ.Ô.Ð.Ý
Œ�”ÑÔÐÐÐr   ©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__classcell__©r   s   @r   r   r   7   sQ   ø€ € € € € ðð ð
ð ð ðð ð ð ð ð ð ð ð r   r   c                   ó>   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zg ddfd„Zˆ xZS )ÚBaseTestCasec                 óä  •— t          t          | ¦  «                             ¦   «          t          j                             dd¦  «        }	 t          |¦  «        }n!# t          $ r t          d¦  «         d}Y nw xY w|dk    r)|  	                    t          j        |d¬¦  «        ¦  «         t          j                             d¦  «        t          j        v rT|  	                    t          j        d¦  «        ¦  «        j        }|  	                    t          j        d	|¦  «        ¦  «         t          j                             d
¦  «        t          j        v rT|  	                    t          j        d¦  «        ¦  «        j        }|  	                    t          j        d|¦  «        ¦  «         |  	                    t          j        d¦  «        ¦  «        | _        |  	                    t          j        ¦   «         ¦  «         |  	                    t          j        ¦   «         ¦  «         |  	                    t          j        ¦   «         ¦  «         |  	                    t          j        dd¦  «        ¦  «         |  	                    t          j        ¦   «         ¦  «        j        | _        t          j                             | j        d¦  «        | _        t7          j        t          j                             t          j                             t<          ¦  «        d¦  «        | j        ¦  «         |                      t          j         t          j!        ¦   «         ¦  «         t          j         | j        ¦  «         |                      | j"        ¦  «         tG          | dd¦  «        sÙ|  	                    t          j        d¦  «        ¦  «         t          j                             | j        d¦  «        }tI          |d¦  «        5 }| %                    ¦   «         }d d d ¦  «         n# 1 swxY w Y    |j&        dd¦  «        }tI          |d¦  «        5 }| '                    |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S d S )NÚOS_TEST_TIMEOUTé   z=OS_TEST_TIMEOUT set to invalid value defaulting to no timeoutr   T)ÚgentleÚOS_STDOUT_CAPTUREÚstdoutz
sys.stdoutÚOS_STDERR_CAPTUREÚstderrz
sys.stderrÚpbrÚPBR_VERSIONz0.0ÚtestpackageÚpreversionedz	setup.cfgÚrtzversion = 0.1.devÚ Úwt)(r   r   r   r   ÚenvironÚgetÚintÚ
ValueErrorÚprintÚ
useFixtureÚfixturesÚTimeoutr   ÚTRUE_VALUESÚStringStreamÚstreamÚMonkeyPatchÚ
FakeLoggerÚlog_fixtureÚTempHomeDirÚNestedTempfileÚEnvironmentVariableÚTempDirr	   Útemp_dirÚjoinÚpackage_dirÚshutilÚcopytreeÚdirnameÚ__file__r   r   r   Ú_discard_testpackageÚgetattrÚopenÚreadÚreplaceÚwrite)r
   Útest_timeoutr$   r&   Úsetup_cfg_pathÚcfgr   r   s          €r   r   zBaseTestCase.setUpH   s  ø€ Ý�l˜DÑ!Ô!×'Ò'Ñ)Ô)Ð)Ý”z—~’~Ð&7¸Ñ<Ô<ˆð	Ý˜|Ñ,Ô,ˆLˆLøÝð 	ð 	ð 	åð .ñ /ô /ð /àˆLˆLˆLð		øøøð
 ˜!ÒÐØ�OŠO�HÔ,¨\À$ÐGÑGÔGÑHÔHÐHåŒ:�>Š>Ð-Ñ.Ô.µ'Ô2EÐEÐEØ—_’_¥XÔ%:¸8Ñ%DÔ%DÑEÔEÔLˆFØ�OŠO�HÔ0°¸vÑFÔFÑGÔGÐGÝŒ:�>Š>Ð-Ñ.Ô.µ'Ô2EÐEÐEØ—_’_¥XÔ%:¸8Ñ%DÔ%DÑEÔEÔLˆFØ�OŠO�HÔ0°¸vÑFÔFÑGÔGÐGØŸ?š?ÝÔ Ñ&Ô&ñ(ô (ˆÔð 	�Š�Ô,Ñ.Ô.Ñ/Ô/Ð/Ø�Š�Ô/Ñ1Ô1Ñ2Ô2Ð2Ø�Š�Ô+Ñ-Ô-Ñ.Ô.Ð.ð 	�Š�Ô4°]ÀEÑJÔJÑKÔKÐKàŸš­Ô(8Ñ(:Ô(:Ñ;Ô;Ô@ˆŒÝœ7Ÿ<š<¨¬°}ÑEÔEˆÔÝŒ�œŸš¥R¤W§_¢_µXÑ%>Ô%>ÀÑNÔNØÔ(ñ	*ô 	*ð 	*à�Š�œ¥"¤)¡+¤+Ñ.Ô.Ð.Ý
Œ�Ô!Ñ"Ô"Ð"Ø�Š˜Ô1Ñ2Ô2Ð2õ �t˜^¨TÑ2Ô2ð 	#Ø�OŠO�HÔ8¸ÑGÔGÑHÔHÐHÝœWŸ\š\¨$Ô*:¸KÑHÔHˆNÝ�n dÑ+Ô+ð %¨sØŸ(š(™*œ*�ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %à%�g”oÐ&:¸CÑ@Ô@ˆGÝ�n dÑ+Ô+ð #¨sØ—	’	˜'Ñ"Ô"Ð"ð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð #ð #ð	#ð 	#s6   Á
A ÁA8Á7A8Ï3PÐPÐPÑ Q#Ñ#Q'Ñ*Q'c                 óŽ   — t          t          j        ¦  «        D ]*}|dk    s|                     d¦  «        rt          j        |= Œ+d S )NÚpbr_testpackagezpbr_testpackage.)ÚlistÚsysÚmodulesÚ
startswith)r
   Úks     r   rG   z!BaseTestCase._discard_testpackage{   sR   € õ •c”kÑ"Ô"ð 	#ð 	#ˆAØÐ&Ò&Ð&Ø—L’LÐ!3Ñ4Ô4ð 'å”K �Nøð	#ð 	#r   c                 ó    —  | j         d|fi |¤ŽS )Nr'   ©Ú_run_cmd©r
   ÚargsÚkwargss      r   Úrun_pbrzBaseTestCase.run_pbrƒ   s   € ØˆtŒ}˜U DÐ3Ð3¨FÐ3Ð3Ð3r   c                 ó:   —  | j         t          j        d|z   fi |¤ŽS )N)zsetup.py)rY   rS   Ú
executablerZ   s      r   Ú	run_setupzBaseTestCase.run_setup†   s%   € ØˆtŒ}�Sœ^¨]¸TÑ-AÐLÐLÀVÐLÐLÐLr   TNc                 ó    — |p| j         }t          |gt          |¦  «        z   |¬¦  «        }|d         r|st          d|d         z  ¦  «        ‚|S )af  Run a command in the root of the test working copy.

        Runs a command, with the given argument list, in the root of the test
        working copy--returns the stdout and stderr streams and the exit code
        from the subprocess.

        :param cwd: If falsy run within the test package dir, otherwise run
            within the named path.
        )Úcwdé   zCommand failed retcode=%s)rB   rY   rR   Ú	Exception)r
   Úcmdr[   Ú
allow_failrb   Úresults         r   rY   zBaseTestCase._run_cmd‰   sb   € ð Ð%�TÔ%ˆÝ˜3˜%¥$ t¡*¤*Ñ,°#Ð6Ñ6Ô6ˆØ�!Œ9ð 	E˜Zð 	EÝÐ7¸&À¼)ÑCÑDÔDÐDØˆr   )	r   r   r   r   rG   r]   r`   rY   r   r   s   @r   r   r   F   s†   ø€ € € € € ð1#ð 1#ð 1#ð 1#ð 1#ðf#ð #ð #ð4ð 4ð 4ðMð Mð Mð "$°¸$ð ð ð ð ð ð ð ð r   r   c                   ó,   ‡ — e Zd ZdZˆ fd„Zˆ fd„Zˆ xZS )ÚCapturedSubprocessa)  Run a process and capture its output.

    :attr stdout: The output (a string).
    :attr stderr: The standard error (a string).
    :attr returncode: The return code of the process.

    Note that stdout and stderr are decoded from the bytestrings subprocess
    returns using error=replace.
    c                 óø   •— t          t          | ¦  «                             ¦   «          || _        || _        || _        t          j        | j        d<   t          j        | j        d<   t          j        | j        d<   dS )zÞCreate a CapturedSubprocess.

        :param label: A label for the subprocess in the test log. E.g. 'foo'.
        :param *args: The *args to pass to Popen.
        :param **kwargs: The **kwargs to pass to Popen.
        r&   Ústdinr$   N)r   ri   r   Úlabelr[   r\   Ú
subprocessÚPIPE)r
   rl   r[   r\   r   s       €r   r   zCapturedSubprocess.__init__¥   sg   ø€ õ 	Õ  $Ñ'Ô'×0Ò0Ñ2Ô2Ð2ØˆŒ
ØˆŒ	ØˆŒÝ *¤ˆŒ�HÑÝ)œˆŒ�GÑÝ *¤ˆŒ�HÑÐÐr   c                 ó  •— t          t          | ¦  «                             ¦   «          t          j        | j        i | j        ¤Ž}|                     ¦   «         \  }}|                     dd¦  «        | _	        |                     dd¦  «        | _
        |                      | j        dz   t          j        | j	        ¦  «        ¦  «         |                      | j        dz   t          j        | j
        ¦  «        ¦  «         |j        | _        |j        r't!          d| j        ›d| j        ›d|j        ›�¦  «        ‚|                      t$          | d¦  «         |                      t$          | d	¦  «         |                      t$          | d
¦  «         d S )Nzutf-8rK   z-stdoutz-stderrzFailed process args=z	, kwargs=z, returncode=ÚoutÚerrÚ
returncode)r   ri   r   rm   ÚPopenr[   r\   ÚcommunicateÚdecoderp   rq   Ú	addDetailrl   r   Útext_contentrr   ÚAssertionErrorr   Údelattr)r
   Úprocrp   rq   r   s       €r   r   zCapturedSubprocess.setUp´   sU  ø€ ÝÕ  $Ñ'Ô'×-Ò-Ñ/Ô/Ð/ÝÔ ¤Ð:¨d¬kÐ:Ð:ˆØ×#Ò#Ñ%Ô%‰ˆˆSØ—:’:˜g yÑ1Ô1ˆŒØ—:’:˜g yÑ1Ô1ˆŒØ�Š�t”z IÑ-­wÔ/CÀDÄHÑ/MÔ/MÑNÔNÐNØ�Š�t”z IÑ-­wÔ/CÀDÄHÑ/MÔ/MÑNÔNÐNØœ/ˆŒØŒ?ð 	>Ý �.à”I�I�I˜tœ{˜{˜{¨D¬O¨Oð=ñ>ô >ð >ð 	�Š�  uÑ-Ô-Ð-Ø�Š�  uÑ-Ô-Ð-Ø�Š�  |Ñ4Ô4Ð4Ð4Ð4r   r   r   s   @r   ri   ri   š   s[   ø€ € € € € ðð ð0ð 0ð 0ð 0ð 0ð5ð 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5r   ri   c                 ó¶  — t          dd                     | ¦  «        z  ¦  «         t          j        | t          j        t          j        t          j        |¬¦  «        }t          d„ |                     ¦   «         D ¦   «         ¦  «        }t          d¦  «         t          |d         ¦  «         t          d¦  «         t          |d         ¦  «         ||j        fz   S )	z¾Run the command args in cwd.

    :param args: The command to run e.g. ['git', 'status']
    :param cwd: The directory to run the comamnd in.
    :return: ((stdout, stderr), returncode)
    z
Running %sú )rk   r$   r&   rb   c              3   ód   K  — | ]+}|                      d ¦  «                             ¦   «         V — Œ,dS )Úlatin1N)ru   Ústrip)Ú.0Úss     r   ú	<genexpr>z_run_cmd.<locals>.<genexpr>Ñ   s:   è è € ÐHÐH°1�A—H’H˜XÑ&Ô&×,Ò,Ñ.Ô.ÐHÐHÐHÐHÐHÐHr   zSTDOUT:r   zSTDERR:é   )r2   rA   rm   rs   rn   Útuplert   rr   )r[   rb   ÚpÚstreamss       r   rY   rY   Æ   s¿   € õ 
ˆ,˜Ÿš $™œÑ
'Ñ(Ô(Ð(ÝÔØ•J”O­J¬OÝŒ Cð	)ñ 	)ô 	)€Aõ ÐHÐH¸¿º¹¼ÐHÑHÔHÑHÔH€GÝ	ˆ)ÑÔÐÝ	ˆ'�!Œ*ÑÔÐÝ	ˆ)ÑÔÐÝ	ˆ'�!Œ*ÑÔÐØ˜œ�Ñ&Ð&r   c                  ór   — t          g d¢d ¦  «         t          g d¢d ¦  «         t          g d¢d ¦  «         d S )N)ÚgitÚconfigú--globalz
user.emailúexample@example.com)rˆ   r‰   rŠ   z	user.namezOpenStack Developer)rˆ   r‰   rŠ   zuser.signingkeyr‹   rX   © r   r   Ú_config_gitr�   Ù   sp   € ÝØJÐJÐJØñô ð õ ØIÐIÐIØñô ð õ ð	 ð 	 ð 	 Ø!%ñ'ô 'ð 'ð 'ð 'r   )r   r   rC   rm   rS   r4   ÚtestresourcesÚ	testtoolsr   r'   r   ÚFixturer   ÚTestCaseÚResourcedTestCaser   ri   rY   r�   rŒ   r   r   ú<module>r“      s8  ððP 'Ð &à 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 
€
€
€
à €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð ðð ð ð ð ˆhÔñ ô ð ðQð Qð Qð Qð Q�9Ô% }Ô'Fñ Qô Qð Qðh)5ð )5ð )5ð )5ð )5˜Ô)ñ )5ô )5ð )5ðX'ð 'ð 'ð&	'ð 	'ð 	'ð 	'ð 	'r   