kWc@sddlZddlZddlZddlZddlZddlZddlZejZddlm Z ej j e Z ej je dZej je dZej je dZe jZdfdYZdefd YZd ejfd YZd efd YZdefdYZdefdYZdefdYZdefdYZdefdYZdefdYZe jedZe dkrendS(iN(t test_supports keycert.pems keycert2.pemsselfsigned_pythontestdotnet.pemt FakeSocketcBs;eZejdddZdZddZdZRS(cCs1||_||_d|_||_||_dS(Nt(ttextt fileclasstdatathosttport(tselfRRRR((s'/usr/lib/python2.7/test/test_httplib.pyt__init__s     cCs|jdj|7_dS(NR(Rtjoin(RR((s'/usr/lib/python2.7/test/test_httplib.pytsendallscCs7|dkr'|dkr'tjn|j|jS(Ntrtrb(thttplibtUnimplementedFileModeRR(Rtmodetbufsize((s'/usr/lib/python2.7/test/test_httplib.pytmakefile"scCsdS(N((R((s'/usr/lib/python2.7/test/test_httplib.pytclose'sN(t__name__t __module__tStringIOtNoneR R RR(((s'/usr/lib/python2.7/test/test_httplib.pyRs  t EPipeSocketcBs#eZdZdZdZRS(cCstj||||_dS(N(RR t pipe_trigger(RRR((s'/usr/lib/python2.7/test/test_httplib.pyR ,scCs:|j|kr'tjtjdn|j|7_dS(Ntgotcha(RtsocketterrorterrnotEPIPER(RR((s'/usr/lib/python2.7/test/test_httplib.pyR 1scCsdS(N((R((s'/usr/lib/python2.7/test/test_httplib.pyR6s(RRR R R(((s'/usr/lib/python2.7/test/test_httplib.pyR*s  t NoEOFStringIOcBs&eZdZddZddZRS(sLike StringIO, but raises AssertionError on EOF. This is used below to test that httplib doesn't try to read more from the underlying file than it should. icCs4tjj||}|dkr0tdn|S(NRscaller tried to read past EOF(RtreadtAssertionError(RtnR((s'/usr/lib/python2.7/test/test_httplib.pyR ?s cCs4tjj||}|dkr0tdn|S(NRscaller tried to read past EOF(RtreadlineR!(RtlengthR((s'/usr/lib/python2.7/test/test_httplib.pyR#Es N(RRt__doc__R RR#(((s'/usr/lib/python2.7/test/test_httplib.pyR9s t HeaderTestscBs5eZdZdZdZdZdZRS(cCsdtfdY}xttfD]}xd D]}tjd}td|_||_d}i}|rtt |||R?RG(RRFRB((s'/usr/lib/python2.7/test/test_httplib.pyttest_content_length_0js   cCstjd}td|_|jdd|jdd|jd|j|jdd|jd |j|jd d |jd |j|jd d|jd|j|jddd|jd|j|jdd|jd|j|jdd|jd|j|jdd|jd|j|jdd|jd|j|jd d!|jd"|j|jd#d$|jd%|j|jd&d$|jd'|j|jd(d$|jd)|j|jd*d$|jd+|jdS(,Ns example.comtGETR7sContent-lengthi*sContent-length: 42tFoos bar s Foo: bar tBars baz s Bar: baz t AuthorizationsBearer mytokensAuthorization: Bearer mytokent IterHeadertIterAtIterBsIterHeader: IterA IterBt LatinHeaderssLatinHeader: t Utf8HeadersÀsUtf8Header: Às C1-Controls nextlinesC1-Control: nextlinesEmbedded-Fold-Spaces is alloweds!Embedded-Fold-Space: is allowedsEmbedded-Fold-Tabs is allowedsEmbedded-Fold-Tab: is alloweds Key SpacetvaluesKey Space: values KeySpace sKeySpace : valuesNonbreakSpacesNonbreakSpace: valuesNonbreakSpacesNonbreakSpace: value( RR:RRR;t putrequestt putheadertassertInR<(RRB((s'/usr/lib/python2.7/test/test_httplib.pyttest_putheaders>cCsd}tjd}td}||_|jdd|j|jj|d}tjd}td}||_|jdd|j|jj|dS(NsCGET /foo HTTP/1.1 Host: [2001::]:81 Accept-Encoding: identity s [2001::]:81RRLs/foosEGET /foo HTTP/1.1 Host: [2001:102A::] Accept-Encoding: identity s [2001:102A::](RR:RR;R>t assertTrueRt startswith(RtexpectedRBR;((s'/usr/lib/python2.7/test/test_httplib.pyttest_ipv6host_headers    cCstjd}td|_|jddddddddddd d!d"d#d$d%d&d'f}x=|D]5\}}|jtd|j||WdQXqkWdS((Ns example.comRRLR7s Invalid Namet ValidValues Invalid Names Invalid Names InvalidNames InvalidNames InvalidNames InvalidNames InvalidNames Invalid:Names :InvalidNamet ValidNamesInvalid Values Invalid Values Invalid ValuesInvalidValue s InvalidValue s InvalidValue sInvalid header(s Invalid NameR^(s Invalid NameR^(s Invalid NameR^(s InvalidNameR^(s InvalidNameR^(s InvalidNameR^(s InvalidNameR^(s InvalidNameR^(s Invalid:NameR^(s :InvalidNameR^(R_sInvalid Value(R_s Invalid Value(R_s Invalid Value(R_sInvalidValue (R_s InvalidValue (R_s InvalidValue (RR:RR;RVtassertRaisesRegexpt ValueErrorRW(RRBtcasestnameRU((s'/usr/lib/python2.7/test/test_httplib.pyttest_invalid_headerss, (RRRERKRYR]Rd(((s'/usr/lib/python2.7/test/test_httplib.pyR&Ls    " t BasicTestcBseZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdZdZdZdZdZdZdZRS(cCsd}t|}tj|}|j|j|jdd|j|j|j|jd|j|jd}t|}tj|}|j tj |jdS(NsHTTP/1.1 200 Ok TextiRtTextsHTTP/1.1 400.100 Not Ok Text( RRt HTTPResponsetbeginR?R t assertFalsetisclosedRZt assertRaisest BadStatusLine(RRCR;tresp((s'/usr/lib/python2.7/test/test_httplib.pyttest_status_liness   cCs)tjd}|jt|ddS(NRsBadStatusLine("''",)(RRlR?trepr(Rtexc((s'/usr/lib/python2.7/test/test_httplib.pyttest_bad_status_reprscCsd}t|}tj|}|j|j|jdd|j|j|j|jdd|j|jdS(Ns*HTTP/1.1 200 Ok Content-Length: 4 TextitTetxt( RRRgRhR?R RiRjRZ(RRCR;Rm((s'/usr/lib/python2.7/test/test_httplib.pyttest_partial_readss  cCsd}t|}tj|}|j|j|jdd|j|j|j|jdd|j|jdd|j|jdS(NsHTTP/1.1 200 Ok TextiRrRsiR( RRRgRhR?R RiRjRZ(RRCR;Rm((s'/usr/lib/python2.7/test/test_httplib.pyt$test_partial_reads_no_content_lengths  cCsd}t|}tj|}|j|j|jdd|j|j|j|jdd|j|jdd|j|jdS(Ns+HTTP/1.1 200 Ok Content-Length: 10 TextiRrRsiR( RRRgRhR?R RiRjRZ(RRCR;Rm((s'/usr/lib/python2.7/test/test_httplib.pyt"test_partial_reads_incomplete_bodys  cCsx'd D]}|jtjtj|qWxdddddfD]\}}}tj|}|j}||jkr|jd ||jfn||jkr@|jd ||jfq@q@WdS(Nswww.python.org:abcsuser:password@www.python.orgs[fe80::207:e9ff:fe9b]:8000sfe80::207:e9ff:fe9bi@swww.python.org:80swww.python.orgiPswww.python.org:s[fe80::207:e9ff:fe9b]s!Host incorrectly parsed: %s != %ss!Port incorrectly parsed: %s != %s(swww.python.org:abcsuser:password@www.python.org(s[fe80::207:e9ff:fe9b]:8000sfe80::207:e9ff:fe9bi@(swww.python.org:80swww.python.orgiP(swww.python.orgswww.python.orgiP(swww.python.org:swww.python.orgiP(s[fe80::207:e9ff:fe9b]sfe80::207:e9ff:fe9biP(RkRt InvalidURLtHTTPt_connRtfailR(Rthpthtpthttptc((s'/usr/lib/python2.7/test/test_httplib.pyttest_host_ports  cCs`d}d}t|}tj|}|j|jd}||kr\|jdndS(NsHTTP/1.1 200 OK Set-Cookie: Customer="WILE_E_COYOTE"; Version="1"; Path="/acme" Set-Cookie: Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme" No body srCustomer="WILE_E_COYOTE"; Version="1"; Path="/acme", Part_Number="Rocket_Launcher_0001"; Version="1"; Path="/acme"s Set-Cookies&multiple headers not combined properly(RRRgRht getheaderRz(RRthdrtsR tcookies((s'/usr/lib/python2.7/test/test_httplib.pyttest_response_headers)s   cCsTtdt}tj|dd}|j|jdkrP|jdndS(Ns*HTTP/1.1 200 OK Content-Length: 14432 tmethodtHEADRs)Did not expect response from HEAD request(RRRRgRhR Rz(RR;Rm((s'/usr/lib/python2.7/test/test_httplib.pyttest_read_head<s  cCsbdjdtdDd}d|}t|}tj|}|jtj|jdS(Ns css|]}d|VqdS(s Header%d: fooN((t.0ti((s'/usr/lib/python2.7/test/test_httplib.pys JsisHTTP/1.1 200 OK (R txrangeRRRgRkt HTTPExceptionRh(RRDRRR ((s'/usr/lib/python2.7/test/test_httplib.pyttest_too_many_headersIs #  cCsid}ttd}tjd}t|}||_|jdd||j|jj |dS(NsPGET /foo HTTP/1.1 Host: example.com Accept-Encoding: identity Content-Length:R s example.comRLs/foo( topent__file__RR:RR;R>RZRR[(RR\RCRBR;((s'/usr/lib/python2.7/test/test_httplib.pyttest_send_filePs  cCsd}tjd}td}||_|j||j||jd|_|jtjd||j||jd|_|jt j ||j||jdS(Ns"this is a test this is only a tests example.comRR( RR:RRR;tsendR?RtarrayR(RR\RBR;((s'/usr/lib/python2.7/test/test_httplib.pyt test_send[s     cCsd}t|d}tj|dd}|j|j|jd|jxd D]}t||}tj|dd}|jzwy|jWnUtjk r}|j|jd|jt |d|jt |dnX|j d Wd|jXq\WdS( NsDHTTP/1.1 200 OK Transfer-Encoding: chunked a hello worl 1 d s0 RRLs hello worldRsfoo sIncompleteRead(11 bytes read)sIncompleteRead expected(Rsfoo ( RRRgRhR?R RtIncompleteReadtpartialRoR=Rz(Rt chunked_startR;RmtxR((s'/usr/lib/python2.7/test/test_httplib.pyt test_chunkedis&    cCsd}t|d}tj|dd}|j|j|jd|j|jd|j|jd|j|j dS(NsEHTTP/1.1 200 OK Transfer-Encoding: chunked a hello world 1 d s0 RRRitOK( RRRgRhR?R tstatustreasonRZRj(RRR;Rm((s'/usr/lib/python2.7/test/test_httplib.pyttest_chunked_heads cCsXtd}tj|dd}|j|j|jd|j|jdS(Ns.HTTP/1.1 200 OK Content-Length: -1 Hello RRLsHello (RRRgRhR?R RZRj(RR;Rm((s'/usr/lib/python2.7/test/test_httplib.pyttest_negative_content_lengths   cCstd}tj|dd}|jy|jWnhtjk r}|j|jd|jt|d|jt |d|j |j nX|j ddS(Ns.HTTP/1.1 200 OK Content-Length: 10 Hello RRLsHello s-IncompleteRead(7 bytes read, 3 more expected)sIncompleteRead expected( RRRgRhR RR?RRoR=RZRjRz(RR;RmR((s'/usr/lib/python2.7/test/test_httplib.pyttest_incomplete_reads  cstdd}tjd|_|jtjfdj}|jd|j |jd|j ddS(NsgHTTP/1.0 401 Authorization Required Content-type: text/html WWW-Authenticate: Basic realm="example" sContent-Lengths example.comcsjdddS(NRJs/urlRC(R>((RB(s'/usr/lib/python2.7/test/test_httplib.pytsisBasic realm="example"swww-authenticate( RRR:R;RkRRt getresponseR?RR(RR;Rm((RBs'/usr/lib/python2.7/test/test_httplib.pyt test_epipes     cCs>d}t|}tj|}|jt|dddS(NsHTTP/1.1 200 Ok Texttfilenos-HTTPResponse should expose a fileno attribute(RRRgRZthasattr(RRCR;Rm((s'/usr/lib/python2.7/test/test_httplib.pyttest_filenoattrs  cCsW|jddddd}tjt|}|jtjtjf|jdS(Nsdisabled for HTTP 0.9 supportsHTTP/1.1 200 Oktkis (tskipTestRRgRRkt LineTooLongRlRh(RRCRm((s'/usr/lib/python2.7/test/test_httplib.pyttest_overflowing_status_lines cCsAdddd}tjt|}|jtj|jdS(NsHTTP/1.1 200 OK X-Foo: barR is (RRgRRkRRh(RRCRm((s'/usr/lib/python2.7/test/test_httplib.pyttest_overflowing_header_linescCsKdddd}tjt|}|j|jtj|jdS(Ns/HTTP/1.1 200 OK Transfer-Encoding: chunked RIisa hello world 0 (RRgRRhRkRR (RRCRm((s'/usr/lib/python2.7/test/test_httplib.pyttest_overflowing_chunked_lines cCsXd}t|}tj|}|j|j|jd|j|jdS(NsHTTP/1.1 200 OkR(RRRgRhR?R RZRj(RRCR;Rm((s'/usr/lib/python2.7/test/test_httplib.pyttest_early_eofs   (RRRnRqRtRuRvRRRRRRRRRRRRRRRR(((s'/usr/lib/python2.7/test/test_httplib.pyRes*              t OfflineTestcBseZdZRS(cCs|jtjtjddS(Ns Not Found(R?Rt responsest NOT_FOUND(R((s'/usr/lib/python2.7/test/test_httplib.pyttest_responsess(RRR(((s'/usr/lib/python2.7/test/test_httplib.pyRstSourceAddressTestcBsHeZdZdZdZejeed ddZ RS(cCs\tjtjtj|_tj|j|_tj|_|jj dd|_ dS(Ni( RtAF_INETt SOCK_STREAMtservRt bind_portRtfind_unused_portt source_porttlistenRRB(R((s'/usr/lib/python2.7/test/test_httplib.pytsetUps cCs<|jr"|jjd|_n|jjd|_dS(N(RBRRR(R((s'/usr/lib/python2.7/test/test_httplib.pyttearDowns     cCs[tjt|jdd|jf|_|jj|j|jjj d|jdS(Ntsource_addressRi( RR:tHOSTRRRBtconnectR?R;t getsockname(R((s'/usr/lib/python2.7/test/test_httplib.pyttestHTTPConnectionSourceAddresss tHTTPSConnections#httplib.HTTPSConnection not definedcCs+tjt|jdd|jf|_dS(NRR(RRRRRRB(R((s'/usr/lib/python2.7/test/test_httplib.pyt testHTTPSConnectionSourceAddresss( RRRRRtunittesttskipIfRRR(((s'/usr/lib/python2.7/test/test_httplib.pyRs    t TimeoutTestcBs)eZdZdZdZdZRS(cCsDtjtjtj|_tj|jt_|jjddS(Ni( RRRRRRRtPORTR(R((s'/usr/lib/python2.7/test/test_httplib.pyRscCs|jjd|_dS(N(RRR(R((s'/usr/lib/python2.7/test/test_httplib.pyRs cCs@|jtjtjdz#tjttj}|j WdtjdX|j |j j d|j|jtjtjdz)tjttjdd}|j WdtjdX|j |j j d|jtjttjdd}|j |j |j j d|jdS(sbThis will prove that the timeout gets through HTTPConnection and into the socket. iNttimeout(t assertIsNoneRtgetdefaulttimeouttsetdefaulttimeoutRR:RRRRRR?R;t gettimeoutR(RthttpConn((s'/usr/lib/python2.7/test/test_httplib.pyttestTimeoutAttributes*      N(RRRRRRR(((s'/usr/lib/python2.7/test/test_httplib.pyRs  t HTTPSTestcBs}eZdZdZdZdZdZejdZ dZ dZ dZ d Z d Zd ZRS( cCs#ttds|jdndS(NRsssl support required(RRR(R((s'/usr/lib/python2.7/test/test_httplib.pyR?scCs ddlm}||d|S(Ni(tmake_https_servertcertfile(ttest.ssl_serversR(RRR((s'/usr/lib/python2.7/test/test_httplib.pyt make_serverCscCs2tjttjdd}|j|jddS(NRi(RRRRRR?R(RR|((s'/usr/lib/python2.7/test/test_httplib.pyttest_attributesGsc Csddl}tjdtjdXtjdd}|j|j}|jddWdQX|j |j j dWdQXdS(Nitnetworksself-signed.pythontest.netiRLR7tCERTIFICATE_VERIFY_FAILED( tsslRtrequiresttransient_internetRRRktSSLErrorR>R?t exceptionR(RRR|texc_info((s'/usr/lib/python2.7/test/test_httplib.pyttest_networkedLs  c Csddl}tjdtjd^|j}tjddd|}|jdd|j}|j d|j d WdQXdS( NiRsself-signed.pythontest.netitcontextRLR7tnginxtserver( RRRRt_create_stdlib_contextRRR>RRXR(RRRR|Rm((s'/usr/lib/python2.7/test/test_httplib.pyttest_networked_noverificationVs     cCsttjdtjdRtjdd}|jdd|j}|jd}|jd|WdQXdS(NRswww.python.orgiRLR7s content-types text/html( RRRRRR>RRRX(RR|Rmt content_type((s'/usr/lib/python2.7/test/test_httplib.pyt&test_networked_trusted_by_default_certbs  c Csddl}tjdtjd|j|j}|j|_|jt t j ddd|}|j dd|j }|jd}|jd |WdQXdS( NiRsself-signed.pythontest.netiRRLR7RR(RRRRt SSLContexttPROTOCOL_TLSv1t CERT_REQUIREDt verify_modetload_verify_locationst CERT_selfsigned_pythontestdotnetRRR>RRRX(RRRR|Rmt server_string((s'/usr/lib/python2.7/test/test_httplib.pyttest_networked_good_certms     c Csddl}tjdtjd|j|j}|j|_|jt t j ddd|}|j |j }|jddWdQX|j|jjdWdQXdS( NiRsself-signed.pythontest.netiRRLR7R(RRRRRRRRRtCERT_localhostRRRkRR>R?RR(RRRR|R((s'/usr/lib/python2.7/test/test_httplib.pyttest_networked_bad_cert{s    cCsuddl}|jt}tjd|j}|j|j}|jddWdQX|j |j j ddS(Nit localhostRLR7R( RRRRRRRkRR>R?RR(RRRR|R((s'/usr/lib/python2.7/test/test_httplib.pyttest_local_unknown_certs  cCsddl}|jt}|j|j}|j|_|jttj d|j d|}|j dd|j }|j |jddS(NiRRRLs /nonexistenti(RRRRRRRRRRRR>RR?R(RRRRR|Rm((s'/usr/lib/python2.7/test/test_httplib.pyttest_local_good_hostnames    cCsddl}|jt}|j|j}|j|_t|_|j tt j d|j d|}|j |j|jddWdQX|jt|_t j d|j d|}|jdd|j}|j|jddS(NiRRRLR7s /nonexistenti(RRtCERT_fakehostnameRRRRR8tcheck_hostnameRRRRRktCertificateErrorR>RR9RR?R(RRRRR|Rm((s'/usr/lib/python2.7/test/test_httplib.pyttest_local_bad_hostnames       cCsx'd D]}|jtjtj|qWx^d dddddfD]D\}}}tj|}|j||j|j||jqCWdS(Nswww.python.org:abcsuser:password@www.python.orgs[fe80::207:e9ff:fe9b]:8000sfe80::207:e9ff:fe9bi@swww.python.org:443swww.python.orgiswww.python.org:s[fe80::207:e9ff:fe9b]s[fe80::207:e9ff:fe9b]:(swww.python.org:abcsuser:password@www.python.org(s[fe80::207:e9ff:fe9b]:8000sfe80::207:e9ff:fe9bi@(swww.python.org:443swww.python.orgi(swww.python.org:swww.python.orgi(swww.python.orgswww.python.orgi(s[fe80::207:e9ff:fe9b]sfe80::207:e9ff:fe9bi(s[fe80::207:e9ff:fe9b]:sfe80::207:e9ff:fe9bi(RkRRwRR?RR(RR{R|R}R((s'/usr/lib/python2.7/test/test_httplib.pyRs (RRRRRRRRtsystem_must_validate_certRRRRRRR(((s'/usr/lib/python2.7/test/test_httplib.pyR=s      t TunnelTestscBseZdZRS(cssdddfd}tjd}||_|j|jt|jd|j|jd|j ddd|j |j j d|j |j j d|jd |j jk|jd |j jk|jd |j jk|j|j d dd|j |j j d|j |j j d|jd |j jk|jd |j jkdS( Ns:HTTP/1.0 200 OK HTTP/1.1 200 OK Content-Length: 42 cstd|dd|dS(NRiRi(R(taddressRR(t response_text(s'/usr/lib/python2.7/test/test_httplib.pytcreate_connectionss proxy.comsdestination.comRR7RiPsCONNECT destination.comsHost: destination.comsHost: proxy.comRJ(RRR:t_create_connectionRRkt RuntimeErrort set_tunnelRR>R?R;RRRZR(RRRB((Rs'/usr/lib/python2.7/test/test_httplib.pyt test_connects(     (RRR(((s'/usr/lib/python2.7/test/test_httplib.pyRscCs#tjtttttttdS(N( Rt run_unittestR&RReRRRR(tverbose((s'/usr/lib/python2.7/test/test_httplib.pyt test_mainst__main__(!RRRRRtosRtTestCasettestRtpathtdirnameRthereR RRRRRRRR&ReRRRRRt reap_threadsRRR(((s'/usr/lib/python2.7/test/test_httplib.pyts8         -'