B
     S]                 @   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ree  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   ,lib/python3.7/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)NN)N)__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 )N)
superr!   setUp
upload_modurlopenold_open_urlopen	last_opennext_msg	next_code)r   )	__class__r   r   r#   G   s    zuploadTestCase.setUpc                s   | j t_tt|   d S )N)r&   r$   r%   r"   r!   tearDown)r   )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   sL   |  | jt t }t|}|  x"dD ]\}}| t||| q*W d S )N))Zusernameme)passwordZsecret)ZrealmZpypi)Z
repositoryz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)r/   r0   PYPIRC_NOPASSWORDr   r   r1   r2   r.   )r   r4   r5   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}
| |
d d |
d }| |d | | jj d	 d
}| | jj | | d| jjjk | d| jjj | t}| |d d d S )Nr8   z2.6)
dist_files   zContent-lengthZ2162zContent-typezmultipart/form-dataZPOSTzhttps://upload.pypi.org/legacy/s   xxxs   protocol_versionz---------------------------------------------------------------------------
xyzzy
---------------------------------------------------------------------------)mkdtempospathjoinr/   r0   PYPIRC_LONG_PASSWORDcreate_distr   show_responseensure_finalizedrundictr(   r   headersr2   Z
assertTrue
startswithZ
get_methodZget_full_urldataassertInget_logsr   )r   tmpr@   command	pyversionfilenamer;   pkg_dirr4   r5   rH   Zcontent_typeZexpected_urlresultsr   r   r   test_uploadt   s,    

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}
| |
d d	 | d
| jjj d S )Nr8   zyy)Zcontentz2.6zlong description)r;   Zdescriptionr<   zContent-lengthZ2172s   long description)r>   r?   r@   rA   r/   r0   rB   rC   r   rD   rE   rF   rG   r(   r   rH   r2   rK   rJ   )r   rM   r@   rN   rO   rP   r;   rQ   r4   r5   rH   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   rS   )r   r   r   r   test_upload_fails   s    z uploadTestCase.test_upload_failsc             C   s  |   }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}x|D ]\}}}	| jt|jd	x tjd
tj|ddV | |	 t|}
|
  |
  W d Q R X | t}| ||d  |   W d Q R X W d Q R X qtW d S )Nr8   z2.6)r;   Zoserrorr   i  Z	httperrorzUpload failed (400): httperror)	exceptionz distutils.command.upload.urlopen)Zside_effect)newr=   )r>   r?   r@   rA   r/   r0   rB   rC   OSErrorr   r   ZsubTesttyper   mockZpatchZMockrU   r   rE   rF   rL   r   rK   Z
clear_logs)r   rM   r@   r;   rQ   r4   ZtestsrW   ZexpectedZraised_exceptionr5   rR   r   r   r   test_wrong_exception_order   s(    


z)uploadTestCase.test_wrong_exception_order)r   r   r    r#   r,   r'   r7   r:   rS   rT   rV   r\   __classcell__r   r   )r+   r   r!   E   s    r!   c               C   s
   t tS )N)unittestZ	makeSuiter!   r   r   r   r   
test_suite   s    r_   __main__)__doc__r?   r^   Zunittest.mockr[   Zurllib.requestr   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
   rB   r9   objectr   r!   r_   r   r   r   r   r   <module>   s&    