o
    wO iŸ  ã                   @   sh   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 G dd„ de	ƒZ
G dd„ de	ƒZdS )é    N)Úcryptoc                   @   sH   e Zd Z					ddd„Zdg fdd	„Zd
d„ Zddd„Zdd„ ZdS )ÚEtcdProcessHelperÚetcdé¡  éY  Fc                 C   s<   || _ || _|| _|| _i | _|| _d| _|rd| _d S d S )Núhttp://zhttps://)Úbase_directoryÚ	proc_nameÚport_range_startÚinternal_port_range_startÚ	processesÚclusterÚschema)Úselfr   r	   r
   r   r   Útls© r   úR/home/ubuntu/.local/lib/python3.10/site-packages/etcd/tests/integration/helpers.pyÚ__init__   s   

ÿzEtcdProcessHelper.__init__é   c                    st   |dkrd  ‡ fdd„td|ƒD ƒ¡}| d|ddg¡ n| dd	 ˆ j¡ddg¡ td|ƒD ]}ˆ  ||¡ q/d S )
Nr   ú,c                    s    g | ]}d   |dˆ j| ¡‘qS )ztest-node-{}={}127.0.0.1:{}r   )Úformatr   )Ú.0Úslot©r   r   r   Ú
<listcomp>$   s     z)EtcdProcessHelper.run.<locals>.<listcomp>r   z-initial-clusterz-initial-cluster-stateÚnewztest-node-0=http://127.0.0.1:{})ÚjoinÚrangeÚextendr   r   Úadd_one)r   ÚnumberÚ	proc_argsÚinitial_clusterÚir   r   r   Úrun"   s   þþÿzEtcdProcessHelper.runc                 C   s0   t  ¡ }dd„ | j ¡ D ƒD ]}|  |¡ qd S )Nc                 S   s   g | ]}|‘qS r   r   )r   Úkr   r   r   r   4   s    z*EtcdProcessHelper.stop.<locals>.<listcomp>)ÚloggingÚ	getLoggerr   ÚkeysÚkill_one)r   ÚlogÚkeyr   r   r   Ústop2   s   ÿzEtcdProcessHelper.stopNc           	      C   sÆ   t  ¡ }tj| jd| d}| d| ¡ d| j| j| f }dd| j| f }| j	d|dd| d	|d
|d|d|g}|rA| 
|¡ t |¡}| d|j ¡ | d| ¡ t d¡ ||f| j|< d S )Nzpython-etcd.%d-)ÚdirÚprefixzCreated directory %sz%s127.0.0.1:%dr   z	-data-dirz-nameztest-node-%dz-initial-advertise-peer-urlsz-listen-peer-urlsz-advertise-client-urlsz-listen-client-urlsz
Started %dz
Params: %sé   )r&   r'   ÚtempfileÚmkdtempr   Údebugr   r
   r   r	   r   Ú
subprocessÚPopenÚpidÚtimeÚsleepr   )	r   r   r!   r*   Ú	directoryÚclientÚpeerÚdaemon_argsÚdaemonr   r   r   r   7   s2   þÿù



zEtcdProcessHelper.add_onec                 C   sT   t  ¡ }| j |¡\}}| ¡  t d¡ | d|j¡ t	 
|¡ | d| ¡ d S )Nr/   zKilled etcd pid:%dzRemoved directory %s)r&   r'   r   ÚpopÚkillr6   r7   r2   r5   ÚshutilÚrmtree)r   r   r*   Údata_dirÚprocessr   r   r   r)   T   s   

zEtcdProcessHelper.kill_one)r   r   r   FF©N)Ú__name__Ú
__module__Ú__qualname__r   r$   r,   r   r)   r   r   r   r   r      s    
ù
r   c                   @   s(   e Zd Zeddd„ƒZeddd„ƒZdS )Ú	TestingCANc           	   
   C   sä  t  ¡ }| t jd¡ t  ¡ }|st ¡ j}nt 	¡ }| 
| d¡¡ t| ¡ dƒ}|| ¡ _d| ¡ _d| ¡ _d| ¡ _d| ¡ _d| ¡ _| |¡ | d	¡ | d
¡ | | ¡ ¡ | |¡ | t  d d¡dd d¡¡t  d d¡dd d¡¡t jd d¡dd d¡|dg¡ | t jd d¡dd d¡|dg¡ | |d¡ t|dƒ}| t  t j|¡  d¡¡ W d   ƒ n1 sÄw   Y  t|dƒ}| t  !t j|¡  d¡¡ W d   ƒ ||fS 1 séw   Y  ||fS )Né   úutf-8é$   ÚESÚStateÚCityÚOrganizationúOrganizational Unitr   é ÌÚbasicConstraintsÚasciiFzCA:TRUEÚkeyUsagezkeyCertSign, cRLSignÚsubjectKeyIdentifierÚhash)ÚsubjectÚauthorityKeyIdentifierzkeyid:always)ÚissuerÚsha1Úw)"r   ÚPKeyÚgenerate_keyÚTYPE_RSAÚX509ÚuuidÚuuid4ÚintÚhashlibÚmd5ÚupdateÚencodeÚ	hexdigestÚget_subjectÚCNÚCÚSTÚLÚOÚOUÚset_serial_numberÚgmtime_adj_notBeforeÚgmtime_adj_notAfterÚ
set_issuerÚ
set_pubkeyÚadd_extensionsÚX509ExtensionÚsignÚopenÚwriteÚdump_certificateÚFILETYPE_PEMÚdecodeÚdump_privatekey)	ÚclsÚ	cert_pathÚkey_pathÚcnr%   ÚcertÚserialÚmd5_hashÚfr   r   r   Úcreate_test_ca_certificate`   sf   









ÿÿþû


þÿÿÿÿ
ÿüz$TestingCA.create_test_ca_certificatec                 C   s²  t  ¡ }| t jd¡ t  ¡ }|st ¡ j}nt 	¡ }	|	 
| d¡¡ t|	 ¡ dƒ}|| ¡ _d| ¡ _d| ¡ _d| ¡ _d| ¡ _d| ¡ _| t  d	 d
¡dd d
¡¡t  d d
¡dd d
¡¡t  d d
¡dd d
¡¡g¡ | d¡ | d¡ | | ¡ ¡ | |¡ | |¡ | |d¡ t|dƒ}
|
 t  t j|¡  d¡¡ W d   ƒ n1 s¯w   Y  t|dƒ}
|
 t  !t j|¡  d¡¡ W d   ƒ d S 1 sÒw   Y  d S )NrH   rI   rJ   rK   rL   rM   rN   rO   rS   rR   Fz/nonRepudiation,digitalSignature,keyEnciphermentÚextendedKeyUsagezclientAuth,serverAuthÚsubjectAltNamezIP: 127.0.0.1r   rP   rY   rZ   )"r   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rg   rh   ri   rj   rk   rl   rm   rs   rt   ro   rp   rq   rr   rn   ru   rv   rw   rx   ry   rz   r{   )r|   ÚcaÚca_keyr}   r~   r   r%   r€   r   r‚   rƒ   r   r   r   Úcreate_test_certificate”   s^   





ýýý÷



ÿÿÿ"ÿz!TestingCA.create_test_certificaterC   )rD   rE   rF   Úclassmethodr„   r‰   r   r   r   r   rG   ^   s
    3rG   )r?   r3   r0   r&   r6   rb   r_   ÚOpenSSLr   Úobjectr   rG   r   r   r   r   Ú<module>   s    R