a zeX@sddlZddlZddlZddlZddlZddlmZddlmZm Z ddl m Z GdddZ e e_GdddZ d d Zd ed fd ed fded fdifdifdd dgifded fded fdedfdddgifdddgifdddgifdddgifded fded fd!d"gd#gd$fd%dd"d&gifd'd(gd)gd*gd+fd,d-gd.gd/gd0gd1gd2gd3gd4gd5fd6d7gd8gd9gd(gd:gd;gd<fgZd=d>Zd?d@ZdAdBZdCdDZGdEdFdFejZdGZdHZdIZdJZdKZedLkredS)MN) namedtuple)StringIOBytesIO)supportc@seZdZgZejZdS)HackedSysModuleN)__name__ __module__ __qualname__argvsysstdinr r A/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_cgi.pyr src@s,eZdZddZddZddZddZd S) ComparableExceptioncCs ||_dSN)err)selfrr r r__init__szComparableException.__init__cCs t|jSr)strrrr r r__str__szComparableException.__str__cCs*t|tstS|jj|jko(|jj|jkSr) isinstance ExceptionNotImplementedr __class__args)rZanExcr r r__eq__s   zComparableException.__eq__cCs t|j|Sr)getattrr)rattrr r r __getattr__szComparableException.__getattr__N)rrr rrrrr r r rrsrc Csi}|dkr"d}d|d<||d<nD|dkrZt|d}d|d<d|d<tt||d<n td |ztj||d d WSty}zt|WYd}~Sd}~00dS) NGETREQUEST_METHOD QUERY_STRINGPOSTlatin-1!application/x-www-form-urlencoded CONTENT_TYPECONTENT_LENGTHzunknown method: %s)strict_parsing) rencoderlen ValueErrorcgiparserr)bufmethodenvfprr r rdo_test"s  r3bad query field: ''&z&&=z=&=z=aaz&=az=a&z=&abad query field: 'a'zb=abzb+=azb za=b=aza=+b=az b=az&b=azb&=abad query field: 'b'z a=a+b&b=b+ca bb cr8r:z a=a+b&a=b+ab azx=1&y=2.0&z=2-3.%2b012.02-3.+0xyzzHbc5161168c542333633315dee1182227:key_store_seqid=400006&cuyer=r&view=bustomer&order_id=0bb2e248638833d48cb7fed300000f1b&expire=964546263&lobale=en-US&kid=130003.300038&ss=envZ400006rZ 964546263z 130003.300038zen-USZ 0bb2e248638833d48cb7fed300000f1br1Zbustomer)z1Hbc5161168c542333633315dee1182227:key_store_seqidZcuyerZexpireZkidZlobaleZorder_idssviewzQgroup_id=5470&set=custom&_assigned_to=31392&_status=1&_category=100&SUBMIT=BrowseZBrowseZ31392Z100Z5470Zcustom)ZSUBMITZ _assigned_toZ _categoryZ_statusZgroup_idsetcCs t|tdS)N)key)sortedrepr)seqr r rnorm^srOcCsdd|DS)NcSsg|] }|dqS)rr .0pr r r bzfirst_elts..r listr r r first_eltsasrWcCsdd|DS)NcSs g|]}|d|ddfqS)rr(r rPr r rrSerTz%first_second_elts..r rUr r rfirst_second_eltsdsrXcCshd}t||}|dtj|||d}i}t|D]&\}}t|trX| |p\|j ||<q<|S)Nr$r)r2environencoding) rr*seekr- FieldStoragedictitemsrrVZgetlistvalue)datarYrZZ fake_stdinZformresultkvr r r gen_resultgs  rdc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$d%gd&d'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5S)6CgiTestscCsPttd}tddd}t||}dgdgdgdgd}|||dS) Nlatin1558boundaryzCONTENT-LENGTH Add 1234 Testing 123. r4)submitidfiletitle)rPOSTDATAr*BOUNDARYr-parse_multipart assertEqual)rr2r1raexpectedr r rtest_parse_multipartus zCgiTests.test_parse_multipartcCsFd}t|d}dddi}t||}ddgi}|||dS)NzY--JfISa01 Content-Disposition: form-data; name="submit-name" just a string --JfISa01-- rfriJfISa01 submit-namezjust a string )rr*r-rsrt)rrqr2r1rarur r r+test_parse_multipart_without_content_length~s   z4CgiTests.test_parse_multipart_without_content_lengthcCsd}d}t|d}|dtt|dd}tj||ddd}d d gi}||||d d|d d dddS) Nrwu]--JfISa01 Content-Disposition: form-data; name="submit-name" Content-Length: 3 ☃ --JfISa01utf8rfrhasciisurrogateescape)rZerrorsrxu u☃r)rr*rr+r-rsrt)rrrrqr2r1rarur r r%test_parse_multipart_invalid_encodings    z.CgiTests.test_parse_multipart_invalid_encodingcCs^t}|||dt||t|t||jt ddd| |dS)Nr\ZMockFieldStoragenameZ fieldvalue) r-r\ assertFalseassertInrMrtrVkeysappendr assertTruerfsr r rtest_fieldstorage_propertiess  z%CgiTests.test_fieldstorage_propertiescCsL|jttjdddid|ttjddtjddid }|tt|dS) Nznot-a-file-objr!PUTrYZfooZbarz content-type text/plain)Zheaders) assertRaises TypeErrorr-r\boolrr r rtest_fieldstorage_invalids  z"CgiTests.test_fieldstorage_invalidcCstD]\}}t|d}|||dt|t|d}|||dt|d|i}tj|d}t|tr|t|t|| | | || ddd| D]N}||}| ||t|d kr|| ||q|| ||d qqdS) Nr zError parsing %s method GETr#zError parsing %s method POSTr"rznonexistent fielddefaultr(r) parse_strict_test_casesr3rtrMr-r\rr]r+ZassertCountEqualrgetvaluer)rorigexpectdr1rrK expect_valr r r test_stricts"        zCgiTests.test_strictc Csddgdgdfddgdgdgdfdtd fd td fd td fd td fdtdfddgdgdfddddgifg }|D]\}}d|i}tjd|d}t|tr||D]N}||}|||t|dkr|| ||q|| ||dqq|dS)Nz x=1;y=2.0r@rA)rDrEzx=1;y=2.0;z=2-3.%2b0rBrC;r5z;;z=;ar9z;b=azb;=ar;z a=a+b;b=b+cr<r=r>z a=a+b;a=b+ar8r?r") separatorrYr(r) r,r-r\rr]rrr+rtr)rZparse_semicolonrrr1rrKrr r rtest_separators(          zCgiTests.test_separatorcCs~tdtt_tddtdd|tjdtj tj rzdt_tj t_ tdd| tj tddS)NZTestingz%szTesting initlog 1z Testing log 2z Testing initlog 1 Testing log 2 z Testing log 3z Testing log 4)r-logrlogfpinitlogrtrospathexistsdevnulllogfile addCleanupcloselogrr r rtest_logs     zCgiTests.test_logcCs~Gddd}|td}||j|dd|dddi}tj||d }||jj| |j d |dS) Nc@s&eZdZddZdddZddZdS) z=CgiTests.test_fieldstorage_readline..TestReadlineFilecSs||_d|_dS)Nr)ronumcalls)rror r rrszFCgiTests.test_fieldstorage_readline..TestReadlineFile.__init__NcSs,|jd7_|r|j|S|jSdS)Nr()rroreadline)rsizer r rrs zFCgiTests.test_fieldstorage_readline..TestReadlineFile.readlinecSs.|jd}t||}t|ts*t||||S)Nro)__dict__rrintsetattr)rrror8r r rrs     zICgiTests.test_fieldstorage_readline..TestReadlineFile.__getattr__)N)rrr rrrr r r rTestReadlineFiles rzwb+sxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxirr!rr2rY) tempfile TemporaryFilerclosewriter[r-r\roZ assertGreaterr)rrfr1rr r rtest_fieldstorage_readlines  z#CgiTests.test_fieldstorage_readlinec Csddtdd}ttd}tj||dd}|t|j dddd d d dd d d ddd dddd g}t t|j D]6}|| D]$\}}t |j ||}|||qq|dS)Nr# multipart/form-data; boundary={}rgr!r&r'r$rYrZrnrkrfilenamer_rpr4rotest.txtrlrmrj formatrrrrqr*r-r\rtr+rVranger^r rr1r2rrrDrbexpgotr r rtest_fieldstorage_multiparts     z$CgiTests.test_fieldstorage_multipartc Csddtdd}tdtd}tj||dd}|t|j dd dd d d dd d dddd dddd g}t t|j D]6}|| D]$\}}t |j ||}|||qqdS)Nr#rZ560rs r$rrrnrkrrpr4rorrlrmrjrrr r r.test_fieldstorage_multipart_leading_whitespace$s     z7CgiTests.test_fieldstorage_multipart_leading_whitespacec Csddtdd}dD]}tt|}tj|||d}|t|j dddd d g}t t|j D]6}|| D]$\}}t |j ||} || |qvqfqdS) Nr#rrgr)z iso-8859-1zutf-8rr(rnuçñ€r) rrrrPOSTDATA_NON_ASCIIr*r-r\rtr+rVrr^r) rr1rZr2rrrDrbrrr r r%test_fieldstorage_multipart_non_ascii7sz.CgiTests.test_fieldstorage_multipart_non_asciics^d}d_fdd}|d|d|d|dd|d|ddd|ddS)NicsDddd|}tt|ddd}t||d|didS) Nzp---123 Content-Disposition: form-data; name="upload"; filename="fake.txt" Content-Type: text/plain %s ---123--  z "multipart/form-data; boundary=-123r#r'r&r!uploadrf)replacerr+rtrdr*)contentr`rYrr rcheckJs   z;CgiTests.test_fieldstorage_multipart_maxline..checkrDr( rE)ZmaxDiff)rZmaxlinerr rr#test_fieldstorage_multipart_maxlineFs  z,CgiTests.test_fieldstorage_multipart_maxlinec Csddttttd}ttd}tj||dd}| t|j d| |j dj d| |j dj d | |j d j d |j d j }| t|ddd d dddddg}t t|D]4}||D]"\}}t|||} | | |qqdS)Nr#rrr$rrrrxLarryr(filesz file1.txts... contents of file1.txt ...rz file2.gifs...contents of file2.gif...)r BOUNDARY_W3rr+ POSTDATA_W3rr*r-r\rtrVrr_rr^r) rr1r2rrrrDrbrrr r rtest_fieldstorage_multipart_w3c]s&    z(CgiTests.test_fieldstorage_multipart_w3ccCs~d}d}dd|tt|d}t|d}tj||dd}|t|jd||jd j d ||jd j d dS) Nrwz_--JfISa01 Content-Disposition: form-data; name="submit-name" Content-Length: 5 Larry --JfISa01r#rrr$rr(rrxr) rrr+rr*r-r\rtrVrr_)rrrrqr1r2rr r r%test_fieldstorage_part_content_lengthrs z.CgiTests.test_fieldstorage_part_content_lengthcCs@td}dd|d}tj||d}|t|djddS)Nsa--MyBoundary Content-Disposition: form-data; name="my-arg"; filename="foo" Test --MyBoundary-- r#z(multipart/form-data; boundary=MyBoundary)r!r&z wsgi.inputrzmy-arg)rr-r\rtr+roread)rr2r1fieldsr r r.test_field_storage_multipart_no_content_lengthsz7CgiTests.test_field_storage_multipart_no_content_lengthcCstd}ddi}tj||d(}|j}||jjWdn1sL0Y||jj||d| t d|jWdn1s0YdS)Ns xxxxxxxxxxr!rrZ xxxxxxxxxxzI/O operation on closed file) rr-r\rorrclosedrrtZassertRaisesRegexr,)rr2r1rrr r r$test_fieldstorage_as_context_managers , z-CgiTests.test_fieldstorage_as_context_managerZvalue1Zvalue2xZvalue2yZvalue3Zvalue4)Zkey1Zkey2Zkey3Zkey4cCs6d}tt|dddd}t||}||j|dS)Nz$key2=value2x&key3=value3&key4=value4r%zkey1=value1&key2=value2yr#r'r&r"r!rr+rdrt _qs_resultrr`rYrcr r rtestQSAndUrlEncodes  zCgiTests.testQSAndUrlEncodecCsddgd}tt|ddd}|t(tjt||ddWdn1s\0Yd }tt|d d dd }|t(tjt||d dWdn1s0Ytjt||dddS)Nr6za=a r%r#r )r2rYmax_num_fieldsz---123 Content-Disposition: form-data; name="a" 3 ---123 Content-Type: application/x-www-form-urlencoded a=4 ---123 Content-Type: application/x-www-form-urlencoded a=5 ---123-- rza=1&a=2rrr) joinrr+rr,r-r\rr*)rr`rYr r rtest_max_num_fieldss8   $   $ zCgiTests.test_max_num_fieldscCs6d}tt|dddd}t||}||j|dS)Nz---123 Content-Disposition: form-data; name="key2" value2y ---123 Content-Disposition: form-data; name="key3" value3 ---123 Content-Disposition: form-data; name="key4" value4 ---123-- rkey1=value1&key2=value2xr#rrrr r rtestQSAndFormDatas  zCgiTests.testQSAndFormDatacCsLd}tt|dddd}|j}|ddit||}|||dS)NaE---123 Content-Disposition: form-data; name="key2" value2y ---123 Content-Disposition: form-data; name="key3" value3 ---123 Content-Disposition: form-data; name="key4" value4 ---123 Content-Disposition: form-data; name="upload"; filename="fake.txt" Content-Type: text/plain this is the content of the fake file ---123-- rrr#rrs%this is the content of the fake file )rr+rcopyupdaterdrt)rr`rYrarcr r rtestQSAndFormDataFiles   zCgiTests.testQSAndFormDataFilecCs|tddif|tddif|tddddif|tddddif|tdddd d f|td d d dif|tdd d dif|tdd dddf|tdddddfdS)Nrztext/vnd.just.made.this.up ; ztext/vnd.just.made.this.upztext/plain;charset=us-asciicharsetzus-asciiztext/plain ; charset="us-ascii"z,text/plain ; charset="us-ascii"; another=optopt)rZanotherz attachment; filename="silly.txt"Z attachmentrz silly.txtz#attachment; filename="strange;name"z strange;namez-attachment; filename="strange;name";size=123;Z123)rrz-form-data; name="files"; filename="fo\"o;bar"z form-datarzfo"o;bar)rr)rtr-Z parse_headerrr r rtest_parse_header!sH       zCgiTests.test_parse_headercCshd}tj|t|ddS)N> rrrrmaxlenZnologZdologZvalid_boundaryr) blacklist)rZ check__all__r-)rrr r rtest_all>szCgiTests.test_allN)rrr rvryr~rrrrrrrrrrrrrrrrrrrrrr r r rress8 %  6"rez6---------------------------721837373350705526688164684a-----------------------------721837373350705526688164684 Content-Disposition: form-data; name="id" 1234 -----------------------------721837373350705526688164684 Content-Disposition: form-data; name="title" -----------------------------721837373350705526688164684 Content-Disposition: form-data; name="file"; filename="test.txt" Content-Type: text/plain Testing 123. -----------------------------721837373350705526688164684 Content-Disposition: form-data; name="submit" Add -----------------------------721837373350705526688164684-- u-----------------------------721837373350705526688164684 Content-Disposition: form-data; name="id" çñ€ -----------------------------721837373350705526688164684 ZAaB03xa--AaB03x Content-Disposition: form-data; name="submit-name" Larry --AaB03x Content-Disposition: form-data; name="files" Content-Type: multipart/mixed; boundary=BbC04y --BbC04y Content-Disposition: file; filename="file1.txt" Content-Type: text/plain ... contents of file1.txt ... --BbC04y Content-Disposition: file; filename="file2.gif" Content-Type: image/gif Content-Transfer-Encoding: binary ...contents of file2.gif... --BbC04y-- --AaB03x-- __main__)r-rr rZunittest collectionsriorrtestrrrr3r,rrOrWrXrdZTestCasererrrqrrrrmainr r r rs                * T