o
    JAf                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z ddlm
Z
 ddlmZ ddlmZ ddlmZmZ dd	lmZmZ d
ZdZG dd deZG dd deZdd Zedkrgee  dS dS )z#Tests for distutils.command.upload.    N)	HTTPError)run_unittest)upload)Distribution)DistutilsError)ERRORINFO)PYPIRCBasePyPIRCCommandTestCasez[distutils]

index-servers =
    server1
    server2

[server1]
username:me
password:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

[server2]
username:meagain
password: secret
realm:acme
repository:http://another.pypi/
z@[distutils]

index-servers =
    server1

[server1]
username:me
c                   @   s0   e Zd Zd
ddZdddZdd Zdd	 ZdS )FakeOpenNc                 C   s6   || _ t|ts|| _nd | _|pd| _|pd| _d S )NZOK   )url
isinstancestrreqmsgcode)selfr   r   r    r   2/usr/lib/python3.10/distutils/tests/test_upload.py__init__0   s   

zFakeOpen.__init__c                 C   s   ddi | |S )Nzcontent-typeztext/plain; charset=utf-8)getlower)r   namedefaultr   r   r   	getheader9   s   zFakeOpen.getheaderc                 C   s   dS )Ns   xyzzyr   r   r   r   r   read>   s   zFakeOpen.readc                 C   s   | j S N)r   r   r   r   r   getcodeA   s   zFakeOpen.getcode)NNr   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   .   s
    

	r   c                       s`   e Zd Z fddZ fddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Z  ZS )uploadTestCasec                    s4   t t|   tj| _| jt_d | _d | _d | _	d S r   )
superr#   setUp
upload_modurlopenold_open_urlopen	last_opennext_msg	next_coder   	__class__r   r   r%   G   s   
zuploadTestCase.setUpc                    s   | j t_tt|   d S r   )r(   r&   r'   r$   r#   tearDownr   r-   r   r   r/   O   s   zuploadTestCase.tearDownc                 C   s   t || j| jd| _| jS )N)r   r   )r   r+   r,   r*   )r   r   r   r   r   r)   S   s   zuploadTestCase._urlopenc                 C   sH   |  | jt t }t|}|  dD ]\}}| t||| qd S )N))usernameme)passwordZsecret)ZrealmZpypi)Z
repositoryhttps://upload.pypi.org/legacy/)
write_filercr	   r   r   finalize_optionsassertEqualgetattr)r   distcmdattrZwaitedr   r   r   test_finalize_optionsW   s   z$uploadTestCase.test_finalize_optionsc                 C   sZ   |  | jt t }t|}|  | |jd  d|_t|}|  | |jd d S )Nxxx)r4   r5   PYPIRC_NOPASSWORDr   r   r6   r7   r2   )r   r9   r:   r   r   r   test_saved_passwordc   s   z"uploadTestCase.test_saved_passwordc                 C   s^  |   }tj|d}| | dd|}}}|||fg}| | jt | j|d\}}t|}	d|	_	|	
  |	  t| jjj}
| t|
d d |
d }| |d | | jj d	 d
}| | jj | | jjj}| d| | d| | d| | d| d|v r| d| d|v r| d| | t}| |d d d S )Nr=   2.6
dist_files   Content-lengthir  zContent-typezmultipart/form-dataZPOSTr3   s   xxxs   protocol_versions   sha256_digests@   cd2eb0837c9b4c962c22d2ff8b5441b7b45805887f051d39bf133b583baf6860s
   md5_digests    f561aaf6ef0bf14d4208bb46a4ccb3ads   blake2_256_digests   b6f289a27d4fe90da63c503bfe0a9b761a8f76bb86148565065f040be6d1c3044cf7ded78ef800509bccb4b648e507d88dc6383d67642aadccce443f1534330az---------------------------------------------------------------------------
xyzzy
---------------------------------------------------------------------------)mkdtempospathjoinr4   r5   PYPIRC_LONG_PASSWORDcreate_distr   show_responseensure_finalizedrundictr*   r   headersassertGreaterEqualintZ
assertTrue
startswithr7   Z
get_methodZget_full_urldataassertInget_logsr   )r   tmprH   command	pyversionfilenamerB   pkg_dirr9   r:   rP   Zcontent_typeZexpected_urlrT   resultsr   r   r   test_uploadt   sF   


zuploadTestCase.test_uploadc                 C   s   |   }tj|d}| j|dd dd|}}}|||fg}| | jt | j|dd\}}t|}	d|	_	|	
  |	  t| jjj}
| t|
d d	 | d
| jjj d S )Nr=   zyy)Zcontentr@   zlong description)rB   descriptionrC   rD   i|  s   long description)rF   rG   rH   rI   r4   r5   rJ   rK   r   rL   rM   rN   rO   r*   r   rP   rQ   rR   rU   rT   )r   rW   rH   rX   rY   rZ   rB   r[   r9   r:   rP   r   r   r   test_upload_correct_cr   s"   
z%uploadTestCase.test_upload_correct_crc                 C   s   d| _ d| _| t| j d S )Nz	Not Foundi  )r+   r,   assertRaisesr   r]   r   r   r   r   test_upload_fails   s   z uploadTestCase.test_upload_failsc                 C   sN  |   }tj|d}| | dd|fg}| | jt | j|d\}}tddtft	dddi d dt
fg}|D ]k\}}}	| jt|jd	U tjd
tj|dd: | |	 t|}
|
  |
  W d    n1 spw   Y  | t}| ||d  |   W d    n1 sw   Y  W d    n1 sw   Y  q9d S )Nr=   r@   rA   Zoserrorr   i  Z	httperrorzUpload failed (400): httperror)	exceptionz distutils.command.upload.urlopen)Zside_effect)newrE   )rF   rG   rH   rI   r4   r5   rJ   rK   OSErrorr   r   ZsubTesttyper    mockZpatchZMockr`   r   rM   rN   rV   r   rU   Z
clear_logs)r   rW   rH   rB   r[   r9   Ztestsrb   ZexpectedZraised_exceptionr:   r\   r   r   r   test_wrong_exception_order   s:   




z)uploadTestCase.test_wrong_exception_order)r    r!   r"   r%   r/   r)   r<   r?   r]   r_   ra   rg   __classcell__r   r   r-   r   r#   E   s    0r#   c                   C   s
   t tS r   )unittestZ	makeSuiter#   r   r   r   r   
test_suite   s   
rj   __main__)__doc__rG   ri   Zunittest.mockrf   Zurllib.errorr   Ztest.supportr   Zdistutils.commandr   r&   Zdistutils.command.uploadZdistutils.corer   Zdistutils.errorsr   Zdistutils.logr   r   Zdistutils.tests.test_configr	   r
   rJ   r>   objectr   r#   rj   r    r   r   r   r   <module>   s*    
 