B
    18\                 @   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 )NOK   )url
isinstancestrreqmsgcode)selfr   r   r    r   _/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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))usernameme)passwordsecret)realmpypi)
repositoryzhttps://upload.pypi.org/legacy/)
write_filercr	   r   r   finalize_optionsassertEqualgetattr)r   distcmdattr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)r5   r6   PYPIRC_NOPASSWORDr   r   r7   r8   r0   )r   r:   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}
| |
d d |
d }| |d | | jj d	 d
}| | jj | | d| jjjk | d| jjj | t}| |d d d S )Nr?   z2.6)
dist_files   zContent-lengthZ2162zContent-typezmultipart/form-dataPOSTzhttps://upload.pypi.org/legacy/s   xxxs   protocol_versionz---------------------------------------------------------------------------
xyzzy
---------------------------------------------------------------------------)mkdtempospathjoinr5   r6   PYPIRC_LONG_PASSWORDcreate_distr   show_responseensure_finalizedrundictr)   r   headersr8   
assertTrue
startswith
get_methodget_full_urldataassertInget_logsr   )r   tmprH   command	pyversionfilenamerB   pkg_dirr:   r;   rP   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 )Nr?   zyy)contentz2.6zlong description)rB   descriptionrC   zContent-lengthZ2172s   long description)rF   rG   rH   rI   r5   r6   rJ   rK   r   rL   rM   rN   rO   r)   r   rP   r8   rV   rU   )r   rX   rH   rY   rZ   r[   rB   r\   r:   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   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 )Nr?   z2.6)rB   Zoserrorr   i  Z	httperrorzUpload failed (400): httperror)	exceptionz distutils.command.upload.urlopen)side_effect)newrE   )rF   rG   rH   rI   r5   r6   rJ   rK   OSErrorr   r   subTesttyper   mockpatchMockrc   r   rM   rN   rW   r   rV   
clear_logs)r   rX   rH   rB   r\   r:   testsre   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>   rA   r_   rb   rd   rq   __classcell__r   r   )r,   r   r"   E   s    r"   c               C   s
   t tS )N)unittest	makeSuiter"   r   r   r   r   
test_suite   s    ru   __main__)__doc__rG   rs   Zunittest.mockrk   urllib.requestr   Ztest.supportr   distutils.commandr   r%   Zdistutils.command.uploaddistutils.corer   Zdistutils.errorsr   Zdistutils.logr   r   Zdistutils.tests.test_configr	   r
   rJ   r@   objectr   r"   ru   r   r   r   r   r   <module>   s&    