a zep @sddlZddlmZddlmZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlmZddlZddlZddlZddlZddlZddlZddlZddlZddlZz ddlZWne ydZYn0z ddl!Z!Wne y.dZ!Yn0ej"Z"d#dZ$dZ%e&d kZ'z ddl(Z(Wne ytdZ(Yn0d d Z)d d Z*ddZ+ddZ,ddZ-ddZ.ddZ/ddZ0ddZ1ej2ddZ3e*Z4e+Z5e,Z6e-Z7e.Z8e/Z9e0Z:e;edZZ?Gd d!d!ej@ZAGd"d#d#ej@ZBGd$d%d%eBZCGd&d'd'ZDGd(d)d)ej@ZEGd*d+d+ej@ZFGd,d-d-ZGGd.d/d/eAeGZHGd0d1d1eBeGZIeJed>ej@eGZOGd?d@d@eHZPGdAdBdBej@eGZQGdCdDdDej@ZRGdEdFdFeRZSGdGdHdHeDeReGZTGdIdJdJeSeTZUGdKdLdLeRZVGdMdNdNeVZWGdOdPdPeRZXGdQdRdReXZYGdSdTdTeXZZGdUdVdVeXZ[GdWdXdXeXZ\GdYdZdZeXZ]Gd[d\d\e]Z^Gd]d^d^e]Z_d_d`Z`dadbZadcddZbGdedfdfej@ZceJe4dgGdhdidiej@ZdeJe4dgGdjdkdkeLZeeJe5dlGdmdndnej@ZfeJe6doGdpdqdqej@ZgeJe7drGdsdtdtej@ZheJe7drGdudvdveMZieJe9dwGdxdydyej@ZjeNe!dud9eJe:d:Gdzd{d{ej@ZkeJe=d|Gd}d~d~ej@ZlGdddePZmGdddeIZneJed?d?ej@ZeJe;ed@dAGdBdCdCej@ZeJejǐdDkdEeJedFGdGdHdHeAZGdIdJdJeHZeJe;edKdLGdMdNdNeɃZeJe8dOGdPdQdQej@ZeJej̐dRdSGdTdUdUej@ZGdVdWdWej@ZGdXdYdYej@ZeaedZeaed[eaedGd\d]d]ej@ZАd^d_ZeҐd`kreӡdS(aN)support) socket_helper)proxyFuMichael Gilfix was hereሴ utf-8AIXcCstdur dSttdsdSz>tdd }t|tjd}Wdn1sL0YWntylYdS0td|dSdS)NIOCTL_VM_SOCKETS_GET_LOCAL_CIDz /dev/vsockrbz Ir) fcntlhasattrsocketopenioctlrOSErrorstructunpack)frrD/opt/bitninja-python-dojo/embedded/lib/python3.9/test/test_socket.pyget_cid2s  2 rc Cs>zttjtjtj}Wnttfy0YdS0|dS)z5Check whether CAN sockets are supported on this host.FT)r PF_CANSOCK_RAWCAN_RAWAttributeErrorrclosesrrr_have_socket_can?s rc Cs>zttjtjtj}Wnttfy0YdS0|dS)z;Check whether CAN ISOTP sockets are supported on this host.FT)r r SOCK_DGRAM CAN_ISOTPrrrrrrr_have_socket_can_isotpIs r"c Cs>zttjtjtj}Wnttfy0YdS0|dS)z;Check whether CAN J1939 sockets are supported on this host.FT)r rr CAN_J1939rrrrrrr_have_socket_can_j1939Ss r$c Cs<zttjtjd}Wnttfy.YdS0|dS)z5Check whether RDS sockets are supported on this host.rFT)r PF_RDSSOCK_SEQPACKETrrrrrrr_have_socket_rds]s r'c Cs<zttjtjd}Wnttfy.YdS0|dS)z8Check whether AF_ALG sockets are supported on this host.rFT)r AF_ALGr&rrrrrrr_have_socket_alggs r)c Cs<zttjtjd}Wnttfy.YdS0|dS)zzttjtjtj}Wnttfy0YdS0|dS)z>Check whether AF_BLUETOOTH sockets are supported on this host.FT)r AF_BLUETOOTH SOCK_STREAMBTPROTO_RFCOMMrrrrrrr_have_socket_bluetooths r1c cs8t}zt|dVWt|n t|0dSN)r getdefaulttimeoutsetdefaulttimeout)timeoutZ old_timeoutrrrsocket_setdefaulttimeouts  r6IPPROTO_UDPLITEic@seZdZddZddZdS) SocketTCPTestcCs.ttjtj|_t|j|_|jdSr2)r AF_INETr/servr bind_portportlistenselfrrrsetUpszSocketTCPTest.setUpcCs|jd|_dSr2r;rr?rrrtearDowns zSocketTCPTest.tearDownN__name__ __module__ __qualname__rArCrrrrr9sr9c@seZdZddZddZdS) SocketUDPTestcCs$ttjtj|_t|j|_dSr2)r r:r r;rr<r=r?rrrrAszSocketUDPTest.setUpcCs|jd|_dSr2rBr?rrrrCs zSocketUDPTest.tearDownNrDrrrrrHsrHc@seZdZddZdS)SocketUDPLITETestcCs(ttjtjtj|_t|j|_dSr2)r r:r r7r;rr<r=r?rrrrAszSocketUDPLITETest.setUpN)rErFrGrArrrrrIsrIcs8eZdZdZfddZfddZfddZZS)ThreadSafeCleanupTestCasezSubclass of unittest.TestCase with thread-safe cleanup methods. This subclass protects the addCleanup() and doCleanups() methods with a recursive lock. cs tj|i|t|_dSr2)super__init__ threadingRLock _cleanup_lockr@argskwargs __class__rrrLsz"ThreadSafeCleanupTestCase.__init__cs<|j"tj|i|WdS1s.0YdSr2)rOrK addCleanuprPrSrrrUsz$ThreadSafeCleanupTestCase.addCleanupcs<|j"tj|i|WdS1s.0YdSr2)rOrK doCleanupsrPrSrrrVsz$ThreadSafeCleanupTestCase.doCleanups)rErFrG__doc__rLrUrV __classcell__rrrSrrJs  rJc@sHeZdZdZdZdZdZeeZ dZ e dee d7Z dd Z d S) SocketCANTestzTo be able to run this test, a `vcan0` CAN interface can be created with the following commands: # modprobe vcan # ip link add dev vcan0 type vcan # ip link set up vcan0 vcan0z=IB3x8sz@3I4l2IxcCs`ttjtjtj|_||jjz|j|jfWn"t yZ| d|jYn0dSN%network interface `%s` does not exist) r rrrrrUrbind interfacerskipTestr?rrrrAs zSocketCANTest.setUpN) rErFrGrWrabufsize can_frame_fmtrcalcsizeZcan_frame_sizebcm_cmd_msg_fmtrArrrrrYs  rYc@seZdZdZdZddZdS) SocketRDSTestz\To be able to run this test, the `rds` kernel module must be loaded: # modprobe rds cCsVttjtjd|_||jjzt|j|_Wnt yP| dYn0dS)Nrzunable to bind RDS socket) r r%r&r;rUrrr<r=rrbr?rrrrAs  zSocketRDSTest.setUpN)rErFrGrWrcrArrrrrgsrgc@s@eZdZdZddZddZddZdd Zd d Zd d Z dS)ThreadableTestaThreadable Test class The ThreadableTest class makes it easy to create a threaded client/server pair from an existing unit test. To create a new threaded class from an existing unit test, use multiple inheritance: class NewClass (OldClass, ThreadableTest): pass This class defines two new fixture functions with obvious purposes for overriding: clientSetUp () clientTearDown () Any new test functions within the class must then define tests in pairs, where the test name is preceded with a '_' to indicate the client portion of the test. Ex: def testFoo(self): # Server portion def _testFoo(self): # Client portion Any exceptions raised by the clients during their tests are caught and transferred to the main thread to alert the testing framework. Note, the server setup function cannot call any blocking functions that rely on the client thread during setup, unless serverExplicitReady() is called just before the blocking call (such as in setting up a client/server connection and performing the accept() in setUp(). cCs|j|_|j|_dSr2)rA_ThreadableTest__setUp_setUpr?rrrrLDszThreadableTest.__init__cCs|jdS)zThis method allows the server to explicitly indicate that it wants the client thread to proceed. This is useful if the server is about to execute a blocking routine that is dependent upon the client thread during its setup routine.N) server_readysetr?rrrserverExplicitReadyIsz"ThreadableTest.serverExplicitReadycs t_jjjdddt_t_ t_ t d_ d_ fdd}|}|d}||dd}td|}tj|f_z0z Wnd_ Yn0Wjn j0j j jdS)NFcsjrjdSr2)queueqsizegetrr?rrraise_queued_exception[s z5ThreadableTest._setUp..raise_queued_exception._T)rZwait_threads_exitZ wait_threads __enter__rU__exit__rMEventrl client_readydonerpQueueserver_crashedidrfindgetattrthreadstart_new_thread clientRunZ client_threadrjrmwait)r@rsZ methodnamer8Z test_methodrr?rrkPs2            zThreadableTest._setUpc Cs|jzbz |WnFty^}z.|j||WYd}~W|jdSd}~00W|jn |j0|j r|dSt |dst dzHz |Wn0ty}z|j|WYd}~n d}~00W|n |0dS)N__call__z%test_func must be a callable function) rlr clientSetUp BaseExceptionrpputclientTearDownryrmr|r TypeError)r@Z test_funcerrrrrs(       $zThreadableTest.clientRuncCs tddS)Nz clientSetUp must be implemented.)NotImplementedErrorr?rrrrszThreadableTest.clientSetUpcCs|jtdSr2)rzrmrexitr?rrrrs zThreadableTest.clientTearDownN) rErFrGrWrLrnrkrrrrrrrris%"ric@s&eZdZd ddZddZddZdS) ThreadedTCPSocketTestrunTestcCstj||dt|dSN) methodNamer9rLrir@rrrrrLszThreadedTCPSocketTest.__init__cCsttjtj|_dSr2)r r:r/clir?rrrrsz!ThreadedTCPSocketTest.clientSetUpcCs|jd|_t|dSr2rrrirr?rrrrs z$ThreadedTCPSocketTest.clientTearDownN)rrErFrGrLrrrrrrrs rc@s&eZdZd ddZddZddZdS) ThreadedUDPSocketTestrcCstj||dt|dSr)rHrLrirrrrrLszThreadedUDPSocketTest.__init__cCsttjtj|_dSr2)r r:r rr?rrrrsz!ThreadedUDPSocketTest.clientSetUpcCs|jd|_t|dSr2rr?rrrrs z$ThreadedUDPSocketTest.clientTearDownN)rrrrrrrs rz'UDPLITE sockets required for this test.c@s&eZdZd ddZddZddZdS) ThreadedUDPLITESocketTestrcCstj||dt|dSr)rIrLrirrrrrLsz"ThreadedUDPLITESocketTest.__init__cCsttjtjtj|_dSr2)r r:r r7rr?rrrrsz%ThreadedUDPLITESocketTest.clientSetUpcCs|jd|_t|dSr2rr?rrrrs z(ThreadedUDPLITESocketTest.clientTearDownN)rrrrrrrs rc@s&eZdZd ddZddZddZdS) ThreadedCANSocketTestrcCstj||dt|dSr)rYrLrirrrrrLszThreadedCANSocketTest.__init__cCsBttjtjtj|_z|j|jfWnty<Yn0dSr2)r rrrrr`rarr?rrrrs  z!ThreadedCANSocketTest.clientSetUpcCs|jd|_t|dSr2rr?rrrrs z$ThreadedCANSocketTest.clientTearDownN)rrrrrrrs  rc@s&eZdZd ddZddZddZdS) ThreadedRDSSocketTestrcCstj||dt|dSr)rgrLrirrrrrLszThreadedRDSSocketTest.__init__cCsLttjtjd|_z |jtdf|j|_WntyFYn0dSNr) r r%r&rr`HOST getsocknamecli_addrrr?rrrrs  z!ThreadedRDSSocketTest.clientSetUpcCs|jd|_t|dSr2rr?rrrrs z$ThreadedRDSSocketTest.clientTearDownN)rrrrrrrs  r need fcntlz%VSOCK sockets required for this test.z-This test can only be run on a virtual guest.c@s6eZdZd ddZddZddZdd Zd d Zd S)ThreadedVSOCKSocketStreamTestrcCstjj||dt|dSrunittestTestCaserLrirrrrrLsz&ThreadedVSOCKSocketStreamTest.__init__cCshttjtj|_||jj|jtjtf|j | |j \|_ |_ ||j jdSr2)r AF_VSOCKr/r;rUrr`VMADDR_CID_ANY VSOCKPORTr>rnacceptconnconnaddrr?rrrrAs z#ThreadedVSOCKSocketStreamTest.setUpcCsDtdttjtj|_||jjt}|j |t fdS)N皙?) timesleepr rr/rrUrrconnectr)r@Zcidrrrrs  z)ThreadedVSOCKSocketStreamTest.clientSetUpcCs|jd}||tdSN)rrecv assertEqualMSGr@msgrrr testStreams z(ThreadedVSOCKSocketStreamTest.testStreamcCs|jt|jdSr2rsendrrr?rrr _testStreams z)ThreadedVSOCKSocketStreamTest._testStreamN)rrErFrGrLrArrrrrrrrs   rc@s:eZdZdZdddZddZddZd d Zd d Zd S)SocketConnectedTestzSocket tests for client-server connection. self.cli_conn is a client socket connected to the server. The setUp() method guarantees that it is connected to the server. rcCstj||ddSr)rrLrrrrrLszSocketConnectedTest.__init__cCs*t|||j\}}||_dSr2)rrArnr;rcli_connr@raddrrrrrAs zSocketConnectedTest.setUpcCs|jd|_t|dSr2)rrrrCr?rrrrCs zSocketConnectedTest.tearDowncCs(t||jt|jf|j|_dSr2)rrrrrr= serv_connr?rrrrs zSocketConnectedTest.clientSetUpcCs|jd|_t|dSr2)rrrrr?rrrr$s z"SocketConnectedTest.clientTearDownN)r) rErFrGrWrLrArCrrrrrrrs  rc@s6eZdZd ddZddZddZdd Zd d Zd S)SocketPairTestrcCstjj||dt|dSrrrrrrrL+szSocketPairTest.__init__cCst\|_|_dSr2)r socketpairr;rr?rrrrA/szSocketPairTest.setUpcCs|jd|_dSr2rBr?rrrrC2s zSocketPairTest.tearDowncCsdSr2rr?rrrr6szSocketPairTest.clientSetUpcCs|jd|_t|dSr2rr?rrrr9s zSocketPairTest.clientTearDownN)r)rErFrGrLrArCrrrrrrr)s  rc@s(eZdZdZddZddZddZdS) SocketTestBasezA base class for socket tests. Subclasses must provide methods newSocket() to return a new socket and bindSock(sock) to bind it to an unused address. Creates a socket self.serv and sets self.serv_addr to its address. cCs||_|dSr2) newSocketr; bindServerr?rrrrANs zSocketTestBase.setUpcCs||j|j|_dS)z9Bind server socket and set self.serv_addr to its address.N)bindSockr;r serv_addrr?rrrrRs zSocketTestBase.bindServercCs|jd|_dSr2rBr?rrrrCWs zSocketTestBase.tearDownN)rErFrGrWrArrCrrrrrEsrcs eZdZdZfddZZS)SocketListeningTestMixinz%Mixin to listen on the server socket.cst|jdSr2)rKrAr;r>r?rSrrrA_s zSocketListeningTestMixin.setUp)rErFrGrWrArXrrrSrr\srcs@eZdZdZfddZddZddZdd Zd d ZZ S) ThreadedSocketTestMixinzMixin to add client socket and allow client/server tests. Client socket is self.cli and its address is self.cli_addr. See ThreadableTest for usage information. cs tj|i|t|dSr2)rKrLrirPrSrrrLlsz ThreadedSocketTestMixin.__init__cCs||_|dSr2)newClientSocketr bindClientr?rrrrps z#ThreadedSocketTestMixin.clientSetUpcCs|S)z&Return a new socket for use as client.)rr?rrrrtsz'ThreadedSocketTestMixin.newClientSocketcCs||j|j|_dS)z8Bind client socket and set self.cli_addr to its address.N)rrrrr?rrrrxs z"ThreadedSocketTestMixin.bindClientcCs|jd|_t|dSr2rr?rrrr}s z&ThreadedSocketTestMixin.clientTearDown) rErFrGrWrLrrrrrXrrrSrrds  rcsDeZdZdZfddZfddZfddZfdd ZZS) ConnectedStreamTestMixinzMixin to allow client/server stream tests with connected client. Server's socket representing connection to client is self.cli_conn and client's connection to server is self.serv_conn. (Based on SocketConnectedTest.) cs*t||j\}}||_dSr2)rKrArnr;rrrrSrrrAs zConnectedStreamTestMixin.setUpcs|jd|_tdSr2)rrrKrCr?rSrrrCs z!ConnectedStreamTestMixin.tearDowncs$t|j|j|j|_dSr2)rKrrrrrr?rSrrrs z$ConnectedStreamTestMixin.clientSetUpcs6z|jd|_Wnty&Yn0tdSr2)rrrrKrr?rSrrrs    z'ConnectedStreamTestMixin.clientTearDown) rErFrGrWrArCrrrXrrrSrrs    rcs(eZdZdZfddZddZZS)UnixSocketTestBasez(Base class for Unix-domain socket tests.cs(t|_|tj|jtdSr2)tempfilemkdtempdir_pathrUosrmdirrKrAr?rSrrrAs zUnixSocketTestBase.setUpcCs,tj|jd}t|||tj|dS)N)dir)rmktemprrbind_unix_socketrUrunlink)r@sockpathrrrrs zUnixSocketTestBase.bindSock)rErFrGrWrArrXrrrSrrs rc@seZdZdZddZdS)UnixStreamBasez-Base class for Unix-domain SOCK_STREAM tests.cCsttjtjSr2)r AF_UNIXr/r?rrrrszUnixStreamBase.newSocketNrErFrGrWrrrrrrsrcs,eZdZdZeZfddZddZZS) InetTestBasez!Base class for IPv4 socket tests.cst|jd|_dSNro)rKrArr=r?rSrrrAs zInetTestBase.setUpcCstj||jddS)Nhost)rr<rr@rrrrrszInetTestBase.bindSock) rErFrGrWrrrArrXrrrSrrs rc@seZdZdZddZdS) TCPTestBasez#Base class for TCP-over-IPv4 tests.cCsttjtjSr2)r r:r/r?rrrrszTCPTestBase.newSocketNrrrrrrsrc@seZdZdZddZdS) UDPTestBasez#Base class for UDP-over-IPv4 tests.cCsttjtjSr2)r r:r r?rrrrszUDPTestBase.newSocketNrrrrrrsrc@seZdZdZddZdS)UDPLITETestBasez'Base class for UDPLITE-over-IPv4 tests.cCsttjtjtjSr2)r r:r r7r?rrrrszUDPLITETestBase.newSocketNrrrrrrsrc@seZdZdZddZdS)SCTPStreamBasez;Base class for SCTP tests in one-to-one (SOCK_STREAM) mode.cCsttjtjtjSr2)r r:r/ IPPROTO_SCTPr?rrrrs zSCTPStreamBase.newSocketNrrrrrrsrc@seZdZdZejZdS) Inet6TestBasez!Base class for IPv6 socket tests.N)rErFrGrWrHOSTv6rrrrrrsrc@seZdZdZddZdS) UDP6TestBasez#Base class for UDP-over-IPv6 tests.cCsttjtjSr2)r AF_INET6r r?rrrrszUDP6TestBase.newSocketNrrrrrrsrc@seZdZdZddZdS)UDPLITE6TestBasez'Base class for UDPLITE-over-IPv6 tests.cCsttjtjtjSr2)r rr r7r?rrrrszUDPLITE6TestBase.newSocketNrrrrrrsrcs*ddfdd}dd}|r&|S|S)aSkip decorated test if condition is true, add client_skip decorator. If the decorated object is not a class, sets its attribute "client_skip" to a decorator which will return an empty function if the test is to be skipped, or the original function if it is not. This can be used to avoid running the client part of a skipped test when using ThreadableTest. c_sdSr2rrQrRrrr client_passsz%skipWithClientIf..client_passcs*t|}t|ts&fdd|_|S)NcsSr2rr)rrrz3skipWithClientIf..skipdec..)rskip isinstancetype client_skip)objZretvalrreasonrrskipdecs z!skipWithClientIf..skipdeccSs"t|tst|dsdd|_|S)NrcSs|Sr2rrrrrr rz5skipWithClientIf..noskipdec..)rrr rrrrr noskipdec s z#skipWithClientIf..noskipdecr)Z conditionrrrrrrskipWithClientIfs rcs0fdd|D}t|dddd|DS)zSkip decorated test if obj is missing any of the given attributes. Sets client_skip attribute as skipWithClientIf() does. csg|]}t|s|qSr)r .0namerrr rz requireAttrs.. don't have , css|] }|VqdSr2rrrrr rzrequireAttrs..)rjoin)rZ attributesmissingrrr requireAttrssrc Gsd}dd|D}|r0dddd|D}nRdd|D}ztj|}Wn,tyx}zt|}WYd}~nd}~00|t|dud dd d|D|S) aSkip decorated test if a socket cannot be created with given arguments. When an argument is given as a string, will use the value of that attribute of the socket module, or skip the test if it doesn't exist. Sets client_skip attribute as skipWithClientIf() does. NcSs$g|]}t|trtt|s|qSr)rstrr r rrrrrr#sz!requireSocket..rrcss|] }|VqdSr2rrrrrr&rz requireSocket..cSs$g|]}t|trtt|n|qSr)rrrr rrrrr(szcan't create socket({0}): {1}css|]}t|VqdSr2)rrorrrr4r)rr rrrrformat)rQerrrZcallargsrrrrr requireSockets$r c@speZdZddZddZeedudddZd d Z d d Z d dZ ddZ ddZ eejdkdddZeejdkdeejdddZddZddZd d!Zeeed"d#eeed$d%d&d'Zeeed(d)d*d+Zeeed,d-d.d/Zeeed0d1d2d3Zeeed4d5d6d7Zd8d9Z d:d;Z!e"j#dd?Z%d@dAZ&eeedBdCdDdEZ'eeedFdGdHdIZ(eeedFdGdJdKZ)eeedLdMdNdOZ*eeedLdMdPdQZ+dRdSZ,dTdUZ-dVdWZ.dXdYZ/dZd[Z0d\d]Z1d^d_Z2eejdkdd`daZ3eejdkdeeedbdcdddeZ4dfdgZ5dhdiZ6ee"7djdkdldmZ8dndoZ9dpdqZ:drdsZ;dtduZdzd{Z?d|d}Z@d~dZAddZBddZCe"j#ddZDeejdddZEeejdddZFeejdeGejdkdeGeHdddZIeejdeejdkdddZJeejdeGejdkdeGeHdddZKeejdeejdkdddZLddZMddZNddZOeeeddddZPddZQddZRddZSddZTddZUeGejdkdddZVddZWddZXdS)GeneralModuleTestscCs<ddl}|tj|jut}||tj|dSr)_socket assertTruer SocketTypeassertIsInstancer)r@r rrrrtest_SocketType_is_socketobject<s z2GeneralModuleTests.test_SocketType_is_socketobjectcCsttjtj}||d|t||dtjt||dtjt||dt||dt||d|dt||t| t|Wdn1s0Y|dt||dt|dS) Nzfd=%iz family=%sztype=%szproto=0raddr 127.0.0.1rladdrz[closed]) r r:r/assertInfilenorepr assertNotInr`rrr@rrrr test_reprCs 6zGeneralModuleTests.test_reprNzneed _socket modulecCszttjtj}z6d||j|j|jf}|t ||W| n | 0d|j|j|jf}|t ||dS)Nz4z4) r r r:r/rfamilyrprotorrr)r@rexpectedrrrtest_csocket_reprQsz$GeneralModuleTests.test_csocket_reprcCsttjtj,}t|}|||Wdn1sB0Yd}tz |WntyvYn 0| ddS)NzSocket proxy still exists) r r:r/rrrr gc_collectReferenceErrorfail)r@rprrr test_weakref^s2  zGeneralModuleTests.test_weakrefcCsd}|jt|ddtWdn1s00Y|jt|ddtjWdn1sh0Y|jt|ddtjWdn1s0YdS)Nz$Error raising socket exception (%s).rrz socket.herrorzsocket.gaierror) assertRaisesrr herrorgaierrorrrrrtestSocketErrorks"$z"GeneralModuleTests.testSocketErrorcCsttjtj}||j|d|}|t}| d|Wdn1sZ0Y| t |j d|t}| d|Wdn1s0Y| t |j d|t}| ddWdn1s0Y| dt |j |t}| dd|Wdn1s60Y| t |j d|t}| dd|Wdn1s0Y| t |j d|t}| dddWdn1s0Y| dt |j |t}| dd |Wdn1s0Y| d t |j |t}| dddWdn1sf0Y| d t |j |t}| dWdn1s0Y| d t |j |t }| dd|d Wdn1s0Y| d t |j dS)N)ru☠z*a bytes-like object is required, not 'str'y@z.a bytes-like object is required, not 'complex'fooz not NoneTyperbarzan integer is requiredz (1 given)z (4 given))r r:r rUrr`rr$rsendtorr exceptionr)r@rZsocknamecmrrrtestSendtoErrorsusT   *  *  * .  .  . . . * 0z#GeneralModuleTests.testSendtoErrorscCs@tjtjrtjtjtjtjtjtjtj tj dSr2) r r:has_ipv6rr/r rSOCK_RDMr& SOL_SOCKET SO_REUSEADDRr?rrrtestCrucialConstantssz'GeneralModuleTests.testCrucialConstantscCstjtjtjrtjdSr2)r IPPROTO_TCP IPPROTO_UDPr0 IPPROTO_IPV6r?rrrtestCrucialIpProtoConstantssz.GeneralModuleTests.testCrucialIpProtoConstantsntWindows specificcCs4tjtjtjtjtjtjtjtjdSr2) r ZIPPROTO_ICLFXBMZ IPPROTO_STZ IPPROTO_CBTZ IPPROTO_IGPZ IPPROTO_RDPZ IPPROTO_PGMZ IPPROTO_L2TPrr?rrrtestWindowsSpecificConstantssz/GeneralModuleTests.testWindowsSpecificConstantsdarwinzmacOS specific testIPv6 required for this testcCs0hd}|D]}|tt|d|dq dS)N>IPV6_RTHDRDSTOPTS IPV6_NEXTHOPIPV6_RTHDR_TYPE_0 IPV6_DSTOPTSIPV6_RECVPKTINFOZIPV6_RECVPATHMTU IPV6_HOPLIMIT IPV6_RTHDRIPV6_RECVHOPOPTSZ IPV6_PATHMTU IPV6_CHECKSUMZ IPV6_DONTFRAGZIPV6_USE_MIN_MTUIPV6_RECVTCLASS IPV6_TCLASS IPV6_HOPOPTS IPV6_PKTINFOIPV6_RECVRTHDRIPV6_RECVDSTOPTSIPV6_RECVHOPLIMITzMissing RFC3542 socket option '')r r r )r@Zoptsoptrrrtest3542SocketOptionss z(GeneralModuleTests.test3542SocketOptionscCst}zt|}Wnty2|dYn0||ddkdzt|\}}}Wntyz|dYn0||g|}t|}||vr| d|t |fdS)Nname lookup failurertrzError resolving host to ip.z=Error testing host resolution mechanisms. (fqdn: %s, all: %s)) r gethostname gethostbynamerrbr find gethostbyaddrgetfqdnr r)r@hostnameZipZhnamealiasesipaddrsZall_host_namesZfqhnrrrtestHostnameRess    z"GeneralModuleTests.testHostnameRescCsLtjddfD]}|t||q tjfD]}||t|dq,dS)Nz10.0.0.1255.255.255.255r)rZHOSTv4rr rSrrU)r@rrrrrtest_host_resolutions z'GeneralModuleTests.test_host_resolutionc Csd}dD]t}|jt|dt|Wdn1s:0Y|jt|dt|Wdq1sr0YqdS)Nz[resolving an invalid IP address did not raise OSError; can be caused by a broken DNS server)z0.1.1.~1z1+.1.1.1z::1qz::1::2z1:1:1:1:1:1:1:1:1r#)r$rr rSrU)r@Z explanationrrrr test_host_resolution_bad_addresss(z3GeneralModuleTests.test_host_resolution_bad_address sethostnameztest needs socket.sethostname()rRztest needs socket.gethostname()c Cst}ztdWn>tyT}z&|jtjkr>|dnWYd}~n d}~00z8|tdtd|tdWt|n t|0dS)Nnewztest should be run as rootsbarr*)r rRr^rerrnoEPERMrbr)r@Zoldhnrrrrtest_sethostname s   z#GeneralModuleTests.test_sethostname if_nameindexz$socket.if_nameindex() not available.cCst}|D]p\}}||t||t||dt|}||t|||t|}||t|||q dSr) r rcrintr assertGreaterif_nametoindexrif_indextoname)r@Z interfacesindexrZ_index_namerrrtestInterfaceNameIndexs         z)GeneralModuleTests.testInterfaceNameIndexrgz&socket.if_indextoname() not available.cCs$|ttjd|ttjddSNrZ _DEADBEEF)r$rr rgrr?rrrtestInvalidInterfaceIndexToName-sz2GeneralModuleTests.testInvalidInterfaceIndexToNamerfz&socket.if_nametoindex() not available.cCs$|ttjd|ttjddSrk)r$rr rfrr?rrrtestInvalidInterfaceNameToIndex3sz2GeneralModuleTests.testInvalidInterfaceNameToIndex getrefcountztest needs sys.getrefcount()cCsJztt}ttdWn*tyDtt|kr@|dYn0dS)Nrz$socket.getnameinfo loses a reference)sysrnrEr getnameinforr )r@origrrrtestRefCountGetNameInfo9s   z*GeneralModuleTests.testRefCountGetNameInfocCs(ztddWnty"Yn0dS)N)r\rrrr)r rprr?rrrtestInterpreterCrashEs z'GeneralModuleTests.testInterpreterCrashc Cstjdtjdtjdtjdi}|D]d\}}d|>d}dD]$}|||@||||@|@q<||}|||@||t|dq$dS)N ro)rroirigE#i2Tvl) r htonlntohlhtonsntohsitemsrr$ OverflowError)r@Zsizesfuncsizemaskr8ZswappedrrrtestNtoHMs   "zGeneralModuleTests.testNtoHcCs ddl}gd}|dg}ddddd>g}||jd|jdg}d |jg}|D]}t|t|qP|D]}t|t|qn|D]$}|t tj||t tj|q|D]$}|t tj||t tj|q|D]$}| t tj|| t tj|qdS) Nr)rrorrvlro) _testcapiZINT_MININT_MAXr rzryrxrwr$r| assertWarnsDeprecationWarning)r@rZ s_good_valuesZ l_good_valuesZ l_bad_valuesZ s_bad_valuesZs_deprecated_valueskrrrtestNtoHErrors[s.       z!GeneralModuleTests.testNtoHErrorsc Cs |j}tjdstjdvr"d}nd}|D].}zt|d}Wq^Wq*tyVYq*0q*tttdrttdkrt|}|||zt|d}Wntyd}Yn 0|||t j s|t |||t |d||dur|t |d|| t tj d | t tj d dS) N)freebsdZnetbsdZ gnukfreebsd)linuxr<)daytimeZqotddomain)ZechorrZtcpgetandroidapilevelZudprr)rroplatform startswithr getservbynamerr rrZ is_android getservbyportr$r|)r@eqZservicesZservicer=Zport2Zudpportrrr testGetServByts<           z GeneralModuleTests.testGetServByc Cs0|tdt }||dWdn1s>0Ytd|tdt }||dWdn1s0Ytd|tdt }||dWdn1s0YWdn1s0Y|ttjd|ttjddS)N rZspam) rr r3 gettimeoutr6r4r$ ValueErrorr)r@rrrrrtestDefaultTimeouts .  .  Nz%GeneralModuleTests.testDefaultTimeout inet_atonztest needs socket.inet_aton()cCs(|dtd|dtddS)N0.0.0.0r[)rr rr?rrrtestIPv4_inet_aton_fourbytessz/GeneralModuleTests.testIPv4_inet_aton_fourbytes inet_ptonztest needs socket.inet_pton()cs*ddlm}mmfdd}fdd}d|dd|d d |d d |d d|dts||d||d||d||d||dd|dd|d d |d d|d||d||d||d||d||ddS)Nr)rrr:cs |Sr2ra)r:rrrrrz5GeneralModuleTests.testIPv4toString..csttf||Sr2r$rrr}rr?rrrs rrsz 255.0.255.0sz170.170.170.1701.2.3.4rr[z0.0.0.z 300.0.0.0za.0.0.0z 1.2.3.4.5::1)r rrr:rrr@rg assertInvalidr)r:rr@rtestIPv4toStrings.          z#GeneralModuleTests.testIPv4toStringc sz&ddlmmm}|s$dWntyBdYn0tjdkrzdWn8ty}z |j dkrdWYd}~n d}~00fd d fd d } d d d d  dd dd dd dd|d|d|d|d|d|d|d|dt s`|d dd  d!d" d#d$|d%|d&|d'|d(|d)|d*dS)+Nr)rrr0IPv6 not available+could not import needed symbols from socketwin32::&'IPv6 might not be supportedcs |Sr2rr)rrrrrrz5GeneralModuleTests.testIPv6toString..csttf|Sr2rrrr@rrrs z0::0sz1::sEvV $z$45ef:76cb:1a:56ef:afeb:bac:1924:aeaesB 'Tzad42:abc::127:0:254:2s z12:a::z0x20::z:::z::0::z1::abc::z 1::abc::defz 1:2:3:4:5:6z 1:2:3:4:5:6:z1:2:3:4:5:6:7:8:0z1:2:3:4:5:6:7:8:s*@z::254.42.23.64sB*@z42::a29b:254.42.23.64sB*@z"42:a8b9:0:2:ffff:a29b:254.42.23.64z255.254.253.252z 1::260.2.3.0z 1::0.be.e.0z1:2:3:4:5:6:7:1.2.3.4z ::1.2.3.4:0z0.100.200.0:3:4:5:6:7:8) r rrr0rb ImportErrorrorrwinerrorrrr@r0rrr)rrrr@rtestIPv6toStringsj    z#GeneralModuleTests.testIPv6toString inet_ntopztest needs socket.inet_ntop()csddlm}mmfdd}fdd}d|dd|d d |d d |d ||d||d||dd|td d|dd|d d |d ||d||d||dd|td dS)Nr) inet_ntoarr:cs |Sr2rr)r:rrrr&rz5GeneralModuleTests.testStringToIPv4..csttf||Sr2rrr?rrr's z1.0.1.0sz 170.85.170.85sUUr[rrrssr)r rrr:r bytearrayrr)r:rr@rtestStringToIPv4"s$       z#GeneralModuleTests.testStringToIPv4c sz&ddlmmm}|s$dWntyBdYn0tjdkrzdWn8ty}z |j dkrdWYd}~n d}~00fd d fd d } d d d d dd d t d|d|d|ddS)Nr)rrr0rrrrrrcs |Sr2rr)rrrrrMrz5GeneralModuleTests.testStringToIPv6..csttf|Sr2rrrrrrNs rrsz!aef:b01:506:1001:ffff:9997:55:170s Upsss) r rrr0rbrrorrrrrrr)rrrr@rtestStringToIPv6<s0    z#GeneralModuleTests.testStringToIPv6cCst}ttjtj}||j|d|f|}zt t }Wnt yh| dYn0| |dd|fd|d||d|dS)NrrQrz %s invalidro)rfind_unused_portr r:r/rUrr`rrSrRrrbrr)r@r=rrZ my_ip_addrrrr testSockName`s  zGeneralModuleTests.testSockNamecCs@ttjtj}||j|tjtj}||dkddS)Nrzinitial mode is reuse) r r:r/rUr getsockoptr2r3 assertFalser@rZreuserrrtestGetSockOptrs z!GeneralModuleTests.testGetSockOptcCsRttjtj}||j|tjtjd|tjtj}| |dkddS)Nrorzfailed to set reuse mode) r r:r/rUr setsockoptr2r3rrrrrrtestSetSockOptzs  z!GeneralModuleTests.testSetSockOptcCsNttjtj}|dWdn1s00Y|t|jddS)Nrospam)r r:r/ settimeoutr$rrrrrrtestSendAfterCloses(z%GeneralModuleTests.testSendAfterClosec Cst}|tjdftj|dz |Wn:tyr}z"||jtjtj fWYd}~nd}~00| ddS)Nrrz#close() should raise EBADF/ENOTSOCK) r r` _LOCALHOSTrrrrr`EBADFENOTSOCKr )r@rrrrrtestCloseExceptions ,z%GeneralModuleTests.testCloseExceptioncCsttjtjf}||jtjttdrJ||jtjtjBtjfn||jtj||j dWdn1s|0YdS)N SOCK_CLOEXECr) r r:r/rrr rrrrrrrrtestNewAttributess  z$GeneralModuleTests.testNewAttributesc Cst}||jt}|d}|d}|t|jt|f|t|jt|ft D]^}t}z|t|fWn:t y}z"|j t j ks|dkrWYd}~q\d}~00qq\dS)Nr)r rUrrrr$r|r`r itertoolscountrr`Z EADDRINUSE)r@rr=Zbig_portZneg_portr8rrrrtest_getsockaddrargs  z&GeneralModuleTests.test_getsockaddrargcCs|ttjd|ttd|ttd|ttd|ttdt}||j|t|jdd|tjddS)NrZ SIO_RCVALLZ RCVALL_ONZ RCVALL_OFFSIO_KEEPALIVE_VALSr)rodr) r r r rUrr$rrrrrrrtest_sock_ioctls z"GeneralModuleTests.test_sock_ioctlSIO_LOOPBACK_FAST_PATHz1Loopback fast path support required for this testc Cs~t}||jz|tjdWn>tyd}z&d}|j|krN|dWYd}~n d}~00|t |jtjddS)NTi='zQSIO_LOOPBACK_FAST_PATH is defined but doesn't implemented in this Windows version) r rUrrrrrrbr$r)r@rexcZ WSAEOPNOTSUPPrrrtest_sio_loopback_fast_paths   z.GeneralModuleTests.test_sio_loopback_fast_pathc Cs@ztddWn>tjyN}z$|jtjkr8|dWYd}~n d}~00ttdD]}|t|dq\tddtddtddt j rtddt t drt dkrttd ttdttdttdtjtj}|D]J\}}}}}||tj|t|d ||tj|t|d qttdd tj}|D]\}}}}}||tjq\ttdd d tjttdd d d tjtdd tjtjd tjttd}tjtdd } ||| ttdtj}tjtdtjd} ||| ttdd tj}tjtdtjd} ||| ttdd d tj}tjtdtjd} ||| ttdd d d tj}tjtdtjd} ||| tdd tjtjd tj}tjdd tjtjd tjd} ||| |ttjddt tdr.ok_handlercsttjddddSNrrorrr?rrraising_handler<szEGeneralModuleTests.check_sendall_interrupted..raising_handlerg?roxr)r signalr rbrSIGALRMrr$ZeroDivisionErrorrsendallr SOCK_MAX_SIZEr5r)r@Z with_timeoutrrcr old_alarmrr?rcheck_sendall_interrupted4s4       .    z,GeneralModuleTests.check_sendall_interruptedcCs|ddSNFrr?rrrtest_sendall_interruptedSsz+GeneralModuleTests.test_sendall_interruptedcCs|ddS)NTrr?rrr%test_sendall_interrupted_with_timeoutVsz8GeneralModuleTests.test_sendall_interrupted_with_timeoutcCsttjtj}t|}|t}d}tWdn1sD0Y||t |j j dttjtj}| d}t|}d}t|td}tWdn1s0YdS)Nrr ) r r:r/rrResourceWarningrrrrwarningrQmakefile)r@rrr.rrrrtest_dealloc_warnYs &  z$GeneralModuleTests.test_dealloc_warncCsVttjtj2}|d}||t|dWdn1sH0YdS)Nr z<_io.BufferedReader name=-1>)r r:r/r rrrr@rfprrrtest_name_closed_socketiojs z,GeneralModuleTests.test_name_closed_socketiocCstz}|jddd}||||||||t |j|t |j|t |jWdn1s0YdS)Nr r) buffering) r r r readablerwritableseekablerr$rr rrrtest_unusable_closed_socketiops z0GeneralModuleTests.test_unusable_closed_socketiocCs2t}z|tdft||t|dWdn1sP0YW|t|Wdq1s0Yn4|t|Wdn1s0Y0|ttdWdn1s0Y|ttdWdn1s$0YdS)Nrror) r r`rrrr$rr>rrrrrtest_socket_close{s * ( ( ( z$GeneralModuleTests.test_socket_closec CsdD]}|j|dptH}||}||j|Wdn1sN0YWdn1sl0YWdq1s0YqdS)N)rr rwwwbmode)subTestr r rr)r@rrr rrrtest_makefile_modes   z%GeneralModuleTests.test_makefile_modec CsdD]}|j|dntF}|td||Wdn1sL0YWdn1sj0YWdq1s0YqdS)N)rtr\+rrz invalid mode)rr assertRaisesRegexrr )r@rrrrrtest_makefile_invalid_modes  z-GeneralModuleTests.test_makefile_invalid_modecCst}|6ttjdD]}|ttj||qWdn1sH0YttjdD]H}tttj|}| |tjtttj |}| |tj q`dSr) r rangepickleHIGHEST_PROTOCOLr$rdumpsloadsr:rr/)r@rprotocolrrrrr test_pickles2zGeneralModuleTests.test_picklec CsdD]L}ttjtj(}|tdf||Wdq1sF0Yqttjtj&}|tdf|Wdn1s0YdS)N)rrr)r r:r/r`rr>)r@backlogsrvrrrtest_listen_backlogs*z&GeneralModuleTests.test_listen_backlogcCs`ddl}ttjtj4}|tdf|t|j|j dWdn1sR0YdSr) rr r:r/r`rr$r|r>r)r@rr'rrrtest_listen_backlog_overflowsz/GeneralModuleTests.test_listen_backlog_overflowIPv6 required for this test.cCsf|ttjtjddfdttjtj(}|t|jtjddfWdn1sX0YdS)Nrri) r$r|r rprrrr/r`rrrr test_flowinfos   z GeneralModuleTests.test_flowinfocCs0tddtjtjtj\^}}||ddS)Nff02::1de:c0:face:8Dr)ff02::1de:c0:face:8drrr)r rrr r6r)r@rusockaddrrrrtest_getaddrinfo_ipv6_basics z.GeneralModuleTests.test_getaddrinfo_ipv6_basicrzdoes not work on WindowszSymbolic scope id does not workcCsLtd\}}td|dtjtjtj\^}}||ddd|fdS)Nrff02::1de:c0:face:8D%rr-)r rcrrr r6r)r@ifindextest_interfacerur.rrr&test_getaddrinfo_ipv6_scopeid_symbolics z9GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_symbolicz.Numeric scope id does not work or undocumentedcCsDd}tdt|dtjtjtj\^}}||ddd|fdS)N*r0rr-r)r rrrr r6r)r@r1rur.rrr%test_getaddrinfo_ipv6_scopeid_numerics  z8GeneralModuleTests.test_getaddrinfo_ipv6_scopeid_numericcCsHtd\}}ddd|f}t|tjtjB}||d|dfdS)Nrr,rff02::1de:c0:face:8d%1234)r rcrpNI_NUMERICHOSTNI_NUMERICSERVr)r@r1r2r.nameinforrr&test_getnameinfo_ipv6_scopeid_symbolics z9GeneralModuleTests.test_getnameinfo_ipv6_scopeid_symboliccCs@d}ddd|f}t|tjtjB}||dt|dfdS)Nr4r,rrr6r7)r rpr8r9rr)r@r1r.r:rrr%test_getnameinfo_ipv6_scopeid_numerics z8GeneralModuleTests.test_getnameinfo_ipv6_scopeid_numericcCsXttjtj4}|t|jd|t|jdWdn1sJ0YdS)Nrr)r r:r/rrrrrrrrtest_str_for_enumssz%GeneralModuleTests.test_str_for_enumscCsttdd}ttdd}tj|B|B}ttj|}||jtj|d||jtj|d||jtj|d||jtj|d||jtjWdn1s0YdS)N SOCK_NONBLOCKrrroTF)rr r/r:rrr setblocking)r@r>rZ sock_typerrrr test_socket_consistent_sock_types      z3GeneralModuleTests.test_socket_consistent_sock_typecCsttjtj}|}ttjjd}tddtjj Dd}tj||d|d>}| |j || |j || |jddhWdn1s0YdS)Nrocss|]\}}|dvr|VqdS)>r>rNr)rrkindrrrrszEGeneralModuleTests.test_unknown_socket_family_repr..r)rrrrr)r r:r/detachmax AddressFamily __members__values SocketKindr{rrrrr)r@rfdZunknown_familyZ unknown_typerrrrtest_unknown_socket_family_reprs  z2GeneralModuleTests.test_unknown_socket_family_reprsendfileztest needs os.sendfile()c CsGddd}t}ttjtj}t||tj|||Wdn1sb0Y|t "||ddWdn1s0Y|t ||dWdn1s0YWdn1s0YdS)Nc@seZdZddZddZdS)z.FilecSs ||_dSr2rH)r@rHrrrrL/szEGeneralModuleTests.test__sendfile_use_sendfile..File.__init__cSs|jSr2rKr?rrrr2szCGeneralModuleTests.test__sendfile_use_sendfile..File.filenoN)rErFrGrLrrrrrFile.srLrr) r rrcurdirO_RDONLYrr$_GiveupOnSendfile_sendfile_use_sendfiler|r)r@rLrrHrrrtest__sendfile_use_sendfile,s  , 0 z.GeneralModuleTests.test__sendfile_use_sendfilecCst||j|||j||}tj|d}||j|||j|||j||||dSNr)rrrrr rUrrB)r@rrstyperHs2rrr_test_socket_fileno>s  z&GeneralModuleTests._test_socket_filenocCsPttjtj}||j|tjdf||tjtjt tdrttjtj }||j|tjdf||tjtj tj rttj tj}||j|tj dddf||tj tjt tdrLt}|tj|ttjtj}||jz|tj|dWnty8Yn0||tjtjdS)Nrr rr )r r:r/rUrr`rrrUr r rrrrrshutilrmtreerrrrPermissionError)r@rZtmpdirrrrtest_socket_filenoKs4       z%GeneralModuleTests.test_socket_filenocCsD|td$tjtjtjddWdn1s60YdS)Nzinteger argument expectedg@E@rrrr r:r/r?rrr test_socket_fileno_rejects_floatjsz3GeneralModuleTests.test_socket_fileno_rejects_floatcCsD|td$tjtjtjddWdn1s60YdS)Nzinteger is requiredfoorrZr?rrr&test_socket_fileno_rejects_other_typesnsz9GeneralModuleTests.test_socket_fileno_rejects_other_typescCsD|td$tjtjtjddWdn1s60YdS)Nnegative file descriptorrrrrr r:r/r?rrr)test_socket_fileno_rejects_invalid_socketrsz    "     N                     r z!SocketCan required for this test.c@seZdZddZeeeddddZddZ eeeddd d Z d d Z d dZ eeeddddZ eeeddddZdS) BasicCANTestcCstjtjtjdSr2)r AF_CANrrr?rrrr4sz!BasicCANTest.testCrucialConstantsCAN_BCM&socket.CAN_BCM required for this test.cCstjtjtjtjtjtjtjtjtj tj tj tj tj tjtjtjtjtjtjtjtjtjtjtjdSr2)r rjCAN_BCM_TX_SETUPCAN_BCM_TX_DELETECAN_BCM_TX_READCAN_BCM_TX_SENDCAN_BCM_RX_SETUPCAN_BCM_RX_DELETECAN_BCM_RX_READCAN_BCM_TX_STATUSCAN_BCM_TX_EXPIREDCAN_BCM_RX_STATUSCAN_BCM_RX_TIMEOUTCAN_BCM_RX_CHANGEDCAN_BCM_SETTIMERCAN_BCM_STARTTIMERCAN_BCM_TX_COUNTEVTCAN_BCM_TX_ANNOUNCECAN_BCM_TX_CP_CAN_IDCAN_BCM_RX_FILTER_IDCAN_BCM_RX_CHECK_DLCCAN_BCM_RX_NO_AUTOTIMERCAN_BCM_RX_ANNOUNCE_RESUMECAN_BCM_TX_RESET_MULTI_IDXCAN_BCM_RX_RTR_FRAMEr?rrrtestBCMConstantss0zBasicCANTest.testBCMConstantscCs8ttjtjtj}Wdn1s*0YdSr2r rrrrrrrtestCreateSocketszBasicCANTest.testCreateSocketcCs8ttjtjtj}Wdn1s*0YdSr2)r rr rjrrrrtestCreateBCMSocketsz BasicCANTest.testCreateBCMSocketcCsVttjtjtj.}d}|||||Wdn1sH0YdS)N)r()r rrrr`rr)r@raddressrrr testBindAnys zBasicCANTest.testBindAnycCsJttjtjtj"}|td|jdWdn1s<0YdS)Ninterface name too long)xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)r rrrrrr`rrrrtestTooLongInterfaceNamesz%BasicCANTest.testTooLongInterfaceNameCAN_RAW_LOOPBACKz/socket.CAN_RAW_LOOPBACK required for this test.c CslttjtjtjD}dD].}|tjtj||||tjtjqWdn1s^0YdS)N)rro) r rrrr SOL_CAN_RAWrrr)r@rZloopbackrrr testLoopbacks zBasicCANTest.testLoopbackCAN_RAW_FILTERz-socket.CAN_RAW_FILTER required for this test.c Csd\}}td||}ttjtjtjR}|tjtj|| || tjtjd|tjtjt |Wdn1s0YdS)N)iz=IIr]) rpackr rrrrrrrrr)r@can_idZcan_maskZ can_filterrrrr testFilterszBasicCANTest.testFilterN)rErFrGr4rrer r rrrrrrrrrrrrhs(       rhc@seZdZdddZeddZeddZdd Zd d Zd d Z ddZ ddZ ddZ e eeddddZe eeddddZdS)CANTestrcCstj||ddSr)rrLrrrrrLszCANTest.__init__cCs&t|}|dd}t|j|||S)zBuild a CAN frame.r])rljustrrrd)clsrdatacan_dlcrrrbuild_can_frames zCANTest.build_can_framecCs&t|j|\}}}|||d|fS)zDissect a CAN frame.N)rrrd)rframerrrrrrdissect_can_frameszCANTest.dissect_can_framecCs6|j|j\}}||j|||d|jdSr)rrecvfromrcrcfrar@rrrrr testSendFrameszCANTest.testSendFramecCs |dd|_|j|jdS)Nrsrrrrr?rrr_testSendFrameszCANTest._testSendFramecCs$|j|j\}}||j|dSr2)rrrcrrrrrrtestSendMaxFrameszCANTest.testSendMaxFramecCs |dd|_|j|jdS)Nrsrr?rrr_testSendMaxFrame szCANTest._testSendMaxFramecCsD|j|j\}}||j||j|j\}}||j|dSr2)rrrcrcf1cf2rrrrtestSendMultiFrames szCANTest.testSendMultiFramescCs<|dd|_|j|j|dd|_|j|jdS)NsD3"s"3)rrrrrr?rrr_testSendMultiFramesszCANTest._testSendMultiFramesrjrkcCsP|j|j\}}||j|||\}}}||j|||j|dSr2)rrrcrrrrr)r@rrrrrrrr_testBCMs zCANTest._testBCMc Csttjtjtj}||j||jfd|_t gd|_ | |j|j |_ tj }d}d}d}}}}d} d} t|j|||||||| | } | |j } || } || t| dS)N#)ri"ro)r rr rjrUrrrarbytesrrrrorrrfrrr)r@ZbcmZopcoderrZ ival1_secondsZ ival1_usecZ ival2_secondsZ ival2_usecZ bcm_can_idZnframesheaderZheader_plus_frameZ bytes_sentrrrtestBCM$s4   zCANTest.testBCMN)r)rErFrGrL classmethodrrrrrrrrrrer r rrrrrrrs&      rz!CAN ISOTP required for this test.csVeZdZfddZddZddZeee ddd d Z d d Z d dZ Z S) ISOTPTestcstj|i|d|_dSNrZrKrLrarPrSrrrLGszISOTPTest.__init__cCstjtjtjtjdSr2)r rirr!r r?rrrr4KszISOTPTest.testCrucialConstantscCs8ttjtjtj}Wdn1s*0YdSr2rrrrrrQszISOTPTest.testCreateSocketr!z(socket.CAN_ISOTP required for this test.cCs8ttjtjtj}Wdn1s*0YdSr2)r rr r!rrrrtestCreateISOTPSocketUszISOTPTest.testCreateISOTPSocketc CsnttjtjtjF}|td|dWdn1sB0YWdn1s`0YdS)Nr)rror)r rr r!rrr`rrrrr[sz"ISOTPTest.testTooLongInterfaceNamec Csz^ttjtjtj6}|jddf}|||||Wdn1sR0YWnDty}z,|j t j kr| d|jnWYd}~n d}~00dS)NriVr_) r rr r!rar`rrrr`ENODEVrbr@rrrrrrtestBindas  2 zISOTPTest.testBind)rErFrGrLr4rrrer r rrrrXrrrSrrDs   rz!CAN J1939 required for this test.csXeZdZfddZeeeddddZeeeddddZ d d Z Z S) J1939Testcstj|i|d|_dSrrrPrSrrrLrszJ1939Test.__init__r#z(socket.CAN_J1939 required for this test.cCstjtjtjtjtjtjtjtjtj tj tj tj tj tjtjtjtjtjtjtjtjtjtjtjdSr2)r r#ZJ1939_MAX_UNICAST_ADDRZJ1939_IDLE_ADDR J1939_NO_ADDR J1939_NO_NAMEZJ1939_PGN_REQUESTZJ1939_PGN_ADDRESS_CLAIMEDZJ1939_PGN_ADDRESS_COMMANDEDZJ1939_PGN_PDU1_MAXZ J1939_PGN_MAX J1939_NO_PGNZSO_J1939_FILTERZSO_J1939_PROMISCZSO_J1939_SEND_PRIOZSO_J1939_ERRQUEUEZSCM_J1939_DEST_ADDRZSCM_J1939_DEST_NAMEZSCM_J1939_PRIOZSCM_J1939_ERRQUEUEZ J1939_NLA_PADZJ1939_NLA_BYTES_ACKEDZJ1939_EE_INFO_NONEZJ1939_EE_INFO_TX_ABORTZJ1939_FILTER_MAXr?rrrtestJ1939Constantsvs0zJ1939Test.testJ1939ConstantscCs8ttjtjtj}Wdn1s*0YdSr2)r rr r#rrrrtestCreateJ1939SocketszJ1939Test.testCreateJ1939Socketc Cszfttjtjtj>}|jtjtjtjf}||| | |Wdn1sZ0YWnDt y}z,|j t j kr|d|jnWYd}~n d}~00dSr^)r rr r#rarrrr`rrrr`rrbrrrrrs 2 zJ1939Test.testBind) rErFrGrLrrer r rrrrXrrrSrros   !  rz#RDS sockets required for this test.c@s$eZdZddZddZddZdS) BasicRDSTestcCstjtjdSr2)r AF_RDSr%r?rrrr4sz!BasicRDSTest.testCrucialConstantscCs6ttjtjd}Wdn1s(0YdSr)r r%r&rrrrrszBasicRDSTest.testCreateSocketcCs^d}ttjtjd4}|tjtj||tjtj|Wdn1sP0YdS)Ni@r)r r%r&rr2 SO_RCVBUF SO_SNDBUF)r@rcrrrrtestSocketBufferSizesz!BasicRDSTest.testSocketBufferSizeN)rErFrGr4rrrrrrrsrcseZdZdddZfddZddZdd Zd d Zd d Ze e j dddZ e e j dddZ ddZ ddZddZddZZS)RDSTestrcCstj||ddSr)rrLrrrrrLszRDSTest.__init__cstt|_dSr2)rKrArMrxZevtr?rSrrrAs z RDSTest.setUpcCs2|j|j\}}||j|||j|dSr2)r;rrcrrrr@rrrrrtestSendAndRecvszRDSTest.testSendAndRecvcCs"d|_|j|jdt|jfdSNrrrrr,rr=r?rrr_testSendAndRecvszRDSTest._testSendAndRecvcCsH|j|jtj\}}||j||j|j\}}||j|dSr2)r;rrcr MSG_PEEKrrrrrrtestPeekszRDSTest.testPeekcCs"d|_|j|jdt|jfdSrrr?rrr _testPeekszRDSTest._testPeekrecvmsgcCs(|j|j\}}}}||j|dSr2)r;rrcrr)r@rancdataZ msg_flagsrrrrtestSendAndRecvMsgszRDSTest.testSendAndRecvMsgsendmsgcCs&d|_|j|jgddt|jfdS)Ns<hello hello hello hello hello hello hello hello hello hello rr)rrrrr=r?rrr_testSendAndRecvMsgszRDSTest._testSendAndRecvMsgcCsD|j|j\}}||j||j|j\}}||j|dSr2)r;rrcrdata1data2rrrrtestSendAndRecvMultiszRDSTest.testSendAndRecvMulticCs@d|_|j|jdt|jfd|_|j|jdt|jfdS)Nsbaconrsegg)rrr,rr=rr?rrr_testSendAndRecvMultiszRDSTest._testSendAndRecvMulticCsLt|jgggd\}}}||j||j|j\}}||j|dS)Ng@)selectr;rrrcrr)r@rrr\rrrrr testSelectszRDSTest.testSelectcCs"d|_|j|jdt|jfdS)Nsselectrrr?rrr _testSelectszRDSTest._testSelect)r)rErFrGrLrArrrrrr rrrrrrrXrrrSrrs      rz'QIPCRTR sockets required for this test.c@s<eZdZddZddZddZddZd d Zd d Zd S)BasicQIPCRTRTestcCs tjdSr2)r r*r?rrrr4 sz%BasicQIPCRTRTest.testCrucialConstantscCs4ttjtj}Wdn1s&0YdSr2)r r*r rrrrr sz!BasicQIPCRTRTest.testCreateSocketcCsHttjtj$}||ddWdn1s:0YdSNror)r r*r rrrrrr testUnbound szBasicQIPCRTRTest.testUnboundcCs^ttjtj:}tj||dd||ddWdn1sP0YdS)Nrrro)r r*r rr<rassertNotEqualrrrr testBindSock szBasicQIPCRTRTest.testBindSockcCsHttjtj$}|jttj|ddWdn1s:0YdS)Nrr)r r*r r$rrr<rrrrtestInvalidBindSock sz$BasicQIPCRTRTest.testInvalidBindSockcCsRttjtj.}|d||ddWdn1sD0YdS)N){rror)r r*r rrrrrrrtestAutoBindSock s z!BasicQIPCRTRTest.testAutoBindSockN) rErFrGr4rrrrrrrrrrs rc@s,eZdZddZddZddZddZd S) BasicVSOCKTestcCs tjdSr2)r rr?rrrr4 sz#BasicVSOCKTest.testCrucialConstantscCs4tjtjtjtjtjtjtjtjdSr2) r SO_VM_SOCKETS_BUFFER_SIZESO_VM_SOCKETS_BUFFER_MIN_SIZESO_VM_SOCKETS_BUFFER_MAX_SIZErVMADDR_PORT_ANYVMADDR_CID_HOSTVM_SOCKETS_INVALID_VERSIONrr?rrrtestVSOCKConstants# sz!BasicVSOCKTest.testVSOCKConstantscCs4ttjtj}Wdn1s&0YdSr2)r rr/rrrrr- szBasicVSOCKTest.testCreateSocketcCsttjtj}|tjtj}|tjtj}|tjtj}|tjtj|d|tjtj|d|tjtj|d||d|tjtj||d|tjtj||d|tjtjWdn1s0YdSNr) r rr/rrrrrr)r@rZorig_maxrqZorig_minrrrr1 sD      z#BasicVSOCKTest.testSocketBufferSizeN)rErFrGr4rrrrrrrr s rz)Bluetooth sockets required for this test.c@sveZdZddZddZeejdkdddZ eejdkd d d Z eejdkpdej d d ddZ dS)BasicBluetoothTestcCsJtjtjtjtjtjdkrFtjtjtj tj dsFtj dS)Nrr) r Z BDADDR_ANYZ BDADDR_LOCALr.r0ror BTPROTO_HCIZSOL_HCI BTPROTO_L2CAPr BTPROTO_SCOr?rrrtestBluetoothConstantsP s  z)BasicBluetoothTest.testBluetoothConstantscCs8ttjtjtj}Wdn1s*0YdSr2)r r.r/r0rrrrtestCreateRfcommSocket^ sz)BasicBluetoothTest.testCreateRfcommSocketrz&windows does not support L2CAP socketscCs8ttjtjtj}Wdn1s*0YdSr2)r r.r&rrrrrtestCreateL2capSocketb sz(BasicBluetoothTest.testCreateL2capSocketz$windows does not support HCI socketscCs8ttjtjtj}Wdn1s*0YdSr2)r r.rrrrrrtestCreateHciSocketg sz&BasicBluetoothTest.testCreateHciSocketrz.windows and freebsd do not support SCO socketscCs8ttjtjtj}Wdn1s*0YdSr2)r r.r&rrrrrtestCreateScoSocketl sz&BasicBluetoothTest.testCreateScoSocketN) rErFrGrrrrgrorrrrrrrrrrL s  rc@seZdZd+ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#ZeeZejd$d%Zd&d'Zd(d)Zd*S), BasicTCPTestrcCstj||ddSrrrLrrrrrLu szBasicTCPTest.__init__cCs|jd}||tdSr)rrrrrrrrtestRecvx s zBasicTCPTest.testRecvcCs|jtdSr2rrrr?rrr _testRecv} szBasicTCPTest._testRecvcCs8|jttd}|jd}||}||tdSNr)rrrrr)r@seg1seg2rrrrtestOverFlowRecv s zBasicTCPTest.testOverFlowRecvcCs|jtdSr2rr?rrr_testOverFlowRecv szBasicTCPTest._testOverFlowRecvcCs |jd\}}||tdSr)rrrrr@rrrrr testRecvFrom szBasicTCPTest.testRecvFromcCs|jtdSr2rr?rrr _testRecvFrom szBasicTCPTest._testRecvFromcCs@|jttd\}}|jd\}}||}||tdSr)rrrrr)r@rrrrrrrtestOverFlowRecvFrom sz!BasicTCPTest.testOverFlowRecvFromcCs|jtdSr2rr?rrr_testOverFlowRecvFrom sz"BasicTCPTest._testOverFlowRecvFromcCs0d}|jd}|sq ||7}q||ddS)Nrrffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)rrr)r@rreadrrr testSendAll s   zBasicTCPTest.testSendAllcCsd}|j|dS)Nr)rr)r@Z big_chunkrrr _testSendAll szBasicTCPTest._testSendAllcCsP|j}t|tjtj}||j||tj| d}| |t dSr) rrr fromfdr:r/rUrrrrr)r@rHrrrrr testFromFd s    zBasicTCPTest.testFromFdcCs|jtdSr2rr?rrr _testFromFd szBasicTCPTest._testFromFdcCs0|j}||j|d}||tdSr)rduprUrrrr)r@rrrrrtestDup s   zBasicTCPTest.testDupcCs|jtdSr2rr?rrr_testDup szBasicTCPTest._testDupcCs&|jd}||t|jdSr)rrrrrzrrrrr testShutdown s  zBasicTCPTest.testShutdowncCs|jt|jddSr)rrrshutdownr?rrr _testShutdown s zBasicTCPTest._testShutdowncCsXddl}|jt|t|jj|jd|t|jjd|jd|jddS)Nrror) rrrrr$r|rrUINT_MAXr@rrrr_testShutdown_overflow s    z#BasicTCPTest._testShutdown_overflowcCs|j}|j}|||||jj|t|jjd|j t j t j t j |d}| |j |d}||tdS)Nrr)rrrBrr _closedr$rrrr r:r/rUr)r@rrrrrrr testDetach s      zBasicTCPTest.testDetachcCs|jtdSr2rr?rrr _testDetach szBasicTCPTest._testDetachN)r)rErFrGrLrrrrrrrrrrr r r rrrrrfZtestShutdown_overflowrrrrrrrrs s,      rc@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS) BasicUDPTestrcCstj||ddSr)rrLrrrrrL szBasicUDPTest.__init__cCs |jtt}||tdSr2r;rrrrrrrrtestSendtoAndRecv szBasicUDPTest.testSendtoAndRecvcCs|jtdt|jfdSrrr,rrr=r?rrr_testSendtoAndRecv szBasicUDPTest._testSendtoAndRecvcCs$|jtt\}}||tdSr2r;rrrrrrrrr szBasicUDPTest.testRecvFromcCs|jtdt|jfdSrrr?rrrr szBasicUDPTest._testRecvFromcCs|t|jjddSNrr$rr;rr?rrrtestRecvFromNegative sz!BasicUDPTest.testRecvFromNegativecCs|jtdt|jfdSrrr?rrr_testRecvFromNegative sz"BasicUDPTest._testRecvFromNegativeN)r rErFrGrLrrrrr r!rrrrr s rc@sFeZdZdddZddZddZdd Zd d Zd d ZddZ dS)BasicUDPLITETestrcCstj||ddSr)rrLrrrrrL szBasicUDPLITETest.__init__cCs |jtt}||tdSr2rrrrrr sz"BasicUDPLITETest.testSendtoAndRecvcCs|jtdt|jfdSrrr?rrrr sz#BasicUDPLITETest._testSendtoAndRecvcCs$|jtt\}}||tdSr2rrrrrr szBasicUDPLITETest.testRecvFromcCs|jtdt|jfdSrrr?rrrr szBasicUDPLITETest._testRecvFromcCs|t|jjddSrrr?rrrr " sz%BasicUDPLITETest.testRecvFromNegativecCs|jtdt|jfdSrrr?rrrr!& sz&BasicUDPLITETest._testRecvFromNegativeN)rr"rrrrr# s r#cseZdZejZfddZddZdZddZ dd Z d d Z d d Z dZ dD]Ze eeedOZ qNdZdZdZdddZZS)SendrecvmsgBasecst|_tdSr2)rMrx misc_eventrKrAr?rSrrrAK s zSendrecvmsgBase.setUpcCs |j|Sr2)cli_sockrrrrr sendToServerO szSendrecvmsgBase.sendToServerrcGs|jj||jt|dSr2)r&rsendmsg_to_server_defaultsrr@rQrrrsendmsgToServerW szSendrecvmsgBase.sendmsgToServercGs |j|g|R}|||Sr2)rregisterRecvmsgResult)r@rrcrQresultrrr doRecvmsg_ s zSendrecvmsgBase.doRecvmsgcCsdSr2rr@r,rrrr+i sz%SendrecvmsgBase.registerRecvmsgResultcCs|||dSr2rr@Zaddr1Zaddr2rrrcheckRecvmsgAddresso sz#SendrecvmsgBase.checkRecvmsgAddressr) MSG_CTRUNCMSG_OOBNc Cs|j}|j}|r&||jO}||jO}n|durB||jO}||jO}||M}||M}||O}||O}||@|@}|rtd|||B|@} ||| @|| @dS)Nz6contradictory set, unset requirements for flags {0:#x})msg_flags_common_setmsg_flags_common_unsetmsg_flags_eor_indicatormsg_flags_non_eor_indicator Exceptionrr) r@reorcheckset checkunsetignoreZ defaultsetZ defaultunsetZinbothrrrr checkFlags s&      zSendrecvmsgBase.checkFlags)Nrrr)rErFrGrLOOPBACK_TIMEOUT fail_timeoutrAr'r(r*r-r+r1r5rrr r4r6r7r=rXrrrSrr$D s  r$c@seZdZddZdS)RecvmsgIntoMixincGsht|}|j|gg|R}||||dd||d|t|d|df|ddSr)r recvmsg_intor+assertGreaterEqualassertLessEqualr)r@rrcrQbufr,rrrr- s  zRecvmsgIntoMixin.doRecvmsgN)rErFrGr-rrrrr@ sr@cs eZdZefddZZS)SendrecvmsgDgramFlagsBasecstjtjBSr2)rKr7r MSG_TRUNCr?rSrrr7 sz5SendrecvmsgDgramFlagsBase.msg_flags_non_eor_indicator)rErFrGpropertyr7rXrrrSrrE srEcs eZdZefddZZS)SendrecvmsgSCTPFlagsBasecstjtjBSr2)rKr6r MSG_EORr?rSrrr6 sz0SendrecvmsgSCTPFlagsBase.msg_flags_eor_indicator)rErFrGrGr6rXrrrSrrH srHc@s8eZdZeddZeddZeddZddZd S) SendrecvmsgConnectionlessBasecCs|jSr2)r;r?rrr serv_sock sz'SendrecvmsgConnectionlessBase.serv_sockcCs|jSr2)rr?rrrr& sz&SendrecvmsgConnectionlessBase.cli_sockcCsggd|jfSr)rr?rrrr( sz8SendrecvmsgConnectionlessBase.sendmsg_to_server_defaultscCs|j||jSr2)r&r,rrrrrr' sz*SendrecvmsgConnectionlessBase.sendToServerN)rErFrGrGrKr&r(r'rrrrrJ s   rJc@s,eZdZeddZeddZddZdS)SendrecvmsgConnectedBasecCs|jSr2)rr?rrrrK sz"SendrecvmsgConnectedBase.serv_sockcCs|jSr2)rr?rrrr& sz!SendrecvmsgConnectedBase.cli_sockcCsdSr2rr0rrrr1 sz,SendrecvmsgConnectedBase.checkRecvmsgAddressN)rErFrGrGrKr&r1rrrrrL s   rLcseZdZfddZZS)SendrecvmsgServerTimeoutBasecst|j|jdSr2)rKrArKrr?r?rSrrrA s z"SendrecvmsgServerTimeoutBase.setUp)rErFrGrArXrrrSrrM srMc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZeedddZejd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*S)+ SendmsgTestscCs||jtttdSr2rrKrrrr?rrr testSendmsg szSendmsgTests.testSendmsgcCs||tgttdSr2rr*rrr?rrr _testSendmsg szSendmsgTests._testSendmsgcCs||jtttdSr2rOr?rrrtestSendmsgDataGenerator sz%SendmsgTests.testSendmsgDataGeneratorcCs&||ddtfDttdS)Ncss|] }|VqdSr2rrrrrr rz9SendmsgTests._testSendmsgDataGenerator..rQr?rrr_testSendmsgDataGenerator sz&SendmsgTests._testSendmsgDataGeneratorcCs||jtttdSr2rOr?rrrtestSendmsgAncillaryGenerator sz*SendmsgTests.testSendmsgAncillaryGeneratorcCs(||tgdddDttdS)Ncss|] }|VqdSr2rrrrrr rz>SendmsgTests._testSendmsgAncillaryGenerator..rrQr?rrr_testSendmsgAncillaryGenerator sz+SendmsgTests._testSendmsgAncillaryGeneratorcCs||jtttdSr2rOr?rrrtestSendmsgArray# szSendmsgTests.testSendmsgArraycCs$||tdtgttdS)NB)rr*arrayrrr?rrr_testSendmsgArray' szSendmsgTests._testSendmsgArraycCs||jtttdSr2rOr?rrrtestSendmsgGather+ szSendmsgTests.testSendmsgGathercCs.||tddtddgttdSNrrQr?rrr_testSendmsgGather/ szSendmsgTests._testSendmsgGathercCs||jdddSNrdonerrKrr?rrrtestSendmsgBadArgs2 szSendmsgTests.testSendmsgBadArgscCs|t|jj|t|jd|t|jt|t|jtg|t|jttg|t|jtgt|t|jtggt|t|jtggdt|ddS)Nsnot in an iterablerr_)r$rr&rr*objectrr'r?rrr_testSendmsgBadArgs6 s.         z SendmsgTests._testSendmsgBadArgscCs||jdddSr^r`r?rrrtestSendmsgBadCmsgH szSendmsgTests.testSendmsgBadCmsgcCs|t|jtgtg|t|jtgtddfg|t|jtgdtdfg|t|jtgddtfg|t|jtgdg|t|jtgdg|ddS)Nrdata)rr)rrrer4r_r$rr*rrbr'r?rrr_testSendmsgBadCmsgL s&       z SendmsgTests._testSendmsgBadCmsg CMSG_SPACEcCs||jdddSr^r`r?rrrtestSendmsgBadMultiCmsg[ sz$SendmsgTests.testSendmsgBadMultiCmsgcCs@|t|jtggd|t|jtgdtg|ddS)Nrrrr_rfr?rrr_testSendmsgBadMultiCmsga s    z%SendmsgTests._testSendmsgBadMultiCmsgcCs||jdddSr^r`r?rrrtestSendmsgExcessCmsgRejecti sz(SendmsgTests.testSendmsgExcessCmsgRejectcCsbttdsT|t"}|tgddgWdn1s<0Y||jj| ddS)Nrhrjr_) r r r$rr*r assertIsNoner-r`r'r@r.rrr_testSendmsgExcessCmsgRejectn s   0z)SendmsgTests._testSendmsgExcessCmsgRejectcCsdSr2rr?rrrtestSendmsgAfterClosev sz"SendmsgTests.testSendmsgAfterClosecCs |j|t|jtgdSr2)r&rr$rr*rr?rrr_testSendmsgAfterClosez s z#SendmsgTests._testSendmsgAfterCloseN)rErFrGrPrRrSrTrUrVrWrZr[r]rarcrdrgrr rirrkrlrorprqrrrrrN s,  rNc@sReZdZddZddZddZddZeej d vd d d Z e j d dZ dS)SendmsgStreamTestscCs||jtttdSr2rOr?rrrtestSendmsgExplicitNoneAddr sz.SendmsgStreamTests.testSendmsgExplicitNoneAddrcCs"||tggddttdSrrQr?rrr_testSendmsgExplicitNoneAddr sz/SendmsgStreamTests._testSendmsgExplicitNoneAddrcCs.||jdd||jj|jddSNraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar5rrKrr r%rr?r?rrrtestSendmsgTimeout sz%SendmsgStreamTests.testSendmsgTimeoutc Csz||jdz|dgqWnDtjy4Yn<tyd}z|jtjkrPWYd}~nd}~00|dW|j n |j 0dS)NQ?rvsocket.timeout not raised) r&rr*r r5rr`ENOMEMr r%rmr@rrrr_testSendmsgTimeout s   z&SendmsgStreamTests._testSendmsgTimeout>rz.Tr) rrrrKrArr1rr=rrrrtestRecvmsgIntoGenerator s   z)RecvmsgIntoTests.testRecvmsgIntoGeneratorcCs|tdSr2rr?rrr_testRecvmsgIntoGenerator sz*RecvmsgIntoTests._testRecvmsgIntoGeneratorcCsxtddgtt}|j|g\}}}}||tt||t|||j||g|j |dddS)NrXrTr) rYrrrKrArtobytesr1rr=rrrrtestRecvmsgIntoArray s z%RecvmsgIntoTests.testRecvmsgIntoArraycCs|tdSr2rr?rrr_testRecvmsgIntoArray sz&RecvmsgIntoTests._testRecvmsgIntoArraycCstd}td}td}|j|t|dd|g\}}}}||td||td||td||td |||j||g|j|d d dS) Ns----s 0123456789s--------------r Mary had a little lambsMarys 01 had a 9slittle lamb---Tr) rrKrA memoryviewrrr1rr=)r@b1b2Zb3rrrrrrrtestRecvmsgIntoScatter s  z'RecvmsgIntoTests.testRecvmsgIntoScattercCs|ddS)Nr)r'r?rrr_testRecvmsgIntoScatter sz(RecvmsgIntoTests._testRecvmsgIntoScatterN) rErFrGrrrrrrrrrrrrr s  rc@s`eZdZz ddlZWney*dZYn0edejZee dddZ ee ddd Z dS) CmsgMacroTestsrNiCMSG_LENcCs|jtdd}ttdtt|d|}|tdtdjd|D]2}t|}||td|| ||jqT| t tjd| t tj|| t tjt j dS)Nrror8rr)socklen_t_limitr rlistrrerYitemsizerrCr$r|romaxsize)r@toobigrFnr,rrr testCMSG_LEN s zCmsgMacroTests.testCMSG_LENrhcCs|jtdd}ttdtt|d|}td}||tdjd|D]T}t|}|||||t ||||t d| ||j|}qX| t tjd| t tj|| t tjt jdS)Nrorrr8rr)rr rhrrrerYrrBrrCr$r|ror)r@rrFZlastrr,rrrtestCMSG_SPACE s   zCmsgMacroTests.testCMSG_SPACE) rErFrGrrrminrrr rrrrrrr s     rc@sHeZdZdZddZddZddZdd Zd d ZddddZ ddZ ddZ ddZ ddZ eedddZejddZddZdd Zeejd!kd"eed#eedd$d%Zejeejd!kd"eed#d&d'Zeejd!kd"eed#eedd(d)Zejeejd!kd"eed#d*d+Zd,d-Zeejd!kd.d/d0Zd1d2Z d3d4Z!d5d6Z"eedd7d8Z#e#jd9d:Z$ded;d<Z%d=d>Z&d?d@Z'dAdBZ(dCdDZ)dEdFZ*dGdHZ+dIdJZ,dKdLZ-dMdNZ.dOdPZ/dfdQdRZ0dSdTZ1dUdVZ2dWdXZ3dYdZZ4d[d\Z5d]d^Z6d_d`Z7dadbZ8dcS)g SCMRightsTesticCs\g}t|D]J}t\}}|tj||tj|t|t| | |q |Sr2) rrmkstemprUrrrwriterencodeappend)r@rfdsr8rHrrrrnewFDs6 s   zSCMRightsTest.newFDscCsBt|D]4\}}t|dtj|t|dt|qdS)Nrr) enumeraterlseekSEEK_SETrrrr)r@rrrHrrrcheckFDsB szSCMRightsTest.checkFDscCs||j|dSr2)rUcloseRecvmsgFDsr.rrrr+I sz#SCMRightsTest.registerRecvmsgResultcCsn|dD]`\}}}|tjkr|tjkrtd}||dt|t||j|D]}t|qXqdS)Nror8) r r2 SCM_RIGHTSrY frombytesrrrr)r@Zrecvmsg_result cmsg_level cmsg_type cmsg_datarrHrrrrL s  zSCMRightsTest.closeRecvmsgFDsc Cs8||tgtjtjtd||fgttdS)Nr8) rr*rr r2rrYrr)r@rrrrcreateAndSendFDsX szSCMRightsTest.createAndSendFDsrorcCs|\}}}}||t|||j|j|dtj|d||t| t ||t d} |D]`} || t | \} } } || tj || tj|| t|t | td| | qd|t | ||| dS)NTr9r;r<r8r)rrr1rr=r r2rrrCrrYtupler2rr SIZEOF_INTrr)r@Znumfdsr,maxcmsgs ignoreflagsrrrrritemrrrrrrcheckRecvmsgFDsb s&         zSCMRightsTest.checkRecvmsgFDscCs |d||jttddS)Nrorrr-rKrrr?rrrtestFDPassSimple} szSCMRightsTest.testFDPassSimplec Cs<||tgtjtjtd|dfgt tdS)Nr8ro) rr*rr r2rrYrrrr?rrr_testFDPassSimple szSCMRightsTest._testFDPassSimplecCs |d||jttddS)Nr+rrr?rrrtestMultipleFDPass sz SCMRightsTest.testMultipleFDPasscCs|ddSNr+rr?rrr_testMultipleFDPass sz!SCMRightsTest._testMultipleFDPassrhc Cs*|d||jtttdtdSr)rr-rKrrr rhrr?rrrtestFDPassCMSG_SPACE s  z"SCMRightsTest.testFDPassCMSG_SPACEcCs|ddSrrr?rrr_testFDPassCMSG_SPACE sz#SCMRightsTest._testFDPassCMSG_SPACEc Cs0|jd||jtttdttjddS)Nror+r) rr-rKrrr rrr2r?rrrtestFDPassCMSG_LEN s  z SCMRightsTest.testFDPassCMSG_LENcCs|ddSrrr?rrr_testFDPassCMSG_LEN sz!SCMRightsTest._testFDPassCMSG_LENr<zskipping, see issue #12958zskipping, see issue #22397cCs$|jd||jttddddS)Nrr)rrr?rrrtestFDPassSeparate sz SCMRightsTest.testFDPassSeparatec CsX|d\}}||tgtjtjtd|gftjtjtd|gfgttdSNrr8 rrr*rr r2rrYrr@Zfd0fd1rrr_testFDPassSeparate s   z!SCMRightsTest._testFDPassSeparatec Cs@d}|j|||jtttttt|dtj ddS)Nr)rr) rr-rKrrr rhrrr2)r@Znum_fdsrrrtestFDPassSeparateMinSpace s z(SCMRightsTest.testFDPassSeparateMinSpacec CsX|d\}}||tgtjtjtd|gftjtjtd|gfgttdSrrrrrr_testFDPassSeparateMinSpace s   z)SCMRightsTest._testFDPassSeparateMinSpacec Csfz||g|}Wn>tyP}z&||jt||g}WYd}~n d}~00||t|dSr2)r*rrr`rdrr)r@rrrrrrrsendAncillaryIfPossible s "z%SCMRightsTest.sendAncillaryIfPossiblezsee issue #24725cCs&|jd||jttdtjddS)Nrrr)rr-rKrrr r2r?rrrtestFDPassEmpty s zSCMRightsTest.testFDPassEmptycCs|ttjtjdfgdSNr)rrr r2rr?rrr_testFDPassEmpty s zSCMRightsTest._testFDPassEmptycCs||jttd\}}}}||t|||j|j|dtj d| t|d|D]6\}}}||tj ||tj | t|tq\dS)NrTrro)r-rKrrrr1rr=r r2rCr2r assertLessrr@rrrrrrrrrrtestFDPassPartialInt s  z"SCMRightsTest.testFDPassPartialIntc Cs4|ttjtjtd|jgddfgdS)Nr8r)rrr r2rrYbadfdrr?rrr_testFDPassPartialIntsz#SCMRightsTest._testFDPassPartialIntc Cs||jttd\}}}}||t|||j|j|dtj d| t|dt d}|D]J\}}}||tj ||tj ||dt|t||jqf| t|d||dS)NrTrrr8)r-rKrrrr1rr=r r2rCrYr2rrrr) r@rrrrrrrrrrrtestFDPassPartialIntInMiddle s     z*SCMRightsTest.testFDPassPartialIntInMiddlec CsZ|d\}}|ttjtjtd||jgddftjtjtd|gfgdS)Nrr8r) rrrr r2rrYrrrrrr_testFDPassPartialIntInMiddles z+SCMRightsTest._testFDPassPartialIntInMiddlecCsJ|\}}}}||t|||j||g|j|dtj|ddS)NTr9r:r<)rrr1rr=r r2)r@r,rrrrrrrrcheckTruncatedHeader)s    z"SCMRightsTest.checkTruncatedHeadercCs"|j||jtttjddSNrrr-rKrrr r2r?rrrtestCmsgTruncNoBufSize3sz$SCMRightsTest.testCmsgTruncNoBufSizecCs|ddSrrr?rrr_testCmsgTruncNoBufSize<sz%SCMRightsTest._testCmsgTruncNoBufSizecCs$|j||jttdtjddS)Nrrrr?rrrtestCmsgTrunc0?szSCMRightsTest.testCmsgTrunc0cCs|ddSrrr?rrr_testCmsgTrunc0DszSCMRightsTest._testCmsgTrunc0cCs|||jttddSr)rr-rKrrr?rrrtestCmsgTrunc1JszSCMRightsTest.testCmsgTrunc1cCs|ddSrrr?rrr_testCmsgTrunc1MszSCMRightsTest._testCmsgTrunc1cCs"|||jtttddSr)rr-rKrrrr?rrrtestCmsgTrunc2IntPszSCMRightsTest.testCmsgTrunc2IntcCs|ddSrrr?rrr_testCmsgTrunc2IntWsz SCMRightsTest._testCmsgTrunc2Intc Cs(|||jtttdddSr)rr-rKrrr rr?rrrtestCmsgTruncLen0Minus1Zs z%SCMRightsTest.testCmsgTruncLen0Minus1cCs|ddSrrr?rrr_testCmsgTruncLen0Minus1^sz&SCMRightsTest._testCmsgTruncLen0Minus1c Cs||jtt|\}}}}||t|||j|j|dtj d|dkr\|gkr\dS|t|d|d\}} } ||tj || tj | t| || t| |td} | | dt| t| | j|| dS)NTr9r:rror8)r-rKrrrr1rr=r r2r2rrBrCrYrrr) r@ancbufmaxdataZmindatarrrrrrrrrrrcheckTruncatedArrayds&   z!SCMRightsTest.checkTruncatedArraycCs|jtddddS)Nrrrrr rr?rrrtestCmsgTruncLen0|szSCMRightsTest.testCmsgTruncLen0cCs|ddSrrr?rrr_testCmsgTruncLen0sz SCMRightsTest._testCmsgTruncLen0cCs|jtdddddS)Nrrorrr?rrrtestCmsgTruncLen0Plus1sz$SCMRightsTest.testCmsgTruncLen0Plus1cCs|ddSrrr?rrr_testCmsgTruncLen0Plus1sz%SCMRightsTest._testCmsgTruncLen0Plus1cCs|jtttddS)Nrrr rrr?rrrtestCmsgTruncLen1s zSCMRightsTest.testCmsgTruncLen1cCs|ddSrrr?rrr_testCmsgTruncLen1sz SCMRightsTest._testCmsgTruncLen1cCs(|jtdtddtdddS)Nrrorrr?rrrtestCmsgTruncLen2Minus1s z%SCMRightsTest.testCmsgTruncLen2Minus1cCs|ddSrrr?rrr_testCmsgTruncLen2Minus1sz&SCMRightsTest._testCmsgTruncLen2Minus1N)ror)r)r)9rErFrGrrrr+rrrrrrrrr rrrrrrrgrorrrrrrrrrrrrrrrrr r r r r rrrrrrrrrrrrrrrrr. s~                     rc@seZdZdZdZddZd^ddZeed d d d Z e j d dZ eedd d ddZ e j ddZ eejdeed d ddZej ddZd_ddZeed d ddddZej dd Zeedd d ddd!d"Zej d#d$Zeejdeedd d ddd%d&Zej d'd(Zeejdeedd d ddd)d*Zej d+d,Zd`d-d.Zeed d d/d0Zej d1d2Zeed d d3d4Zej d5d6Zeed d d7d8Zej d9d:Zeed d d;d<Z e j d=d>Z!eed d d?d@Z"e"j dAdBZ#eed d dCdDZ$e$j dEdFZ%dadGdHZ&eedd d dddIdJZ'e'j dKdLZ(eedd d dddMdNZ)e)j dOdPZ*eedd d dddQdRZ+e+j dSdTZ,eedd d dddUdVZ-e-j dWdXZ.eedd d dddYdZZ/e/j d[d\Z0d]S)bRFC3542AncillaryTestrrcCs4i}|D]&\}}}|||f|||||f<q|Sr2)r)r@rdrrrrrrancillaryMappings z%RFC3542AncillaryTest.ancillaryMappingrrc Cs|jtjtjd|j||jtt |\}}}}| |t | ||j |j |dtj|d| t|d||dt|d\}} } | |tj| | tj|| t| t| ttd} | | || dd|| d|dS)NroTrrr8)rKrr r7rMr%rmr-rrrr1rr=r2rrrCrrrYrrBrC) r@ ancbufsizemaxhoprrrrrrrrrrrr checkHopLimits.        z"RFC3542AncillaryTest.checkHopLimitrMrCcCs|jdddSNrr#)r%r?rrrtestRecvHopLimitsz%RFC3542AncillaryTest.testRecvHopLimitcCs$||jj|jd|tdSrr r%rr?r'rr?rrr_testRecvHopLimitsz&RFC3542AncillaryTest._testRecvHopLimitrhcCs|jttddS)Nr')r%r rhrr?rrrtestRecvHopLimitCMSG_SPACEsz/RFC3542AncillaryTest.testRecvHopLimitCMSG_SPACEcCs$||jj|jd|tdSrr)r?rrr_testRecvHopLimitCMSG_SPACEsz0RFC3542AncillaryTest._testRecvHopLimitCMSG_SPACErcCs|jd|jddSNr)r#r$)r% hop_limitr?rrrtestSetHopLimitsz$RFC3542AncillaryTest.testSetHopLimitc CsL||jj|jd||tgtjtj t d|j gfgt tdSNrwr8) r r%rr?rr*rr r7rCrYr.rr?rrr_testSetHopLimitsz%RFC3542AncillaryTest._testSetHopLimitc CsB|jtjtjd|jtjtjd|j||jt t |\}}}}| |t | ||j |j|dtj|d| t |d||}|tjtjf} | t | ttd} | | || dd|| dd|tjtjf} | t | ttd} | | || dd|| d|dS)NroTrrr8rr)rKrr r7rMrGr%rmr-rrrr1rr=r2r"rHrrYrrBrCrC) r@r#r$rrrrrZancmapZtcdatarZhldatarrrcheckTrafficClassAndHopLimits:           z1RFC3542AncillaryTest.checkTrafficClassAndHopLimitrGrHcCs|jdddSr&)r2r?rrrtestRecvTrafficClassAndHopLimitsz4RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitcCs$||jj|jd|tdSrr)r?rrr _testRecvTrafficClassAndHopLimit$sz5RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitcCs|jttdddSNrr')r2r rhrr?rrr)testRecvTrafficClassAndHopLimitCMSG_SPACE)s z>RFC3542AncillaryTest.testRecvTrafficClassAndHopLimitCMSG_SPACEcCs$||jj|jd|tdSrr)r?rrr*_testRecvTrafficClassAndHopLimitCMSG_SPACE1sz?RFC3542AncillaryTest._testRecvTrafficClassAndHopLimitCMSG_SPACEcCs|jd|jddSr-r2r.r?rrrtestSetTrafficClassAndHopLimit6sz3RFC3542AncillaryTest.testSetTrafficClassAndHopLimitc Csd||jj|jd||tgtjtj t d|j gftjtj t d|j gfgttdSr0)r r%rr?rr*rr r7rHrY traffic_classrCr.rr?rrr_testSetTrafficClassAndHopLimit?sz4RFC3542AncillaryTest._testSetTrafficClassAndHopLimitcCs|jd|jddSr-r8r?rrrtestOddCmsgSizeJsz$RFC3542AncillaryTest.testOddCmsgSizec Cs||jj|jdzJ|tgtjtjt d|j g dftjtj t d|j gfg}Wnty}zh||jt|tgtjtjt d|j gftjtj t d|j gfg}||ttWYd}~n d}~00dS)Nrwr8r)r r%rr?r*rr r7rHrYr:rrCr.rrr`rdrr)r@rrrrr_testOddCmsgSizeTs2z%RFC3542AncillaryTest._testOddCmsgSizecCs|jtjtjd|j|dur*dn|f}|j|jtt g|R\}}}}| |t | ||j | |g|j |dtj|ddS)NrorTr)rKrr r7rMr%rmr-rrrr1rr=r2)r@r#rrQrrrrrrrcheckHopLimitTruncatedHeaderjs      z1RFC3542AncillaryTest.checkHopLimitTruncatedHeadercCs|jdtjddS)Nr#rr>r r2r?rrrr~sz+RFC3542AncillaryTest.testCmsgTruncNoBufSizecCs$||jj|jd|tdSrr)r?rrrrsz,RFC3542AncillaryTest._testCmsgTruncNoBufSizecCs|jdtjddS)Nrr?r@r?rrrtestSingleCmsgTrunc0sz)RFC3542AncillaryTest.testSingleCmsgTrunc0cCs$||jj|jd|tdSrr)r?rrr_testSingleCmsgTrunc0sz*RFC3542AncillaryTest._testSingleCmsgTrunc0cCs|jdddS)Nror')r>r?rrrtestSingleCmsgTrunc1sz)RFC3542AncillaryTest.testSingleCmsgTrunc1cCs$||jj|jd|tdSrr)r?rrr_testSingleCmsgTrunc1sz*RFC3542AncillaryTest._testSingleCmsgTrunc1cCs|jdtddSr5)r>rr?rrrtestSingleCmsgTrunc2Intsz,RFC3542AncillaryTest.testSingleCmsgTrunc2IntcCs$||jj|jd|tdSrr)r?rrr_testSingleCmsgTrunc2Intsz-RFC3542AncillaryTest._testSingleCmsgTrunc2IntcCs|jtddddS)Nrror')r>r rr?rrrtestSingleCmsgTruncLen0Minus1sz2RFC3542AncillaryTest.testSingleCmsgTruncLen0Minus1cCs$||jj|jd|tdSrr)r?rrr_testSingleCmsgTruncLen0Minus1sz3RFC3542AncillaryTest._testSingleCmsgTruncLen0Minus1cCs|jtjtjd|j||jtt t t d\}}}}| |t | ||j|j|dtjd|t|d|r|d\}}}| |tj| |tj|t|t dS)NroTrr)rKrr r7rMr%rmr-rrrrrr1rr=r2rCrCrrrrrtestSingleCmsgTruncInDatas     z.RFC3542AncillaryTest.testSingleCmsgTruncInDatacCs$||jj|jd|tdSrr)r?rrr_testSingleCmsgTruncInDatasz/RFC3542AncillaryTest._testSingleCmsgTruncInDatac Cs|jtjtjd|jtjtjd|j||jt t |\}}}}| |t | ||j |j|dtj|d| t |d|d\}}} | |tj||tjtjh| t | ttd} | | || dd|| dddS)NroTrrr8r)rKrr r7rMrGr%rmr-rrrr1rr=r2rrHrCrrYrrBrC) r@r#rrrrrrrrrrrrcheckTruncatedSecondHeaders0        z/RFC3542AncillaryTest.checkTruncatedSecondHeadercCs|jtttjddSr)rKr rhrr2r?rrrtestSecondCmsgTrunc0s z)RFC3542AncillaryTest.testSecondCmsgTrunc0cCs$||jj|jd|tdSrr)r?rrr_testSecondCmsgTrunc0sz*RFC3542AncillaryTest._testSecondCmsgTrunc0cCs|ttddSrrKr rhrr?rrrtestSecondCmsgTrunc1sz)RFC3542AncillaryTest.testSecondCmsgTrunc1cCs$||jj|jd|tdSrr)r?rrr_testSecondCmsgTrunc1sz*RFC3542AncillaryTest._testSecondCmsgTrunc1cCs|ttdtdSrrNr?rrrtestSecondCmsgTrunc2Ints z,RFC3542AncillaryTest.testSecondCmsgTrunc2IntcCs$||jj|jd|tdSrr)r?rrr_testSecondCmsgTrunc2Intsz-RFC3542AncillaryTest._testSecondCmsgTrunc2IntcCs"|tttdddSr)rKr rhrrr?rrrtestSecondCmsgTruncLen0Minus1s  z2RFC3542AncillaryTest.testSecondCmsgTruncLen0Minus1cCs$||jj|jd|tdSrr)r?rrr_testSecondCmsgTruncLen0Minus1sz3RFC3542AncillaryTest._testSecondCmsgTruncLen0Minus1c CsT|jtjtjd|jtjtjd|j||jt t t t t t d\}}}}||t |||j|j|dtjdtjtjh}|d\}}}||tj|||t |t td} | ||| dd|| dd|rD|d\}}}||tj|||t |t ||gdS)NroTrrr8r)rKrr r7rMrGr%rmr-rrrhrrrr1rr=r2rHrCpopremoverYrrBrCr) r@rrrrZ cmsg_typesrrrrrrrtestSecomdCmsgTruncInDatas:           z.RFC3542AncillaryTest.testSecomdCmsgTruncInDatacCs$||jj|jd|tdSrr)r?rrr_testSecomdCmsgTruncInDataCsz/RFC3542AncillaryTest._testSecomdCmsgTruncInDataN)rr)rr)r)r)1rErFrGr.r:r"r%rr r(rr*r+r,r/r1r2r3r4r6r7r9r;r<r=r>rrrArBrCrDrErFrGrHrIrJrKrLrMrOrPrQrRrSrTrWrXrrrrr s            $                                             #r c@s eZdZdS)SendrecvmsgUDPTestBaseNrErFrGrrrrrYKsrYrc@s eZdZdS)SendmsgUDPTestNrZrrrrr[Psr[rc@s eZdZdS)RecvmsgUDPTestNrZrrrrr\Tsr\rAc@s eZdZdS)RecvmsgIntoUDPTestNrZrrrrr]Xsr]c@seZdZddZdS)SendrecvmsgUDP6TestBasecCs ||dd|dddSrr/r0rrrr1asz+SendrecvmsgUDP6TestBase.checkRecvmsgAddressNrErFrGr1rrrrr^]sr^r*rr c@s eZdZdS)SendmsgUDP6TestNrZrrrrr`fsr`c@s eZdZdS)RecvmsgUDP6TestNrZrrrrralsrac@s eZdZdS)RecvmsgIntoUDP6TestNrZrrrrrbrsrbr7c@s eZdZdS)RecvmsgRFC3542AncillaryUDP6TestNrZrrrrrcxsrcc@s eZdZdS)#RecvmsgIntoRFC3542AncillaryUDP6TestNrZrrrrrdsrdc@s eZdZdS)SendrecvmsgUDPLITETestBaseNrZrrrrresrec@s eZdZdS)SendmsgUDPLITETestNrZrrrrrfsrfc@s eZdZdS)RecvmsgUDPLITETestNrZrrrrrgsrgc@s eZdZdS)RecvmsgIntoUDPLITETestNrZrrrrrhsrhc@seZdZddZdS)SendrecvmsgUDPLITE6TestBasecCs ||dd|dddSrr/r0rrrr1sz/SendrecvmsgUDPLITE6TestBase.checkRecvmsgAddressNr_rrrrrisric@s eZdZdS)SendmsgUDPLITE6TestNrZrrrrrjsrjc@s eZdZdS)RecvmsgUDPLITE6TestNrZrrrrrksrkc@s eZdZdS)RecvmsgIntoUDPLITE6TestNrZrrrrrlsrlc@s eZdZdS)#RecvmsgRFC3542AncillaryUDPLITE6TestNrZrrrrrmsrmc@s eZdZdS)'RecvmsgIntoRFC3542AncillaryUDPLITE6TestNrZrrrrrns rnc@s eZdZdS)SendrecvmsgTCPTestBaseNrZrrrrrosroc@s eZdZdS)SendmsgTCPTestNrZrrrrrpsrpc@s eZdZdS)RecvmsgTCPTestNrZrrrrrqsrqc@s eZdZdS)RecvmsgIntoTCPTestNrZrrrrrrsrrc@s eZdZdS)SendrecvmsgSCTPStreamTestBaseNrZrrrrrssrsz6IPPROTO_SCTP: [Errno 62] Protocol not supported on AIXr:r/rc@s eZdZdS)SendmsgSCTPStreamTestNrZrrrrrtsrtcseZdZfddZZS)RecvmsgSCTPStreamTestc sTztt|Wn<tyN}z$|jtjkr0|dWYd}~n d}~00dSNz4sporadic ENOTCONN (kernel issue?) - see issue #13876)rKrurrr`ENOTCONNrbr@rrSrrrs  z$RecvmsgSCTPStreamTest.testRecvmsgEOFrErFrGrrXrrrSrrusrucseZdZfddZZS)RecvmsgIntoSCTPStreamTestc sTztt|Wn<tyN}z$|jtjkr0|dWYd}~n d}~00dSrv)rKrzrrr`rwrbrxrSrrrs  z(RecvmsgIntoSCTPStreamTest.testRecvmsgEOFryrrrSrrz srzc@s eZdZdS)SendrecvmsgUnixStreamTestBaseNrZrrrrr{sr{rc@s eZdZdS)SendmsgUnixStreamTestNrZrrrrr|sr|c@s eZdZdS)RecvmsgUnixStreamTestNrZrrrrr}!sr}c@s eZdZdS)RecvmsgIntoUnixStreamTestNrZrrrrr~'sr~r2rc@s eZdZdS)RecvmsgSCMRightsStreamTestNrZrrrrr-src@s eZdZdS)RecvmsgIntoSCMRightsStreamTestNrZrrrrr2srcsFeZdZfddZejZeedr2dZ ddZ n dZ ddZ Z S) InterruptedTimeoutBasecs2tttjdd}|tjtj|dS)NcSsddSrr)signumrrrrrFrz.InterruptedTimeoutBase.setUp..)rKrArrrU)r@Zorig_alrm_handlerrSrrrACs  zInterruptedTimeoutBase.setUp setitimerg?cCsttj|dSr2)rr ITIMER_REALr@ZsecondsrrrsetAlarmRszInterruptedTimeoutBase.setAlarmrcCst|dSr2)rrrrrrrXs) rErFrGrArr>r5r r alarm_timerrXrrrSrr>s   r siginterruptrrz+Don't have signal.alarm or signal.setitimercsleZdZfddZddZddZddZd d Zd d Ze e j d ddZ e e j dddZ Z S)InterruptedRecvTimeoutTestcst|j|jdSr2)rKrAr;rr5r?rSrrrAes z InterruptedRecvTimeoutTest.setUpc OsdzR||j|t}||i|Wdn1s<0YW|dn |d0dSr)rrr$rr@r}rQrRr.rrrcheckInterruptedRecvis   .z/InterruptedRecvTimeoutTest.checkInterruptedRecvcCs||jjddSr)rr;rr?rrrtestInterruptedRecvTimeoutssz5InterruptedRecvTimeoutTest.testInterruptedRecvTimeoutcCs||jjtddSr)rr; recv_intorr?rrrtestInterruptedRecvIntoTimeoutvsz9InterruptedRecvTimeoutTest.testInterruptedRecvIntoTimeoutcCs||jjddSr)rr;rr?rrrtestInterruptedRecvfromTimeoutysz9InterruptedRecvTimeoutTest.testInterruptedRecvfromTimeoutcCs||jjtddSr)rr; recvfrom_intorr?rrr"testInterruptedRecvfromIntoTimeout|sz=InterruptedRecvTimeoutTest.testInterruptedRecvfromIntoTimeoutrcCs||jjddSr)rr;rr?rrrtestInterruptedRecvmsgTimeoutsz8InterruptedRecvTimeoutTest.testInterruptedRecvmsgTimeoutrAcCs||jjtdgdSr)rr;rArr?rrr!testInterruptedRecvmsgIntoTimeoutsz0YW|dn |d0dSr)r$rrrrrrrcheckInterruptedSends   0z/InterruptedSendTimeoutTest.checkInterruptedSendrrcCs||jjddSr)rrrr?rrrtestInterruptedSendTimeoutsz5InterruptedSendTimeoutTest.testInterruptedSendTimeoutcCs||jjd|jdSr)rrr,rr?rrrtestInterruptedSendtoTimeouts z7InterruptedSendTimeoutTest.testInterruptedSendtoTimeoutrcCs||jjdgdSr)rrrr?rrrtestInterruptedSendmsgTimeoutsz8InterruptedSendTimeoutTest.testInterruptedSendmsgTimeout)rErFrGrArrrZrequires_mac_verrrrr rrXrrrSrrs       rc@seZdZddZddZdS) TCPCloserTestcCsh|j\}}||j}t|gggd\}}}|||g||dd||dS)N?ror)r;rrrrrr)r@rrsdrrrrrr testCloseszTCPCloserTest.testClosecCs |jt|jftddSNr)rrrr=rrr?rrr _testCloseszTCPCloserTest._testCloseN)rErFrGrrrrrrrs rc@sNeZdZdddZddZddZdd Zd d Zd d ZddZ ddZ dS)BasicSocketPairTestrcCstj||ddSr)rrLrrrrrLszBasicSocketPairTest.__init__cCs\||tjttdr*||jtjn||jtj||jtj||j ddS)Nrr) rr r rrrr:rr/rrrrr_check_defaultss  z#BasicSocketPairTest._check_defaultscCs||jdSr2)rrr?rrr _testDefaultssz!BasicSocketPairTest._testDefaultscCs||jdSr2)rr;r?rrr testDefaultssz BasicSocketPairTest.testDefaultscCs|jd}||tdSr)r;rrrrrrrrs zBasicSocketPairTest.testRecvcCs|jtdSr2)rrrr?rrrrszBasicSocketPairTest._testRecvcCs|jtdSr2)r;rrr?rrrtestSendszBasicSocketPairTest.testSendcCs|jd}||tdSr)rrrrrrrr _testSends zBasicSocketPairTest._testSendN)r) rErFrGrLrrrrrrrrrrrrs  rc@seZdZd&ddZddZddZdd Zejd d Z eeZ e e ed d edddddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%S)'NonBlockingTCPTestsrcCst|_tj||ddSr)rMrxeventrrLrrrrrLs zNonBlockingTCPTests.__init__cCsh||j||dk}|||tdurd|du}t|tjtj}|t|tj@ |dS)N) rr;r getblockingr F_GETFLr O_NONBLOCKbool)r@rr5blockingZ fd_blockingflagrrrassert_sock_timeoutsz'NonBlockingTCPTests.assert_sock_timeoutcCs|jd||jd|jd||jd|jd||jd|jd||jd|jd||jd|jd||jddS)NTFrrr)r;r?rrr?rrrtestSetBlockings      z#NonBlockingTCPTests.testSetBlockingcCsdSr2rr?rrr_testSetBlocking&sz$NonBlockingTCPTests._testSetBlockingcCsbddl}|j|jkr|d|jd||jd|j|jd||jdS)Nrzneeds UINT_MAX < ULONG_MAXFrro) rrZ ULONG_MAXrbr;r?rrrmrrrrtestSetBlocking_overflow)s   z,NonBlockingTCPTests.testSetBlocking_overflowr>ztest needs socket.SOCK_NONBLOCKrcCs4|jttjtjtjB|_||jddSr)r;rr r:r/r>rr?rrrtestInitNonBlocking8s   z'NonBlockingTCPTests.testInitNonBlockingcCsdSr2rr?rrr_testInitNonBlockingBsz(NonBlockingTCPTests._testInitNonBlockingcCs`tdD|jd|j\}}||j||Wdn1sR0YdS)Nr)r6r;rrrUrrmrrrrrtestInheritFlagsBlockingEs    z,NonBlockingTCPTests.testInheritFlagsBlockingcCs|jt|jfdSr2rrrr=r?rrr_testInheritFlagsBlockingNsz-NonBlockingTCPTests._testInheritFlagsBlockingcCsfd}t|F|jd|j\}}||j|||Wdn1sX0YdS)Ng4@r)r6r;rrrUrrr)r@Zdefault_timeoutrrrrrtestInheritFlagsTimeoutQs    z+NonBlockingTCPTests.testInheritFlagsTimeoutcCs|jt|jfdSr2rr?rrr_testInheritFlagsTimeout\sz,NonBlockingTCPTests._testInheritFlagsTimeoutcCs|jdt}|t|j\}}Wdn1sB0Yt|}||d|j t |jgggt j \}}}|j|vr| d|j\}}||j||dS)NFrz'Error trying to do accept after select.)r;r?r monotonicr$BlockingIOErrorrrrrmrr LONG_TIMEOUTr rUrrmr)r@Z start_timerrZdtrrrrrr testAccept_s  ,      zNonBlockingTCPTests.testAcceptcCs |j|jt|jfdSr2)rrrrrr=r?rrr _testAcceptus zNonBlockingTCPTests._testAcceptcCs|j\}}||j|d|t|tt }Wdn1sR0Y|j t |gggt j\}}}||vr|d|tt }||t dS)NFz0Error during select call to non-blocking socket.)r;rrUrr?r$rrrrrrmrrrr r)r@rrrrrrrrrr|s   ,  zNonBlockingTCPTests.testRecvcCs,|jt|jf|j|jtdSr2)rrrr=rrrrr?rrrrs zNonBlockingTCPTests._testRecvN)r)rErFrGrLrrrrrfrZ_testSetBlocking_overflowrrer r requires_linux_versionrrrrrrrrrrrrrrrs*       rc@seZdZdZdZdZdZdZdZe Z dZ e Z d;d d Z d d Zd dZddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Z d1d2Z!d3d4Z"d5d6Z#d7d8Z$d9d:Z%dS)<FileObjectClassTestCaseaoUnit tests for the object returned by socket.makefile() self.read_file is the io object returned by makefile() on the client connection. You can read from this file to get output from the server. self.write_file is the io object returned by makefile() on the server connection. You can write to this file to send output to the client. rrstrictNr rrcCstj||ddSrrrrrrrLsz FileObjectClassTestCase.__init__cCsRddtdD\|_|_|_|_t||jj|j |j |j |j |j d|_dS)NcSsg|] }tqSr)rMrxrr8rrrrsz1FileObjectClassTestCase.setUp..r+encodingerrorsnewline)revt1evt2 serv_finished cli_finishedrrArr  read_modercrrr read_filer?rrrrAs zFileObjectClassTestCase.setUpcCs6|j|j||jjd|_t|dSr2)rrmrrr closedrrCr?rrrrCs   z FileObjectClassTestCase.tearDowncCs0t||jj|j|j|j|j|jd|_ dS)Nr) rrrr  write_modercrrr write_filer?rrrrs z#FileObjectClassTestCase.clientSetUpcCs6|j|j||jjd|_t|dSr2)rrmrrr rrrr?rrrrs   z&FileObjectClassTestCase.clientTearDowncCsx|jd|jd|tj|jjd|t}|jdWdn1sX0Y|dt |j dS)Nrorz!cannot read from timed out object) rrrrr$r r5rrrr-)r@ctxrrrtestReadAfterTimeouts    *z,FileObjectClassTestCase.testReadAfterTimeoutcCs.|j|jdd|j|jdS)Nrr)rr write_msgflushrrr?rrr_testReadAfterTimeouts z-FileObjectClassTestCase._testReadAfterTimeoutcCs<|jt|jd}|jd}||}|||jdSr\)rrrread_msgr)r@ first_segZ second_segrrrr testSmallReads z%FileObjectClassTestCase.testSmallReadcCs|j|j|jdSr2rrrrr?rrr_testSmallReadsz&FileObjectClassTestCase._testSmallReadcCs|j}|||jdSr2)rrrrrrrr testFullReads z$FileObjectClassTestCase.testFullReadcCs|j|j|jdSr2)rrrrr?rrr _testFullReadsz%FileObjectClassTestCase._testFullReadcCs:t|j}|jd}|sq(||7}q |||jdSr)rrrrr)r@rDcharrrrtestUnbufferedReads    z*FileObjectClassTestCase.testUnbufferedReadcCs|j|j|jdSr2rr?rrr_testUnbufferedReadsz+FileObjectClassTestCase._testUnbufferedReadcCs|j}|||jdSr2)rreadlinerrr@linerrr testReadlines z$FileObjectClassTestCase.testReadlinecCs|j|j|jdSr2rr?rrr _testReadline sz%FileObjectClassTestCase._testReadlinecCs&|j|j}|||jdSr2)rrrrrrrrrrtestCloseAfterMakefiles  z.FileObjectClassTestCase.testCloseAfterMakefilecCs|j|j|jdSr2rr?rrr_testCloseAfterMakefilesz/FileObjectClassTestCase._testCloseAfterMakefilecCs@|j|jtt}t|jtr.| }| ||jdSr2) rrrrrrrrrdecoderrrrrtestMakefileAfterMakefileCloses   z6FileObjectClassTestCase.testMakefileAfterMakefileClosecCs|j|j|jdSr2rr?rrr_testMakefileAfterMakefileClose"sz7FileObjectClassTestCase._testMakefileAfterMakefileClosecCs||jj dSr2)r rrr?rrrtestClosedAttr&sz&FileObjectClassTestCase.testClosedAttrcCs||jj dSr2)r rrr?rrr_testClosedAttr)sz'FileObjectClassTestCase._testClosedAttrcCs,||jj|j||jj|jdSr2)rrrrrrrr?rrrtestAttributes,sz&FileObjectClassTestCase.testAttributescCs,||jj|j||jj|jdSr2)rrrrrrrr?rrr_testAttributes0sz'FileObjectClassTestCase._testAttributescCs8|j|t|jj|j|t|jjdSr2)rrr$rrrrrr?rrr testRealClose4s  z%FileObjectClassTestCase.testRealClosecCsdSr2rr?rrr_testRealClose:sz&FileObjectClassTestCase._testRealClose)r)&rErFrGrWrcrrrrrrrrrLrArCrrrrrrrrrrrrrrrrrrrrrrrrrrrsD     rc@sdeZdZdZdZddZddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZdS)!UnbufferedFileObjectClassTestCaseaRepeat the tests from FileObjectClassTestCase with bufsize==0. In this case (and in this case only), it should be possible to create a file object, read a line from it, create another file object, read another line from it, without loss of data in the first file object's buffer. Note that http.client relies on this when reading multiple requests from the same socket.rcCsL|j}||d|j|jdd|_|j}||d|jdS)NA. r rB. )rrrrrr rrrrtestUnbufferedReadlineJs   z8UnbufferedFileObjectClassTestCase.testUnbufferedReadlinecCs2|jd|j|jd|j|jdS)Nrrrr?rrr_testUnbufferedReadlineRsz9UnbufferedFileObjectClassTestCase._testUnbufferedReadlinecCsD|j|jd}|||j|j|t|jjddSr)rrrrrrr$rrrrrtestMakefileCloseWs    z3UnbufferedFileObjectClassTestCase.testMakefileClosecCs|j|j|jdSr2rr?rrr_testMakefileClose`sz4UnbufferedFileObjectClassTestCase._testMakefileClosecCs6t|j}|jt|j}||d|dSr)rornrrrr)r@Zrefcount_beforeZrefcount_afterrrrtestMakefileCloseSocketDestroyds   z@UnbufferedFileObjectClassTestCase.testMakefileCloseSocketDestroycCsdSr2rr?rrr_testMakefileCloseSocketDestroyjszAUnbufferedFileObjectClassTestCase._testMakefileCloseSocketDestroycCs|jd||jtdd||jt|jdd|j |j d|jt|jd}|durt d|jt|jd}td}|j|}||d||d|}|||j||jtdd||jdddS)NFrrrg?ruro)rr?rrreadintorrrrrrmrrrr)r@rrDrrrrrtestSmallReadNonBlockingqs       z:UnbufferedFileObjectClassTestCase.testSmallReadNonBlockingcCs>|jd|j|j|j|j|jddS)Nr@) rrrrrrrrmrr?rrr_testSmallReadNonBlockings    z;UnbufferedFileObjectClassTestCase._testSmallReadNonBlockingcCs"|jd|jr||jdS)Nr)rr serv_skippedrbr?rrrtestWriteNonBlockings z6UnbufferedFileObjectClassTestCase.testWriteNonBlockingcCstd|_|jddtj}d}|j|}||dt|D](}|j|}|dur\qp||dq@d|_dS)NFrrrz$failed to saturate the socket buffer) rrr?rrrrrer)r@ZBIGZLIMITrr8rrr_testWriteNonBlockings      z7UnbufferedFileObjectClassTestCase._testWriteNonBlockingN)rErFrGrWrcrrrrrrrrrrrrrrr>s  rc@seZdZdZdS)#LineBufferedFileObjectClassTestCaseroNrErFrGrcrrrrrsrc@seZdZdZdS)$SmallBufferedFileObjectClassTestCaserNrrrrrrsrc@s*eZdZdZdZedZdZeZ dZ dS)"UnicodeReadFileObjectClassTestCase=Tests for socket.makefile() in text mode (rather than binary)rrrr(N rErFrGrWrrrrrrrrrrrrs  rc@s*eZdZdZdZeZdZedZ dZ dS)#UnicodeWriteFileObjectClassTestCaserr rrr(N) rErFrGrWrrrrrrrrrrrr s  r c@s0eZdZdZdZedZdZedZ dZ dS)'UnicodeReadWriteFileObjectClassTestCaserrrrr(Nr rrrrr s   r c@seZdZdZddZdS)NetworkConnectionTestzProve network connection.cCstt|jf|_|j|_dSr2)r create_connectionrr=rrr?rrrrsz!NetworkConnectionTest.clientSetUpN)rErFrGrWrrrrrr sr c@seZdZdZdS) BasicTCPTest2zLTests that NetworkConnection does not break existing TCP functionality. N)rErFrGrWrrrrrsrc@sDeZdZGdddejZejddZddZddZ d d Z d S) NetworkConnectionNoServerc@seZdZddZdS)z$NetworkConnectionNoServer.MockSocketcGstddS)Nz timed out)r r5r)rrrrsz,NetworkConnectionNoServer.MockSocket.connectN)rErFrGrrrrr MockSocketsrccs,tj}|jt_zdVW|t_n|t_0dS)z*Return a socket which times out on connectN)r r)r@Z old_socketrrrmocked_socket_modules z.NetworkConnectionNoServer.mocked_socket_modulecCsrt}ttjtj}||j|t}| t |fWdn1sR0Y| |j j t jdSr2)rrr r:r/rUrr$rrrrr-r`Z ECONNREFUSED)r@r=rr.rrr test_connects   ,z&NetworkConnectionNoServer.test_connectcCs\t}|t}tt|fWdn1s60Yt}||j j |dSr2) rrr$rr r rZget_socket_conn_refused_errsrr-r`)r@r=r.Zexpected_errnosrrrtest_create_connections  ,z0NetworkConnectionNoServer.test_create_connectionc Cs|xzttdfWnJtjy0YnBtyf}z tjsP|jtj krRWYd}~nd}~00| dWdn1s0YdS)Nrr{) rr r rr5rrrr`Z EAFNOSUPPORTr r}rrrtest_create_connection_timeouts z8NetworkConnectionNoServer.test_create_connection_timeoutN) rErFrGr r contextlibcontextmanagerrrrrrrrrrs  rc@sveZdZdddZddZddZdd ZeZd d ZeZ d d Z eZ ddZ eZ ddZeZddZeZddZdS)NetworkConnectionAttributesTestrcCstj||dt|dSrrrrrrrL sz(NetworkConnectionAttributesTest.__init__cCst|_dSr2)rr source_portr?rrrr$sz+NetworkConnectionAttributesTest.clientSetUpcCs|jd|_t|dSr2rr?rrrr's z.NetworkConnectionAttributesTest.clientTearDowncCs|j\}}|dSr2)r;rrrrrr _justAccept,sz+NetworkConnectionAttributesTest._justAcceptcCs:tjt|jftjd|_||jj| |jj ddS)Nrwr) r r rr=rr>rrUrrrr?rrr _testFamily1s  z+NetworkConnectionAttributesTest._testFamilycCsJtjt|jftjd|jfd|_||jj | |j d|jdS)Nr()r5source_addressro) r r rr=rr>rrrUrrrr?rrr_testSourceAddress8s  z2NetworkConnectionAttributesTest._testSourceAddressc Csn|tdutdz.tt|jf|_||jj Wtdn td0| |j ddS)Nr4 r r r3r4r rr=rrUrrrr?rrr_testTimeoutDefaultBs z3NetworkConnectionAttributesTest._testTimeoutDefaultc Csr|tdutdz2tjt|jfdd|_||jj Wtdn td0| |j ddSNrwrr?rrr_testTimeoutNoneNs z0NetworkConnectionAttributesTest._testTimeoutNonecCs,tjt|jfdd|_||jddSr)r r rr=rrrr?rrr_testTimeoutValueNamedZsz6NetworkConnectionAttributesTest._testTimeoutValueNamedcCs8tt|jfd|_||jj||jddS)Nr ) r r rr=rrUrrrr?rrr_testTimeoutValueNonamed_sz8NetworkConnectionAttributesTest._testTimeoutValueNonamedN)r)rErFrGrLrrrZ testFamilyrZtestSourceAddressrZtestTimeoutDefaultrZtestTimeoutNoner!ZtestTimeoutValueNamedr"ZtestTimeoutValueNonamedr#rrrrrs     rc@sBeZdZdddZddZddZdd ZeZd d Zd d Z dS)NetworkConnectionBehaviourTestrcCstj||dt|dSrrrrrrrLgsz'NetworkConnectionBehaviourTest.__init__cCsdSr2rr?rrrrksz*NetworkConnectionBehaviourTest.clientSetUpcCs|jd|_t|dSr2rr?rrrrns z-NetworkConnectionBehaviourTest.clientTearDowncCs2|j\}}||jtd|ddS)Nrdone!)r;rrUrrrrrrrrtestInsideTimeoutss  z0NetworkConnectionBehaviourTest.testInsideTimeoutcCs0tt|jf|_}|d}||ddS)Nrr%)r r rr=rrr)r@rrrrr_testInsideTimeoutzs z1NetworkConnectionBehaviourTest._testInsideTimeoutcs4tjt|jfdd|_|tjfdddS)Nrorwcs dS)Nr)rrrrrrrzDNetworkConnectionBehaviourTest._testOutsideTimeout..)r r rr=rr$r5r?rr(r_testOutsideTimeoutsz2NetworkConnectionBehaviourTest._testOutsideTimeoutN)r) rErFrGrLrrr&ZtestOutsideTimeoutr'r)rrrrr$es r$c@s6eZdZddZddZeeeddddZ d S) TCPTimeoutTestcs fdd}tj|ddS)NcsjdjdSr)r;rrrr?rr raise_timeouts z4TCPTimeoutTest.testTCPTimeout..raise_timeoutz*Error generating a timeout exception (TCP)r$r r5r@r+rr?rtestTCPTimeouts  zTCPTimeoutTest.testTCPTimeoutcCsxd}z|jd|j}WnFtjy<|dYn*tyPd}Yn|dYn0|st|ddS)NFrz%caught timeout instead of error (TCP)Tz!caught unexpected exception (TCP)z3accept() returned success when we did not expect it)r;rrr r5r rr@okr\rrrtestTimeoutZeros  zTCPTimeoutTest.testTimeoutZerorztest needs signal.alarm()c s|jdGdddtfdd}ttj|}zzzztd|j}Wn\tjyr| dYnJyYn:| dt ddt fYn 0| d Wtd n td 0Wny| d Yn0Wttj|nttj|0dS) Nrc@s eZdZdS)z4TCPTimeoutTest.testInterruptedTimeout..AlarmNrZrrrrAlarmsr2csdSr2r)rrr2rr alarm_handlersz.alarm_handlerrzcaught timeout instead of Alarmz3caught other exception instead of Alarm: %s(%s): %sznothing caughtrzgot Alarm in wrong place)r;rr8rrrrr r5r roexc_info traceback format_exc)r@r4rr\rr3rtestInterruptedTimeouts*       z%TCPTimeoutTest.testInterruptedTimeoutN) rErFrGr.r1rrer rr8rrrrr*s  r*c@seZdZddZddZdS)UDPTimeoutTestcs fdd}tj|ddS)NcsjdjddSNrrr;rrrr?rrr+s z4UDPTimeoutTest.testUDPTimeout..raise_timeoutz*Error generating a timeout exception (UDP)r,r-rr?rtestUDPTimeouts  zUDPTimeoutTest.testUDPTimeoutcCszd}z|jd|jd}WnFtjy>|dYn*tyRd}Yn|dYn0|sv|ddS)NFrrz%caught timeout instead of error (UDP)Tz!caught unexpected exception (UDP)1recv() returned success when we did not expect itr;rrr r5r rr/rrrr1s  zUDPTimeoutTest.testTimeoutZeroN)rErFrGr<r1rrrrr9sr9c@seZdZddZddZdS)UDPLITETimeoutTestcs fdd}tj|ddS)NcsjdjddSr:r;rr?rrr+s z.raise_timeoutz.Error generating a timeout exception (UDPLITE)r,r-rr?rtestUDPLITETimeouts  z%UDPLITETimeoutTest.testUDPLITETimeoutcCszd}z|jd|jd}WnFtjy>|dYn*tyRd}Yn|dYn0|sv|ddS)NFrrz)caught timeout instead of error (UDPLITE)Tz%caught unexpected exception (UDPLITE)r=r>r/rrrr1s  z"UDPLITETimeoutTest.testTimeoutZeroN)rErFrGr@r1rrrrr?sr?c@seZdZddZddZdS)TestExceptionscCsJ|ttt|ttjt|ttjt|ttjtdSr2)r  issubclassrr8r r%r&r5r?rrrtestExceptionTreesz TestExceptions.testExceptionTreecCsvttjtjd}ttjtjd|}|||j|t| dWdn1sh0YdS)NrF) r r:r/rrrUrBr$rr?)r@Zsock0rrrrtest_setblocking_invalidfds  z)TestExceptions.test_setblocking_invalidfdN)rErFrGrCrDrrrrrAsrArzLinux specific testc@s8eZdZdZddZddZddZdd Zd d Zd S) TestLinuxAbstractNamespacelc Csd}ttjtj}|||ttjtjj}|||d0}||||| |Wdn1s0YWdn1s0YWdn1s0YdS)Nspython-test-hellor) r rr/r`r>rrrr getpeername)r@rs1rTZs3rrrtestLinuxAbstractNamespaces z5TestLinuxAbstractNamespace.testLinuxAbstractNamespacecCs`dd|jd}ttjtj*}|||||Wdn1sR0YdS)Nrhro) UNIX_PATH_MAXr rr/r`rrr@rrrrr testMaxNames z&TestLinuxAbstractNamespace.testMaxNamecCsRdd|j}ttjtj }|t|j|Wdn1sD0YdS)Nh)rKr rr/r$rr`rLrrrtestNameOverflowsz+TestLinuxAbstractNamespace.testNameOverflowcCsFttjtj}z&|d||dW|n |0dS)Nz pythontest pythontest)r rr/r`rrrrrrr testStrNames  z&TestLinuxAbstractNamespace.testStrNamecCsRttjtj.}|td||dWdn1sD0YdS)NrQ)r rr/r`rrrrrrrtestBytearrayName&sz,TestLinuxAbstractNamespace.testBytearrayNameN) rErFrGrKrIrMrPrRrSrrrrrEs   rEztest needs socket.AF_UNIXc@sTeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)TestUnixDomaincCsttjtj|_dSr2)r rr/rr?rrrrA/szTestUnixDomain.setUpcCs|jdSr2)rrr?rrrrC2szTestUnixDomain.tearDownc Cs:z t|WSty4|d|tYn0dS)NzBPathname {0!a} cannot be represented in file system encoding {1!r})rfsencoderrbrrogetfilesystemencodingr@rrrrencoded5s  zTestUnixDomain.encodedc CsZzt||WnDtyT}z,t|dkr>|d|nWYd}~n d}~00dS)NzAF_UNIX path too longz6Pathname {0!a} is too long to serve as an AF_UNIX path)rrrrrbr)r@rrrrrrr`@s zTestUnixDomain.bindcCs||jddS)N)r(N)rrrr?rrrrLszTestUnixDomain.testUnboundcCs@tjtj}||j||tj|| |j |dSr2) rrabspathrTESTFNr`rrUrrrrWrrr testStrAddrPszTestUnixDomain.testStrAddrcCsFtjtj}||j|||tj || |j |dSr2) rrrYrrZr`rrXrUrrrrWrrr testBytesAddrWszTestUnixDomain.testBytesAddrcCsRtjtj}||}||j|dd| tj || |j |dS)Nasciisurrogateescape) rrrYrZTESTFN_UNICODErXr`rrrUrrr)r@rrrrrtestSurrogateescapeBind^s  z&TestUnixDomain.testSurrogateescapeBindcCsTtjdur|dtjtj}||j||tj || |j |dS)Nz!No unencodable filename available) rZTESTFN_UNENCODABLErbrrrYr`rrUrrrrWrrrtestUnencodableAddrgs   z"TestUnixDomain.testUnencodableAddrN) rErFrGrArCrXr`rr[r\r_r`rrrrrT,s   rTc@seZdZdZdddZddZddZd d ZeZd d Z eZ d dZ ddZ ddZ e ZddZe ZddZddZddZe ZdS) BufferIOTestzF Test the buffer versions of socket.recv() and socket.send(). rcCstj||ddSrrrrrrrLvszBufferIOTest.__init__cCsZtddgtt}|j|}||tt|}|dtt}||tdSNrXr)rYrrrrrrr@rDrrrrrtestRecvIntoArrayys  zBufferIOTest.testRecvIntoArraycCstt}|j|dSr2rrrrr@rDrrr_testRecvIntoArrayszBufferIOTest._testRecvIntoArraycCsDtd}|j|}||tt|dtt}||tdSr)rrrrrrrcrrrtestRecvIntoBytearrays  z"BufferIOTest.testRecvIntoBytearraycCsHtd}|jt|}||tt|dtt}||tdSr)rrrrrrrrcrrrtestRecvIntoMemoryviews z#BufferIOTest.testRecvIntoMemoryviewcCs^tddgtt}|j|\}}||tt|}|dtt}||tdSrb)rYrrrrrrr@rDrrrrrrtestRecvFromIntoArrays z"BufferIOTest.testRecvFromIntoArraycCstt}|j|dSr2rerfrrr_testRecvFromIntoArraysz#BufferIOTest._testRecvFromIntoArraycCsHtd}|j|\}}||tt|dtt}||tdSr)rrrrrrrjrrrtestRecvFromIntoBytearrays z&BufferIOTest.testRecvFromIntoBytearraycCsLtd}|jt|\}}||tt|dtt}||tdSr)rrrrrrrrjrrrtestRecvFromIntoMemoryviews z'BufferIOTest.testRecvFromIntoMemoryviewcCs td}|t|jj|ddS)Nr]r)rr$rrrrfrrrtestRecvFromIntoSmallBuffersz(BufferIOTest.testRecvFromIntoSmallBuffercCs|jtdSr2rr?rrr_testRecvFromIntoSmallBuffersz)BufferIOTest._testRecvFromIntoSmallBuffercCs$t}|j||j|ddSr)rrrrfrrrtestRecvFromIntoEmptyBuffers z(BufferIOTest.testRecvFromIntoEmptyBufferN)r)rErFrGrWrLrdrgrhZ_testRecvIntoBytearrayriZ_testRecvIntoMemoryviewrkrlrmZ_testRecvFromIntoBytearrayrnZ_testRecvFromIntoMemoryviewrorprqZ_testRecvFromIntoEmptyBufferrrrrrars$ raic CsttdsdSz td}Wntttfy4YdS0|6|D] }|dr@WddSq@Wdn1sv0YdS)zCheck if the TIPC module is loaded The TIPC module is not loaded automatically on Ubuntu and probably other Linux distros. AF_TIPCFz /proc/modulesztipc NT)r r rFileNotFoundErrorIsADirectoryErrorrXr)rrrrrisTipcAvailables   2rwz6TIPC module is not loaded, please 'sudo modprobe tipc'c@seZdZddZdS)TIPCTestcCsttjtj}ttjtj}||j||j|tjtjdtjt t t f}| |tj t t tt t ddf}|t||d\}}|||||tdS)Nrorrr)r rtr1rUrrr2r3TIPC_ADDR_NAMESEQ TIPC_STYPE TIPC_LOWER TIPC_UPPERr`TIPC_ADDR_NAMErdr,rrrr)r@r'rsrvaddrZsendaddrrZrecvaddrrrrtestRDMs     zTIPCTest.testRDMN)rErFrGrrrrrrxsrxc@s6eZdZd ddZddZddZdd Zd d Zd S)TIPCThreadableTestrcCstjj||dt|dSrrrrrrrLszTIPCThreadableTest.__init__cCsttjtj|_||jj|jtjtjdtj t t t f}|j ||j||j\|_|_||jjdSr)r rtr/r'rUrrr2r3ryrzr{r|r`r>rnrrr)r@r~rrrrAs  zTIPCThreadableTest.setUpcCsdtdttjtj|_||jjtjt t t t t ddf}|j ||j|_dS)Nrrr)rrr rtr/rrUrr}rzr{rdr|rrcliaddr)r@rrrrrs  zTIPCThreadableTest.clientSetUpcCs,|jd}||t||j|jdSr)rrrrrrrrrrrs  zTIPCThreadableTest.testStreamcCs|jt|jdSr2rr?rrrrs zTIPCThreadableTest._testStreamN)rrrrrrrs    rc@s4eZdZddZddZddZddZd d Zd S) ContextManagersTestcCst}||jWdn1s*0Y||jt}|Wdn1sf0Y||jt }|t|jdWdn1s0Y||jdSNr))r rrr rr$rrrrrr_testSocketClass s *  &  .z$ContextManagersTest._testSocketClasscCs2|j\}}||j|d}||dSrr;rrUrrrr@rrrrrrtestCreateConnectionBase.s  z,ContextManagersTest.testCreateConnectionBasecCsl|j}t|8}||j|d||ddWdn1sR0Y| |jdS)Nr)r) r;rr r rrrrrr r@rrrrr_testCreateConnectionBase4s     0z-ContextManagersTest._testCreateConnectionBasecCs2|j\}}||j|d}||dSrrrrrrtestCreateConnectionClose<s  z-ContextManagersTest.testCreateConnectionClosecCs\|j}t|}|Wdn1s20Y||j|t|j ddSr) r;rr r rr rr$rrrrrr_testCreateConnectionCloseBs   & z.ContextManagersTest._testCreateConnectionCloseN)rErFrGrrrrrrrrrrs rc@seZdZeeeddedddddZ dd Z d d Z d d Z e edudddZe edudddZddZdS)InheritanceTestrzSOCK_CLOEXEC not definedrrrcCsXttjtjtjB.}||jtj||Wdn1sJ0YdSr2)r r:r/rrrrget_inheritablerrrrtest_SOCK_CLOEXECKs  z!InheritanceTest.test_SOCK_CLOEXECcCs@t}| ||dWdn1s20YdSr)r rrrrrrtest_default_inheritableTsz(InheritanceTest.test_default_inheritablec Cstt}|T|}|| ||dWdn1sH0YWdn1sf0YdSr)r r rrr)r@rZnewsockrrrtest_dupYs zInheritanceTest.test_dupcCsdt}|D|d||d|d||dWdn1sV0YdS)NTF)r set_inheritablerrrrrrtest_set_inheritableas   z$InheritanceTest.test_set_inheritableNrcCst}|b|}||dt|tj}|tjM}t|tj|||dWdn1st0YdS)NFT)r rrrr F_GETFD FD_CLOEXECZF_SETFD)r@rrHrrrrtest_get_inheritable_cloexecjs z,InheritanceTest.test_get_inheritable_cloexeccCs|t}|\|}|t|tjtj@tj|d|t|tjtj@dWdn1sn0YdS)NTr)r rrr rrr)r@rrHrrrtest_set_inheritable_cloexecxs z,InheritanceTest.test_set_inheritable_cloexeccCsHt\}}||j||j||d||ddSr)r rrUrrr)r@rHrTrrrtest_socketpairs    zInheritanceTest.test_socketpair)rErFrGrrer r rrrrrrrgr rrrrrrrrJs      rr>zSOCK_NONBLOCK not definedc@s,eZdZd ddZeddddd Zd S) NonblockConstantTestTrcCs|rj||jtj||||t|tjtj tj @|dkrZ| | q|| nL||jtj||d| t|tjtj tj @|| dSr) rrr r/rr r rrrrr)r@rnonblockr5rrr checkNonblocks z"NonblockConstantTest.checkNonblockrrrcCsttjtjtjB}|||d|j|dd|d|||d|j|dd|d|j|dd|d|j|ddWdn1s0Yt}tdt}||Wdn1s0Ytdt}||dWdn1s.0Ytdt}|j|ddWdn1sp0Ytdt}||dWdn1s0Yt|dS)NTF)rg@rwr) r r:r/r>rr?rr3r4)r@rtrrrtest_SOCK_NONBLOCKs:        ,  (  ,  .  ,z'NonblockConstantTest.test_SOCK_NONBLOCKN)Tr)rErFrGrrrrrrrrrs  rr9r:zneed multiprocessingc@s@eZdZeddZddZddZddZd d Zd d Z d S)TestSocketSharingcCsD|}|}t|}|\}}||||dSr2)rrr fromsharerrr)rqZsdatamessagerrTrrrrremoteProcessServers   z%TestSocketSharing.remoteProcessServerc Cst}tj|j|fd}||j|j}|j}|j | |d}| |t |}g}| d}|szq||qj| d|}||||dS)NrrQs slapmahfrorr)multiprocessingr{Processrrr;sharepidrrrr r rrrr) r@rr!rrrrmreceivedrrr testShares&         zTestSocketSharing.testSharecCs@|jt}|ttj|dd|ttj|ddS)Nrr))r;rrgetpidr$rr r)r@rrrrtestShareLengthsz!TestSocketSharing.testShareLengthcCsb||d|||||j|j||j|j|jdkr^||j|jdSr)rrrrr)r@ZorgotherrrrcompareSocketss  z TestSocketSharing.compareSocketscCsD|jt}t|}z||j|W|n |0dSr2)r;rrrr rrr)r@rrrrrtestShareLocals  z TestSocketSharing.testShareLocalc Cstjtjg}tjtjg}|D]}|D]}zt||}WntyNYq$Yn0zH|t}t |}z| ||W| n | 0W| q$| 0q$qdSr2) r r:rr/r rrrrrrr)r@familiestypesrrsourcerZsharedrrr testTypess     zTestSocketSharing.testTypesN) rErFrGrrrrrrrrrrrrs #rc@seZdZdZdZdZdZejZ e ddZ e ddZ d d Z d d Zd dZddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Z d1d2Z!d3d4Z"d5d6Z#d7d8Z$d9d:Z%d;S)<SendfileUsingSendTestz> Test the send() implementation of socket.sendfile(). irhrcCsdd}dddt|jD}ttjd.}||j|jD]}||q>Wdn1sb0Yttjd}||_ Wdn1s0YdS)Ncss&||kr|V||8}q|r"|VdSr2r)totalsteprrrchunks>s  z0SendfileUsingSendTest.setUpClass..chunksrcSsg|]}ttjqSr)randomchoicestring ascii_lettersrrrrrrFsz4SendfileUsingSendTest.setUpClass..rr ) rrBUFSIZErrrZFILESIZErrFILEDATA)rrchunkrZcsizerrr setUpClass<s * z SendfileUsingSendTest.setUpClasscCsttjdSr2)rrrZ)rrrr tearDownClassOsz#SendfileUsingSendTest.tearDownClasscCs8|jtj|j\}}||j||j|Sr2)r;rrrrTIMEOUTrUrrrrr accept_connSs   z!SendfileUsingSendTest.accept_conncCs,g}||j}|sq"||qd|Sr)rrrr)r@rrrrrr recv_dataZs   zSendfileUsingSendTest.recv_datacCs t|dS)N_sendfile_use_sendrrrrrmeth_from_sockcsz$SendfileUsingSendTest.meth_from_sockc Cs|j}ttjd}t|f}|B}||}||}|||j || |j Wdn1sn0YWdn1s0YdS)Nr r;rrrrZr r rrrtellr@rfilermethsentrrr_testRegularFilejs   z&SendfileUsingSendTest._testRegularFilecCs6|}||}|t||j|||jdSr2rrrrrrr@rrrrrtestRegularFiless z%SendfileUsingSendTest.testRegularFilec Cs|j}t|j}t|p}|L}||}|||j || |j | tj |j |Wdn1sx0YWdn1s0YdSr2)r;rioBytesIOrr r rJrrrr$rOrP)r@rrrrrrr_testNonRegularFile{s   z)SendfileUsingSendTest._testNonRegularFilecCs6|}||}|t||j|||jdSr2rrrrrtestNonRegularFiles z(SendfileUsingSendTest.testNonRegularFilec Cs|j}tjd}t|d|tj|Wdn1sB0Yt|d}t|b}|>}| |}||}| |d| | dWdn1s0YWdn1s0YdS)N2rr r) r;rrrZrrUrr r rrr)r@rfilenamerrrrrrr_testEmptyFileSends   ,   z(SendfileUsingSendTest._testEmptyFileSendcCs"|}||}||ddSr)rrrrrrrtestEmptyFileSends z'SendfileUsingSendTest.testEmptyFileSendc Cs|j}ttjd}t|n}|J}||}||dd}|||j d|| |j Wdn1sv0YWdn1s0YdS)Nr )offsetrrrrr _testOffsets    z!SendfileUsingSendTest._testOffsetcCsB|}||}|t||jd|||jdddS)Nrrrrrr testOffsets z SendfileUsingSendTest.testOffsetc Cs|j}ttjd}tj|tjd}|j|Fd}||}|||d}| ||| | |Wdn1s|0YWdn1s0YdS)Nr rwGKLr r;rrrrZr r r>rrrr@rrrrrrrrr _testCounts      z SendfileUsingSendTest._testCountcCs@d}|}||}|t|||||jd|dS)Nrrrrrrr@rrrrrr testCounts  zSendfileUsingSendTest.testCountc Cs|j}ttjd}tj|tjd}|j|Fd}||}|||d}| ||| | |Wdn1s|0YWdn1s0YdS)Nr rwrorrrrrr_testCountSmalls      z%SendfileUsingSendTest._testCountSmallcCs@d}|}||}|t|||||jd|dSrrrrrrtestCountSmalls  z$SendfileUsingSendTest.testCountSmallc Cs|j}ttjd}tj|ddp}|L}d}||}||d|d}||||| |dWdn1s|0YWdn1s0YdS)Nr rrw駆)rr) r;rrrrZr r rrrrrrr_testCountWithOffsets    z*SendfileUsingSendTest._testCountWithOffsetcCsDd}|}||}|t|||||jd|ddS)NrrrrrrrtestCountWithOffsets  z)SendfileUsingSendTest.testCountWithOffsetc Cs|j}ttjd}t|f}|B}|d||}| t ||| t |j |Wdn1sn0YWdn1s0YdS)Nr F) r;rrrrZr r r?rr$rrJr@rrrrrrr_testNonBlockings    z&SendfileUsingSendTest._testNonBlockingcCs |}|dr|ddS)Nrhz$was not supposed to receive any data)rrr r@rrrrtestNonBlockings z%SendfileUsingSendTest.testNonBlockingc Cs|j}ttjd}tj|tjd}|T|0||}||}| ||j Wdn1sf0YWdn1s0YdS)Nr rw) r;rrrrZr r r>rrrrrrr_testWithTimeouts    z&SendfileUsingSendTest._testWithTimeoutcCs6|}||}|t||j|||jdSr2rrrrrtestWithTimeouts z%SendfileUsingSendTest.testWithTimeoutc Cs|j}ttjd^}t|4}|d||}| tj ||Wdn1s\0YWdn1sz0YdS)Nr g{Gz?) r;rrrrZr r rrr$r5rrrr_testWithTimeoutTriggeredSends     z3SendfileUsingSendTest._testWithTimeoutTriggeredSendcCs |}|dtddS)NiXro)rrrrrrrrtestWithTimeoutTriggeredSends z2SendfileUsingSendTest.testWithTimeoutTriggeredSendcCsdSr2rr?rrr _test_errorssz"SendfileUsingSendTest._test_errorsc CsttjdX}tjtjd*}||}|td||Wdn1sL0YWdn1sj0YttjdR}t*}||}|td||Wdn1s0YWdn1s0Yttjd}tj}||}|jtd||dd|jtd||d d|jtd||d d|jtd||d dWdn1sj0YWdn1s0YdS) Nr rr/rz binary modezpositive integerrrrrr) rrrZr r rrrr)r@rrrrrr test_errors"s6 @  @  z!SendfileUsingSendTest.test_errorsN)&rErFrGrWrrrrr>rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr2sD               rrJz%os.sendfile() required for this test.c@seZdZdZddZdS)SendfileUsingSendfileTestzB Test the sendfile() implementation of socket.sendfile(). cCs t|dS)NrPrrrrrr@sz(SendfileUsingSendfileTest.meth_from_sockN)rErFrGrWrrrrrr:srzAF_ALG requiredc@s|eZdZddZeddddZddZedd d d Zedd d dZ edd ddZ ddZ ddZ dS)LinuxKernelCryptoAPIc Cslttjtjd}z|||fWn>tyb}z&|tt|||WYd}~nd}~00|SdSr) r r(r&r`rurrZSkipTestr)r@typrrrrrr create_algGs(zLinuxKernelCryptoAPI.create_algr+rc Cstd}|dd}|\}}|,|d||d|Wdn1sZ0Y|\}}|V|dtj |dtj |dtj |d ||d|Wdn1s0YWdn1s0YdS) NZ@ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adhashZsha256sabcrabcr) rfromhexrrrrrrr MSG_MOREr@ralgooprurrr test_sha256Ts   0  z LinuxKernelCryptoAPI.test_sha256c Cstd}|ddn}|tjtjd|\}}|,|d| | d|Wdn1sl0YWdn1s0YdS)NZ(effcdf6ae5eb2fa2d27416d5f184df9c259a7c79rz hmac(sha1)sJefeswhat do ya want for nothing?r) rrrrr SOL_ALG ALG_SET_KEYrrrrrrrrtest_hmac_sha1fs   z#LinuxKernelCryptoAPI.test_hmac_sha1rc Cs&td}td}d}td}t|}|dd}|tjtj||\}}|@|j tj |tj d| || |||Wdn1s0Y|\}}|6|j |gtj|d| |||Wdn1s0Yd } |g| } |\}}|0|j | tj |d||| } Wdn1sX0Y| t| || | | d|||\}}|2|j | gtj|d||| } Wdn1s0Y| t| || | | || Wdn1s0YdS) NZ 06a9214036b8a15b512e03d534120006Z 3dafba429d9eb430b422da802c9fac41sSingle block msgZ e353779c1079aeb82708942dbe77181aZskcipherzcbc(aes))rivr)rrr)rrrrrr rrr sendmsg_afalgALG_OP_ENCRYPTrrrrALG_OP_DECRYPT) r@keyrrZ ciphertextZmsglenrrruZ multiplierZlongmsgencZdecrrr test_aes_cbcqsL      0 0  . .z!LinuxKernelCryptoAPI.test_aes_cbcrc Cs td}td}td}td}td}td}t|}t|}|dd} | tjtj|| tjtjd|| \} } | | j tj ||tj d | |tj | || |t||} ||| || ||| | dWdn1s0Y| \} } | p||} | j | gtj ||d | |t||} ||| || ||| | dWdn1s0Ytd j}| \} } | ||} | | gtjtj|tj gtjtj|t||gtjtj||gf| t| |} ||| || ||| | dWdn1sx0Y| \} } | X|||} | j | gtj||d | t| |} ||| |dWdn1s0YWdn1s0YdS) NZ c939cc13397c1d37de6ae0e1cb7c423cZb3d8cc017cbb89b39e0f67e2Z c3b3c41f113a31b73d9a5cd432103069Z 24825602bd12a984e0092d3e448eda5fZ 93fe7d9e9bfd10348a5606e5cafa7354Z 0032a1dc85f1c9786925a2e71d8272ddZaeadzgcm(aes))rrassoclenr)rrr r )rrrrrr rrALG_SET_AEAD_AUTHSIZErrrrrrrrStructrr ALG_SET_OP ALG_SET_IVALG_SET_AEAD_ASSOCLENr )r@r rZplainZassocZ expected_ctZ expected_tagZtaglenr rrruresrZ pack_uint32rrrtest_aead_aes_gcmsl          6 6  6  z&LinuxKernelCryptoAPI.test_aead_aes_gcmc Cs|ddv}td}|tjtj||\}}|*|d}| t |dWdn1sj0YWdn1s0YdS)NrngZdrbg_pr_sha256rt) rrurandomrr rrrrrr)r@rZ extra_seedrruZrnrrrtest_drbg_pr_sha256s   z(LinuxKernelCryptoAPI.test_drbg_pr_sha256c CsPttjtjd}|"|t|Wdn1sB0Y|t|jddWdn1sx0Y|t|dWdn1s0Y|t |jtjddWdn1s0Y|t |jtjddWdn1s"0YWdn1sB0YdS)Nr)rro)rr r)r r(r&r$rrrrrrrtest_sendmsg_afalg_argss & * ( . z,LinuxKernelCryptoAPI.test_sendmsg_afalg_argscCsttjtjd}||j|t|dWdn1sH0Y|t d|dWdn1s~0Y|t|dWdn1s0Y|t d|dWdn1s0YdS)Nr)Z tttttttttttttrz type too long)Zttttttttttttttr)rZ?nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnz name too long)rZ@nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn) r r(r&rUrr$rur`rrrrrrtest_length_restrictions  (( (z,LinuxKernelCryptoAPI.test_length_restrictionN) rErFrGrrrrrr rrrrrrrrrDs    (  >  rwinzrequires Windowsc@seZdZhdZddZdS)TestMSWindowsTCPFlags> TCP_KEEPIDLE TCP_MAXSEG TCP_NODELAY TCP_KEEPCNT TCP_FASTOPEN TCP_KEEPINTVLcs6ddttD}fdd|D}g|ddS)NcSsg|]}|dr|qS)ZTCP)rrrrrrrrz.csg|]}|jvr|qSr) knownTCPFlagsr"r?rrrrzANew TCP flags were discovered. See bpo-32394 for more information)rr r)r@Zprovidedunknownrr?rtest_new_tcp_flagss z(TestMSWindowsTCPFlags.test_new_tcp_flagsN)rErFrGr#r%rrrrrs rc@seZdZddZddZddZeee d p:ee d d e e j d d d Z ee d e e j d ddZdS)CreateServerTestcCst}td|f8}||dd||d|Wdn1sT0Ytjrtjd|ftjd8}||dd||d|Wdn1s0YdS)Nrrrorr)rrr create_serverrrrrr@r=rrrr test_address!s2 zCreateServerTest.test_addresscCstd0}||jtj||jtjWdn1s@0Ytjrtjdtj d0}||jtj ||jtjWdn1s0YdS)Nrrrr) r r'rrr:rr/rrr)r@rrrrrtest_family_and_type,s .z%CreateServerTest.test_family_and_typecCsttdsD|ttjdddWdq1s80Yntd,}|tjtj}||dWdn1s0Ytjddd,}|tjtj}| |dWdn1s0YdS)N SO_REUSEPORT)rrT) reuse_portr) r r r$rr'rr2r,rr)r@rrOrrrtest_reuse_port5s  . *z CreateServerTest.test_reuse_portr7 IPV6_V6ONLYz IPV6_V6ONLY option not supportedr=cCs4tjdtjd}Wdn1s&0YdS)Nr*r)r r'rrrrrtest_ipv6_only_defaultAsz'CreateServerTest.test_ipv6_only_defaultdualstack_ipv6 not supportedcCsFtjdtjdd }||jtjWdn1s80YdS)Nr*Trdualstack_ipv6)r r'rrrrrrrtest_dualstack_ipv6_familyIs  z+CreateServerTest.test_dualstack_ipv6_familyN)rErFrGr)r+r.rrgr r rerrr0r has_dualstack_ipv6r4rrrrr&s        r&c@seZdZejZddZddZddZe e j ddd Z e e d e e j dd d Ze e d e e j dd dZdS)CreateServerFunctionalTestcsVfdd}t|jtj||fd}||jjdS)Nc s||\}}|Pj|d}|sNWdWddS||Wdn1sl0YWdn1s0YdSr)rrr5rr)rrrurrr@rrrunVs   z3CreateServerFunctionalTest.echo_server..runr) rMrxrr5rrrUrrm)r@rr8rrr7r echo_serverUs  z&CreateServerFunctionalTest.echo_servercCsbtj|dB}||j|||d||ddWdn1sT0YdS)Nrr)r)r rr5rrrr)r@rrrrrr echo_clientgs    z&CreateServerFunctionalTest.echo_clientcCsVt}td|f,}|||d|ftjWdn1sH0YdS)Nr(r)rrr r'r9r:r:r(rrr test_tcp4ns z$CreateServerFunctionalTest.test_tcp4r=cCs\t}tjd|ftjd,}|||d|ftjWdn1sN0YdS)Nr(rrrrr r'rr9r:r(rrr test_tcp6ts  z$CreateServerFunctionalTest.test_tcp6r1cCs^t}tjd|ftjdd,}|||d|ftjWdn1sP0YdS)Nr(Tr2r)rrr r'rr9r:r:r(rrrtest_dual_stack_client_v4~s z4CreateServerFunctionalTest.test_dual_stack_client_v4cCs^t}tjd|ftjdd,}|||d|ftjWdn1sP0YdS)Nr(Tr2rr<r(rrrtest_dual_stack_client_v6s z4CreateServerFunctionalTest.test_dual_stack_client_v6N)rErFrGrr>r5r9r:r;rrerrr=rgr r5r>r?rrrrr6Rs       r6send_fdsrecv_fdsc@seZdZddZdS)SendRecvFdsTestsc Csndd}dd}ddtdD}|||dd|D}ttjtj\}}|v|Rt|tg|t|t td t |d \}}} } |||Wdn1s0YWdn1s0Y| |t| t |t || | d t |D]&\} }|\} } t | t| qt |D]*\} } t | d }| |t| q>dS) NcSs&|D]\}}t|t|qdSr2rr)pipesrfd2rrr close_pipess  z8SendRecvFdsTests.testSendAndRecvFds..close_pipescSs|D]}t|qdSr2rC)rrHrrr close_fdssz6SendRecvFdsTests.testSendAndRecvFds..close_fdscSsg|] }tqSr)rpipe)rrurrrrrz7SendRecvFdsTests.testSendAndRecvFds..rcSsg|] \}}|qSrr)rrfdwfdrrrrrrrr)rrUr rrr/r@rrArrrrrrrr)r@rFrGrDrZsock1Zsock2rZfds2rrrhrIrJrrrrtestSendAndRecvFdss&  &H   z#SendRecvFdsTests.testSendAndRecvFdsN)rErFrGrKrrrrrBsrBcCs t}tjtjg|RdSr2)rZthreading_setuprZaddModuleCleanupZthreading_cleanup) thread_inforrr setUpModulesrM__main__)rtestrZ test.supportrr`rrr rrrr6rprorrrYrweakrefrrrr rrrVr_threadrrMrrr rrrrsystemrr rrr"r$r'r)r+r-r1rr6ZHAVE_SOCKET_CANZHAVE_SOCKET_CAN_ISOTPZHAVE_SOCKET_CAN_J1939ZHAVE_SOCKET_RDSZHAVE_SOCKET_ALGZHAVE_SOCKET_QIPCRTRZHAVE_SOCKET_VSOCKr ZHAVE_SOCKET_UDPLITEZHAVE_SOCKET_BLUETOOTHrrrr9rHrIrJrYrgrirrrerrrrgrrrrrrrrrrrrrrrrrrrr r rhrrrrrrrrrrr#r$r@rErHrJrLrMrNrrrrrrrrrr rYr[r\r]r^rr`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurzr{r|r}r~rrrrrrrrrrrrrr r rbr rrrr$r*r9r?rArErTrarzr{r|rwrxrrrrrrrrrrrr&r6rBrMrEmainrrrrsT                        3q ! $   c S Z * =  >.%{7w w=#P;k7                                                            )7#!$l    ?G9)ES ',C< e  D3@  '