U :e@sdZddlZddlZddlmZddlmZddlmZddl m Z ddl m Z ddl mZddlmZddlmZmZdd lmZmZd Zd ZGd d d eZGdddeZddZedkreedS)z#Tests for distutils.command.upload.N) HTTPError) run_unittest)upload) Distribution)DistutilsError)ERRORINFO)PYPIRCBasePyPIRCCommandTestCasez[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@s0eZdZd ddZd ddZddZdd ZdS) FakeOpenNcCs6||_t|ts||_nd|_|p$d|_|p.d|_dS)NZOK)url isinstancestrreqmsgcode)selfr rrr@/usr/local/python38/lib/python3.8/distutils/tests/test_upload.py__init__0s   zFakeOpen.__init__cCsddi||S)Nz content-typeztext/plain; charset=utf-8)getlower)rnamedefaultrrr getheader9s zFakeOpen.getheadercCsdS)Nsxyzzyrrrrrread>sz FakeOpen.readcCs|jSN)rrrrrgetcodeAszFakeOpen.getcode)NN)N)__name__ __module__ __qualname__rrrrrrrrr .s r cs`eZdZfddZfddZddZddZd d Zd d Zd dZ ddZ ddZ Z S)uploadTestCasecs4tt|tj|_|jt_d|_d|_d|_ dSr) superr#setUp upload_modurlopenold_open_urlopen last_opennext_msg next_coder __class__rrr%Gs zuploadTestCase.setUpcs|jt_tt|dSr)r(r&r'r$r#tearDownrr-rrr/OszuploadTestCase.tearDowncCst||j|jd|_|jS)N)rr)r r+r,r*)rr rrrr)SszuploadTestCase._urlopencCsH||jtt}t|}|dD]\}}|t|||q(dS)N))Zusernameme)passwordZsecret)ZrealmZpypi)Z repositoryhttps://upload.pypi.org/legacy/) write_filercr rrfinalize_options assertEqualgetattr)rdistcmdattrZwaitedrrrtest_finalize_optionsWs  z$uploadTestCase.test_finalize_optionscCsZ||jtt}t|}|||jdd|_t|}|||jddS)Nxxx)r3r4PYPIRC_NOPASSWORDrrr5r6r1)rr8r9rrrtest_saved_passwordcsz"uploadTestCase.test_saved_passwordcCs|}tj|d}||dd|}}}|||fg}||jt|j|d\}}t|} d| _ | | t |j jj} || dd| d} || d||j jd d } ||j j| |d |j jjk|d |j jj|t} || d ddS)Nr<2.6 dist_filesContent-lengthZ2162z Content-typezmultipart/form-dataZPOSTr2sxxxsprotocol_versionz--------------------------------------------------------------------------- xyzzy ---------------------------------------------------------------------------)mkdtempospathjoinr3r4PYPIRC_LONG_PASSWORD create_distr show_responseensure_finalizedrundictr*rheadersr6Z assertTrue startswithZ get_methodZ get_full_urldataassertInget_logsr)rtmprGcommand pyversionfilenamerApkg_dirr8r9rOZ content_typeZ expected_urlresultsrrr test_uploadts,   zuploadTestCase.test_uploadc Cs|}tj|d}|j|dddd|}}}|||fg}||jt|j|dd\}}t|} d| _ | | t |j jj} || dd |d |j jjdS) Nr<zyy )Zcontentr?zlong description )rA descriptionrBrCZ2172slong description )rErFrGrHr3r4rIrJrrKrLrMrNr*rrOr6rRrQ) rrTrGrUrVrWrArXr8r9rOrrrtest_upload_correct_crs"  z%uploadTestCase.test_upload_correct_crcCsd|_d|_|t|jdS)Nz Not Foundi)r+r, assertRaisesrrZrrrrtest_upload_failssz uploadTestCase.test_upload_failsc Cs|}tj|d}||dd|fg}||jt|j|d\}}tddtft dddiddt fg}|D]\}}} |j t |j d xtjd tj|d d V|| t|} | | W5QRX|t} ||| d |W5QRXW5QRXqrdS)Nr<r?r@Zoserrorr iZ httperrorzUpload failed (400): httperror) exceptionz distutils.command.upload.urlopen)Z side_effect)newrD)rErFrGrHr3r4rIrJOSErrorrrZsubTesttyper mockZpatchZMockr]rrLrMrSrrRZ clear_logs) rrTrGrArXr8Ztestsr_ZexpectedZraised_exceptionr9rYrrrtest_wrong_exception_orders0      z)uploadTestCase.test_wrong_exception_order) r r!r"r%r/r)r;r>rZr\r^rd __classcell__rrr-rr#Es    r#cCs ttSr)unittestZ makeSuiter#rrrr test_suitesrg__main__)__doc__rFrfZ unittest.mockrcZurllib.requestrZ test.supportrZdistutils.commandrr&Zdistutils.command.uploadZdistutils.corerZdistutils.errorsrZ distutils.logrrZdistutils.tests.test_configr r rIr=objectr r#rgr rrrrs&