
    r@;jZ                     h   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZ  G d dej                  Z G d dej                  Z G d dej                  Z G d	 d
ej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Ze dk    r e             dS dS )    N)testmainc                        e Zd Zd Zd Zd ZdS )TestReadBufferc                 t    t          j        d          }|                     t          |          d           d S N   )	win32fileAllocateReadBufferassertEquallenselfbuffers     gC:\Users\Administrator\AppData\Local\Temp\2\pip-target-b0z114gj\lib\python\win32/test/test_win32file.pytestLenzTestReadBuffer.testLen   s4    -a00Va(((((    c                 p    t          j        d          }d|d<   |                     |d         d           d S )Nr      r   r	   r
   r   r   s     r   testSimpleIndexzTestReadBuffer.testSimpleIndex   s;    -a00q	D)))))r   c                 |    t          j        d          }d}||d d<   |                     |dd         |           d S )N   s     r   r   )r   r   vals      r   testSimpleSlicezTestReadBuffer.testSimpleSlice!   sH    -a00rr
!c*****r   N)__name__
__module____qualname__r   r   r    r   r   r   r      sA        ) ) )* * *
+ + + + +r   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )TestSimpleOpsc           	         t          j                    \  }}t          j        |           t          j        |           t          j        |t
          j        dd t          j	        dd           }d}	 t          j
        ||           |                                 t          j        |t
          j        dd t          j        dd           }t          j        |d          \  }}|                     ||           |                                 	 t          j        |           d S # t           $ r Y d S w xY w# |                                 	 t          j        |           w # t           $ r Y w w xY wxY w)Nr   s   Hello there   )tempfilemkstemposcloseunlinkr	   
CreateFileGENERIC_WRITEwin32con
CREATE_NEW	WriteFileCloseGENERIC_READOPEN_EXISTINGReadFiler   OSError)r   fdfilenamehandle	test_datarcdatas          r   testSimpleFileszTestSimpleOps.testSimpleFiles)   su   '))H

	(%i-q$8KQPT
 
 $			222LLNNN)&& F !)&$77HBT9---LLNNN	(#####    LLNNN	(####   sC   0BD1 
D   
D.-D.1E,EE,
E)&E,(E))E,c           	      (   t           j                            t          j                    d          }t
          j        t
          j        z  }t
          j        }t          j	        ||t
          j
        d t
          j        |d          }d}t          j        ||           |                     t          j        |          t          |          k    d           t          j        |dt
          j                   t          j        |t          |          dz             \  }}|                     |dk    d|z             |                     ||k    d           t          |          dz  }t          j        ||t
          j                   t          j        |           |                     t          j        |          |           |                     t          j        |          t          j        |                     t          j        |          \  }	}
}}}|                     ||k    d	           |                     |	t          j        |          k    d
           d }|                     t           j                            |           d           d S )Nwin32filetest.datr   s  zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzRWARNING: Written file does not have the same size as the length of the data in it!
   zReadfile returned %dzRead data is not what we wrote!r   zEExpected GetFileAttributesEx to return the same size as GetFileSize()zOExpected GetFileAttributesEx to return the same attributes as GetFileAttributesz(After closing the file, it still exists!)r%   pathjoinwin32apiGetTempPathr	   r.   r)   FILE_FLAG_DELETE_ON_CLOSEr(   FILE_SHARE_READCREATE_ALWAYSr,   
assertTrueGetFileSizer   SetFilePointer
FILE_BEGINr0   SetEndOfFiler   GetFileAttributesExGetFileAttributesExWGetFileAttributesisfile)r   testNamedesiredAccess	fileFlagshr7   hr	read_datanewSizeattrctatwtsizes                 r   testMoreFileszTestSimpleOps.testMoreFilesH   se   7<< 4 6 68KLL!.1HH7	 %#
 
 At$$$!!$$D		1`	
 	
 	
 	 Ay';<<<!*s4yy2~
 
I 	a!7"!<===	T)+LMMM d))q. GY-ABBBq!!!.q117;;; 	)(33*844	
 	
 	

 "+!>x!H!Hb"b$GOS	
 	
 	
 	I/999]	
 	
 	

 x(((*T	
 	
 	
 	
 	
r   c           	         t           j                            t          j                    d          }t          j        |t
          j        t
          j        z  dd t
          j	        t
          j
        d          }	 d}t          j        ||          \  }}|                     |           |                     |t          |                     t          j        |dt
          j                   t          j        |t          |                    \  }}|                     |           |                     ||           t          j        |t          |           t
          j                   t          j        |t          |                    \  }}|                     |           |                     ||           |                                 t          j        |           d S # |                                 t          j        |           w xY w)Nr:   r   s	   Some data)r%   r<   r=   r>   r?   r	   r(   r.   r)   rB   FILE_ATTRIBUTE_NORMALr,   assertFalser   r   rE   rF   r0   FILE_ENDr-   r'   )r   r3   fr7   reswrittenss          r   testFilePointerzTestSimpleOps.testFilePointer   s    7<< 4 6 68KLL "Y%<<#+
 
	 D&0D99NS'S!!!Wc$ii000 $Q9+?@@@ )!SYY77HS!S!!!Q%%% $QT
I4FGGG )!SYY77HS!S!!!Q%%%GGIIIIh GGIIIIhs   8E G" "*Hc           	         t          j        d          }t          j                                        d          }|                    t          j                                                  }t          j	        |t          j
        t          j        z  dd t          j        dd          }	 t          j        ||||           t          j        |          \  }}}|                     ||           |                     ||           |                     ||           t          j        ||||           t          j        |          \  }}}|                     ||           |                     ||           |                     ||           |                                 t#          j        |           d S # |                                 t#          j        |           w xY w)N-testFileTimesr   microsecond)r#   mktempwin32timezoneutcnowreplace
astimezoneTimeZoneInfolocalr	   r(   r.   r)   rB   SetFileTimeGetFileTimer   r&   r%   r'   )r   r3   now_utc	now_localrO   rT   rU   rV   s           r   testFileTimesTimezonesz$TestSimpleOps.testFileTimesTimezones   s   ?#344  &((00Q0??&&}'A'G'G'I'IJJ	 "Y%<<#
 
	 !!Wgw???".q11JBBY+++Y+++Y+++!!Y	9EEE".q11JBBWb)))Wb)))Wb)))GGIIIIh GGIIIIhs   )C"F5 5*Gc           	      6   ddl m} t          j                            |                                                              d          }|t          j        d          z   }|t          j        d          z   }t          j        d          }t          |d	          
                                 t          j        |t          j        t          j        z  dd t          j        dd           }	 t          j        |          \  }}}	|                    d          }|                    d          }|	                    d          }	|                     ||d
| d|            |                     ||cxk    o|k    nc |||f           |                     |	|d| d|	            |                     ||	cxk    o|k    nc ||	|f           t          j        ||||d           t          j        |          \  }}}	|                     ||           |                     ||           |                     |	|           |                                 t/          j        |           d S # |                                 t/          j        |           w xY w)Nr   )rk   )tzrd   r   )secondsx   rc   wz#File was created in the past - now=z
, created=z$File was written-to in the past now=z
, written=T)UTCTimes)rg   rk   datetimenowutcri   	timedeltar#   rf   openr&   r	   r(   r.   r)   r*   r/   rn   assertGreaterEqualrC   rm   r   r-   r%   r'   )
r   rk   ry   nowishlaterr3   r]   rT   rU   rV   s
             r   testFileTimeszTestSimpleOps.testFileTimes   s   ...... ##|'7'7'9'9#::BBqBQQx)!4444h(5555?#344 	Xs!!### "Y%<<"
 
"	 ".q11JBB
 **B**B**B##IcIIRII  
 OOC2////////#r61BCCC##JsJJbJJ  
 OOC2////////#r61BCCC !!UE54HHHH".q11JBB R'''R'''R''' GGIIIIh GGIIIIhs   /EI. .*JN)r   r   r   r8   rX   ra   rq   r   r   r   r   r    r    (   sa          >=
 =
 =
~&  &  & P     >8  8  8  8  8 r   r    c                   (    e Zd ZdxZZd Zd Zd ZdS )TestGetFileInfoByHandleExNc                 d    t          j                    \  }| _        t          j        |           d S N)r#   r$   $_TestGetFileInfoByHandleEx__filenamer%   r&   )r   r2   s     r   setUpzTestGetFileInfoByHandleEx.setUp  s(    &.00DO
r   c                     | j         | j                                          | j        +	 t          j        | j                   n# t
          $ r Y nw xY wd x| _         | _        d S r   )"_TestGetFileInfoByHandleEx__handler-   r   r%   r'   r1   r   s    r   tearDownz"TestGetFileInfoByHandleEx.tearDown  sr    =$M!!!?&	$/****   *..s   A 
AAc           	         t          j        | j                  }t          j        | j        t           j        dd t
          j        dd           }|| _        t          j        |          \  }}}t          j	        |t           j
                  }|                     ||d                    |                     ||d                    |                     ||d                    |                     ||d                    d S )Nr   CreationTimeLastAccessTimeLastWriteTimeFileAttributes)r	   rJ   r   r(   r.   r*   r/   r   rn   GetFileInformationByHandleExFileBasicInfor   )r   rS   r]   rT   rU   rV   
basic_infos          r   testFileBasicInfoz+TestGetFileInfoByHandleEx.testFileBasicInfo  s    *4?;; O""
 
 *1--
B ;Ay?VWW
Z7888Z(89:::Z8999z*:;<<<<<r   )r   r   r   r   r   r   r   r   r   r   r   r   r   	  sK          Hz  / / /= = = = =r   r   c                   F    e Zd Zd Zd Zd Zd ZddZd Zd Z	d	 Z
d
 ZdS )TestOverlappedc           	      T   dd l }t          j                            t	          j                    d          }t          j        }t          j	                    } |j
        d ddd           }||_        t          j        ||dd t          j        dd          }ddz  }d}|t          |          z  }	t          |          D ]P}
t          j        |||            |j        |j        |j                   |xj        t          |          z  c_        Q|                                 t          j	                    } |j
        d ddd           }||_        t          j        }t          j        ||dd t          j        dd          }t          j        d          }	 	 t          j        |||          \  }} |j        |j        |j                   |xj        t          |          z  c_        ||ur|                     d           n# t          j        $ r Y nw xY w|                                 d S )	Nr   r:      zi      i  r   zHUnexpected result from ReadFile - should be the same buffer we passed it)
win32eventr%   r<   r=   r>   r?   r	   r)   
pywintypes
OVERLAPPEDCreateEventhEventr(   rB   r   ranger,   WaitForSingleObjectINFINITEOffsetr-   r.   r/   r
   r0   failerror)r   r   rL   rM   
overlappedevtrO   
chunk_data	num_loopsexpected_sizeir   rP   r7   s                 r   testSimpleOverlappedz#TestOverlapped.testSimpleOverlapped2  s:   7<< 4 6 68KLL!/*,,
$j$T1a66
 mQi.Eq!
 
 F]
	!C
OO3y!! 	1 	1A:z:::*J*:+<j>QRRRZ0				*,,
$j$T1a66
!. mQi.Eq!
 
 -f55
		$-aDDD.
.z/@*BUVVV!!SYY.!!v~~IIb   >   
	 	
					s   A*G> >HHc                 :   t          j        t           j        ddd          }g }t          dd          D ]}t	          j        t          j        t          j                  }|                    t          j        t          j	        d           |
                    d|f           |                    d           |                    |           t          j        |                                ||d          }|                     ||           |D ]}|                                 t!          |          }d x}}	 t          j        |           t%          d          # t           j        $ r0}|                     |j        t*          j                   Y d }~d S d }~ww xY w)Nr   i#  i#  r    zExpected close to fail!)r	   CreateIoCompletionPortINVALID_HANDLE_VALUEr   socketAF_INETSOCK_STREAM
setsockopt
SOL_SOCKETSO_REUSEADDRbindlistenappendfilenoassertIsr&   intCloseHandleAssertionErrorr   r   winerrorERROR_INVALID_HANDLE)	r   ioportsocksPORTsocknewr`   hvdetailss	            r   testCompletionPortsMultiplez*TestOverlapped.testCompletionPortsMultiple]  s    1*Aq!
 
 $%% 	' 	'D=1CDDDOOF-v/BAFFFIIr4j!!!KKNNNLL24;;==&$PQRRCMM#v&&&& 	 	AGGIIII[[	N!"%%% !:;;; 	N 	N 	NW-x/LMMMMMMMMM	Ns   8#E F*%FFc                     G d d          }t          j        dd dd          }t          j                    } |            |_        t          j        |dd|           t          j        |t          j                  \  }}}}| 	                    |d           | 
                    t          |j        |                     d S )Nc                       e Zd ZdS )5TestOverlapped.testCompletionPortsQueued.<locals>.FooN)r   r   r   r   r   r   Foor   y  s        Dr   r   r   c   )r	   r   r   r   objectPostQueuedCompletionStatusGetQueuedCompletionStatusr   r   r   rC   
isinstance)r   r   io_req_portr   errCodebyteskeys          r   testCompletionPortsQueuedz(TestOverlapped.testCompletionPortsQueuedx  s    	 	 	 	 	 	 	 	  6r4AFF*,,
CEE
,[!RLLL*3*M,+
 +
'Z 	!$$$
:#4c::;;;;;r   c                    t          j                    }t          j        ||           |rZd }	 |                     t
          t          j        |d           |                                 n# |                                 w xY wd S t          j        |d          }|d         }| 	                    ||u            t          j
        |d          d         }t          j        ||           d S )Nr   r   r   )r   r   	win32pipeConnectNamedPipeassertRaisesRuntimeErrorr	   r   r-   rC   r0   r,   )r   r4   portdrop_overlapped_referencer   resultol2r7   s           r   _IOCPServerThreadz TestOverlapped._IOCPServerThread  s    *,,
"6:666$ 	 J!! )"EtR   F4T2>>Rjz)***!&#..q1FD)))))s   'A* *B r   c           
      r   d}d}t          j        |t           j        t          j        z  t           j        t           j        z  t           j        z  d||t           j        d           }t          j	        dddd          }t          j	        ||dd           t          j        | j        |||fd          }|                                 	 t          j        d           	 t          j        dd	|d           n# t           j        $ r |s Y nw xY w|s|                                 |                    d
           |                     |                                d           d S # |s|                                 |                    d
           |                     |                                d           w xY w)Nr   z\\.\pipe\pywin32_test_piper   r   r   T)targetargsdaemon皙?s   Hello there   zthread didn't finish)r   CreateNamedPipePIPE_ACCESS_DUPLEXr	   FILE_FLAG_OVERLAPPEDPIPE_TYPE_MESSAGEPIPE_READMODE_MESSAGE	PIPE_WAITNMPWAIT_WAIT_FOREVERr   	threadingThreadr   starttimesleepCallNamedPiper   r-   r=   r[   is_alive)r   test_overlapped_deathBUFSIZE	pipe_namer4   r   ts          r   testCompletionPortsNonQueuedz+TestOverlapped.testCompletionPortsNonQueued  s    1	*(9+II'-.!" *
 
 /Aq!<<(q!<<<)$ 56
 
 

 	
				CJsOOO'1>7A    ?   ,  
 ) FF1IIIQZZ\\+ABBBBB ) FF1IIIQZZ\\+ABBBBs1   E! C4 3E! 4D	E! D		E! !AF6c                 0    |                      d           d S )NT)r   r   s    r   (testCompletionPortsNonQueuedBadReferencez7TestOverlapped.testCompletionPortsNonQueuedBadReference  s    ))$/////r   c                 r    t          j                    }i }d||<   |                     ||         d           d S )Nhello)r   r   r   )r   r   ds      r   testHashablezTestOverlapped.testHashable  s>    *,,
*:00000r   c                     t          j                    }|                     ||           |                     ||k               |                     ||k               d S r   )r   r   r   rC   r[   )r   r   s     r   testComparablezTestOverlapped.testComparable  s\    *,,
Z000
j0111z122222r   c                    t          j                    }t          j                    }|                     ||           |                     ||k               |                     ||k               d|_        |                     ||           |                     ||k               |                     ||k               d S r   )r   r   r   rC   r[   r   assertNotEqual)r   overlapped1overlapped2s      r   testComparable2zTestOverlapped.testComparable2  s     +-- +--k222{23333444K5553444{233333r   N)r   )r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   1  s        ) ) )VN N N6< < <* * *.,C ,C ,C ,C\0 0 01 1 13 3 34 4 4 4 4r   r   c                       e Zd Zd Zd ZdS )TestSocketExtensionsc                    t          j         t           j        t           j                  }|                    d|f           |                    d           t          j         t           j        t           j                  }t          j                    }t          j        d ddd           |_	        d}| 
                    t          t          j        ||||           t          j        d          }t          j        ||||          }|                     |t           j                   |                                 t          j        |j	        d          }|t          j        k    r|                     d           t          j        |                                |d          }	|                    |d |	                    |                                 d S )	Nr      r   a                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   r"     "timed out waiting for a connectionF)r   r   r   r   r   r   r   r   r   r   r   	TypeErrorr	   AcceptExr
   r   r   ERROR_IO_PENDINGsetr   WAIT_TIMEOUTr   GetOverlappedResultr   send)
r   r   running_eventstopped_eventlisteneraccepterr   r   r6   nbytess
             r   acceptWorkerz!TestSocketExtensions.acceptWorker  s   =1CDDr4j!!! =1CDD*,,
&24AtDD
 y)8Xvz	
 	
 	

 -d33(FJGGX6777+J,=tDD(((II:;;;.x/@/@*eTTfWfWo&&&r   c                    d}t          j                    }t          j                    }t          j        | j        |||f          }|                                 |                    d           |                                s|                     d           t          j        t          j	        t          j
                  }|                    d|f           t          j        |dd            t          j                    }t!          j        d ddd           |_        d}|                     t(          t          j        |||           t          j        d	          }t          j        |||           t          j        |                                |d
          }|d |         }	|                     |	d           |                    d           |                                s|                     d           d S d S )NiH  r   r   r   z&AcceptEx Worker thread failed to start	127.0.0.1   hellor   z
          r;   Tz2AcceptEx Worker thread failed to successfully stop)r   Eventr   r  r   waitis_setr   r   r   r   connectr	   WSASendr   r   r   r   r   r   r  WSARecvr
   r  r   r   )
r   r   runningstoppedr   r`   r   r   r  gots
             r   testAcceptExz!TestSocketExtensions.testAcceptEx  s   /##/##D$5T7G<TUUU				Q~~ 	@II>???M&.&*<==			;%&&&!Xt,,,*,,
&24AtDD
)Y%66:NNN-b11!VZ000.qxxzz:tLLWfWoh'''Q~~ 	LIIJKKKKK	L 	Lr   N)r   r   r   r  r&  r   r   r   r  r    s8             DL L L L Lr   r  c                   &    e Zd Zd Zd Zd Zd ZdS )TestFindFilesc                    t           j                            t          j                    d          }t	          j        |          }t          |          }t                      }t	          j        |          D ]}|                    |           | 	                    t          |          dd           |                     ||           d S )N*   z&This directory has less than 5 files!?)r%   r<   r=   getcwdr	   
FindFilesWr  FindFilesIteratoraddassertGreaterr   r   )r   dirfilesset1set2files         r   testIterzTestFindFiles.testIter,  s    gll29;;,,$S))5zzuu/44 	 	DHHTNNNN3t99a)QRRRt$$$$$r   c                     t           j                            t          j                    dd          }|                     t
          j        t
          j        |           d S )Nza dir that doesn't existr*  )r%   r<   r=   r,  r   r	   r   r.  )r   r1  s     r   
testBadDirzTestFindFiles.testBadDir6  sC    gll29;;(BCHH)/9+FLLLLLr   c                     t           j                            t          j                    d          }d}t	          j        |          D ]}|dz  }|                     d|           d S )Nz	*.foo_barr   r   )r%   r<   r=   r,  r	   r.  r   )r   specnumr   s       r   testEmptySpeczTestFindFiles.testEmptySpec:  sc    w||BIKK55,T22 	 	A1HCCC     r   c                    t           j                            t          j                    d          }	 t          j        |           n# t          $ r Y nw xY wt          j        |           	 d}t          j	        t           j                            |d                    D ]}|dz  }| 
                    d|           t          j        |           d S # t          j        |           w xY w)Nwin32file_test_directoryr   r*  r   r   )r%   r<   r=   r>   r?   rmdirr1   mkdirr	   r.  r   )r   	test_pathr;  r   s       r   testEmptyDirzTestFindFiles.testEmptyDirA  s    GLL!5!7!79STT		 HY 	 	 	D	
	 C0i1M1MNN  qQ$$$HYBHYs   A 
AA-AC C+N)r   r   r   r6  r8  r<  rB  r   r   r   r(  r(  +  sS        % % %M M M! ! !         r   r(  c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
TestDirectoryChangesr   c           
         g | _         g | _        g | _        g | _        t	          | j                  D ]}t          j        d|z            }t          j	        |           | j        
                    |           t          j        |t          j        t          j        d t          j        t          j        t          j        z  d           }| j        
                    |           g }t)          j        | j        |||f          }|                                 | j         
                    |           | j        
                    |           d S )Nz-test-directory-changes-%dr  )watcher_threadswatcher_thread_changes	dir_namesdir_handlesr   num_test_dirsr#   rf   r%   r@  r   r	   r(   ntsecurityconFILE_LIST_DIRECTORYr*   rA   r/   FILE_FLAG_BACKUP_SEMANTICSr   r   r   _watcherThreadOverlappedr   )r   r   tdhdirchangesr   s         r   r   zTestDirectoryChanges.setUpX  s<   !&(#t)** 	8 	8A!=!ABBBHRLLLN!!"%%%'1(&3h6SS D ##D)))G 4Bg;N  A GGIII ''***'..w7777+	8 	8r   c                     t           j        }	 	 t          d|           t          j        |dd|          }t          d|           n#   xY w|                    |           U)Nr   waiting    Fr%  )r*   FILE_NOTIFY_CHANGE_FILE_NAMEprintr	   ReadDirectoryChangesWextend)r   dndhrQ  flagss        r   _watcherThreadz#TestDirectoryChanges._watcherThreadt  s|     5	$
i$$$#9	  eW%%%%NN7###	$s   7A A
c                    t           j        }t          j        d          }t	          j                    }t          j        d ddd           |_        	 t          j	        ||d||           t          j
        |j        d          }|t          j        k    rEt          j        ||d          }|r+t          j        ||          }	|                    |	           nd S t          d           d S )NrT  r   r   Fi  Tz ERROR: Watcher thread timed-out!)r*   rU  r	   r
   r   r   r   r   r   rW  r   WAIT_OBJECT_0r  FILE_NOTIFY_INFORMATIONrX  rV  )
r   rY  rZ  rQ  r[  bufr   r6   r  bitss
             r   rN  z-TestDirectoryChanges._watcherThreadOverlapped  s    5*400*,,
&24AtDD
	+   /
0A4HHBZ---
 #6r:tLL $<S&IIDNN4((((
 F89995	r   c                 D   | j         D ]}|                                 | j        D ]7}	 t          j        |           # t
          $ r t          d|           Y 4w xY w| j        D ]:}|                    d           |	                                rt          d           ;d S )NzFAILED to remove directoryr+  z%FAILED to wait for thread termination)
rI  r-   rH  shutilrmtreer1   rV  rF  r=   r   )r   rO   rY  r   s       r   r   zTestDirectoryChanges.tearDown  s    ! 	 	A GGIIII. 	8 	8B8b!!!! 8 8 82B777778 % 	? 	?AFF1IIIzz|| ?=>>>		? 	?s   >AAc                 .    t          j        d           d S )N      ?)r   r   r   s    r   stablizezTestDirectoryChanges.stablize  s    
3r   c                 6   |                                   | j        D ]D}t          j                            |d          }t          |d                                           E|                                   | j        d         }|                     |dg           d S )N	test_filerv   r   )r   ri  	rg  rH  r%   r<   r=   r|   r&   rG  r   r   rY  fnrQ  s       r   
testSimplezTestDirectoryChanges.testSimple  s    . 	" 	"Bb+..BSMM!!!!-a0#3"455555r   c                 6   |                                   | j        D ]D}t          j                            |d          }t          |d                                           E|                                   | j        d         }|                     |dg           d S )Nxrv   r   )r   ro  rj  rk  s       r   	testSmallzTestDirectoryChanges.testSmall  s    . 	" 	"Bb#&&BSMM!!!!-a08*-----r   N)r   r   r   rJ  r   r\  rN  r   rg  rm  rp  r   r   r   rD  rD  U  s        M8 8 88$ $ $2  B? ? ?&  6 6 6. . . . .r   rD  c                       e Zd Zd ZdS )TestEncryptc                 .   t          j        d          }t          |d          }|                    d           |                                 d }	 	 t          j        |           nA# t
          j        $ r/}|j        t          j	        k    r t          d           Y d }~nd }~ww xY wt          j        |           ||                                 t          j        |           d S # ||                                 t          j        |           w xY w)Nwin32file_testwbr  z3It appears this is not NTFS - can't encrypt/decrypt)r#   rf   r|   writer&   r	   EncryptFiler   r   ERROR_ACCESS_DENIEDrV  DecryptFiler%   r'   )r   fnamer]   r   s       r   testEncryptzTestEncrypt.testEncrypt  s!    011						M%e,,,,? M M M#x'CCCKLLLLLLLLM !%(((}			Ie }			Ies0   A' &C( 'B%6%B C(  B%%C( (,DN)r   r   r   r{  r   r   r   rr  rr    s#            r   rr  c                        e Zd Zd Zd Zd ZdS )TestConnectc                 B   t          j                     }dt          j        dd          f| _        |                    | j                   |                    d           t          j         t           j        t           j                  }t          j	                    }t          j        d ddd           |_        |rd}nt          j        |          }t          j        |          }t          j        ||||           ||j        f}t          j        |dd          }	|	t          j        k    r|                     d	           |	t          j        k    rd S t          j        |                                |d          }
|r|d |
         | _        |                    d
           d S )N	localhost'     r   r   r"   Fr
  r     some expected response)r   randomrandintaddrr   r   r   r   r   r   r   r   r   r	   CalculateSocketEndPointSizer
   r  WaitForMultipleObjectsr  r   r^  r  r   requestr  )r   expect_payloadgiveup_eventr  r  r   buf_sizer   eventsr6   r  s              r   connect_thread_runnerz!TestConnect.connect_thread_runner  sx    =?? &.">">?	di    =1CDD*,,
&24AtDD
 	GHH !<XFFH-h778XvzBBBz00.vudCC(((II:;;;)))F.x/@/@*eTT 	+!'6'?DL/00000r   c                    t          j        d ddd           }t          j        | j        d|f          }|                                 t          j        d           t          j                    }t          j
                    }|                    d           	 t          j        || j        |d           n,# t          j        $ r}t          j        |            d }~ww xY w	 t          j        |                                |d           nU# t          j        $ rC}t          j        |           |j        t&          j        k    rt+          j        d           d }~ww xY wt          j
                    }t          j        d	          }t          j        |||d           t          j        |                                |d          }|d |         | _        |                     | j        d
           |                     | j        d           |                    d           |                     |                                d           d S )Nr   Tr  r   z0.0.0.0r   s   some expected requestr   .Assuming ERROR_CONNECTION_REFUSED is transientr"   r  r+  worker thread didn't terminate)r   r   r   r   r  r   r   r   r   r   r   r   r	   	ConnectExr  r   SetEventr  r   r   ERROR_CONNECTION_REFUSEDunittestSkipTestr
   r"  responser   r  r=   r[   r   r   r  r   s2olexcbufflengths           r   test_connect_with_payloadz%TestConnect.test_connect_with_payload  s&   !-dAq$??-T<4H
 
 
 	
			
3]__"$$
	DIr3KLLLL 	 	 	---		)"))++r1==== 	 	 	---|x@@@'D   	 "$$+D11"dB***.ryy{{BBBWfW(ABBB'?@@@	q			'GHHHHHs0   B6 6CCC#(D E>EEc                 ^   t          j        d ddd           }t          j        | j        d|f          }|                                 t          j        d           t          j                    }t          j
                    }|                    d           	 t          j        || j        |           n,# t          j        $ r}t          j        |            d }~ww xY w	 t          j        |                                |d           nU# t          j        $ rC}t          j        |           |j        t&          j        k    rt+          j        d           d }~ww xY wt          j
                    }t          j        d          }t          j        |||d           t          j        |                                |d          }|d |         | _        |                     | j        d	           |                    d
           |                     |                                d           d S )Nr   Fr  r   r  r   r  r"   r  r+  r  )r   r   r   r   r  r   r   r   r   r   r   r   r	   r  r  r   r  r  r   r   r  r  r  r
   r"  r  r   r=   r[   r   r  s           r   test_connect_without_payloadz(TestConnect.test_connect_without_payload8  s
   !-dAq$??-UL4I
 
 
 	
			
3]__"$$
	DIr2222 	 	 	---		)"))++r1==== 	 	 	---|x@@@'D   	 "$$+D11"dB***.ryy{{BBBWfW(ABBB	q			'GHHHHHs0   B5 5CCC"(D E>EEN)r   r   r   r  r  r  r   r   r   r}  r}    sK        $1 $1 $1L!I !I !IF!I !I !I !I !Ir   r}  c                       e Zd Zd ZdS )TestTransmitc           
          dd l }t          j        d          }|                    |          }t	          |          }t          j                    }|                    |            fd}t          j	        |          }|
                                 t          j        d           t          j                    }|                     j                   d}	d}
d}d}d	}d
}t!          j                    }|                    d           t'          j        |t'          j        |                                          |d|d           |	t'          j        |                                |d          z  }	t!          j                    }|                    d           t'          j        |t'          j        |                                          |d|d|
|           |	t'          j        |                                |d          z  }	t!          j                    }|                    d           t'          j        |t'          j        |                                          |d|d||           |	t'          j        |                                |d          z  }	t!          j                    }|                    d           t'          j        |t'          j        |                                          |d|dd |           |	t'          j        |                                |d          z  }	t!          j                    }|                    d           t'          j        |t'          j        |                                          |d|d|           |	t'          j        |                                |d          z  }	|                                 |                                 d
                     j                  }                     |	t	          |                     ||
z   |z   |z   |z   |z   |z   |z   |z   }                     t9          |          t9          |                                          ||           d S )Nr   i   c                  &   t          j                     } t          d          D ]s}dt          j        dd          f_        	 |                     j                    nH# t          $ r,}|j        dk    r t          dj        d           Y d }~ld }~ww xY wt          d          | 
                    d	           |                                 \  }}d	}g _        |r3|                    d
          }j                            |           |1d S d S )Nr+  r  r  r  i'  zFailed to use portztrying another random onez,Failed to find an available port to bind to.r   i  )r   r   r  r  r  r   r1   r   rV  r   r   acceptr  recvr   )s1r   r  clir  r`  r   s         r   runnerz*TestTransmit.test_transmit.<locals>.runnerf  s@   B
 1XX 
U 
U(&.*F*FG	XGGDI&&&E X X X|u,,.	;VWWWWWWWWX
 %%STTTIIaLLL		ICCDL )hhz**##C(((  ) ) ) ) )s   A
B)"BB)r   rf  s   [AAA]s   [BBB]s   [CCC]s   [DDD]r   r   )binasciir%   urandomhexlifyr   r#   TemporaryFilerv  r   r   r   r   r   r   r   r  r   r   seekr	   TransmitFile_get_osfhandler   r  r&   r=   r  r   type)r   r  r   r   
val_lengthr]   r  thr  r  aaabbbcccdddemptyr  r`  expecteds   `                 r   test_transmitzTestTransmit.test_transmit]  s   
;''u%%XX
"$$		) 	) 	) 	) 	)2 V,,,




3]__


49"$$	q				(44j!R	
 	
 	
 	)/		RCCC"$$	q				(44j!RCQT	
 	
 	
 	)/		RCCC"$$	q				(44j!RESX	
 	
 	
 	)/		RCCC"$$	q				(44j!RDRU	
 	
 	
 	)/		RCCC"$$	q				(44j!RC	
 	
 	
 	)/		RCCC




			hht|$$S***9s?S(3.4s:S@3Fhc3333'''''r   N)r   r   r   r  r   r   r   r  r  \  s(        W( W( W( W( W(r   r  c                       e Zd Zd Zd ZdS )TestWSAEnumNetworkEventsc                    t          j                     }t          j        d ddd           }t          j        ||d           |                     t          j        |          i            |                     t          j        ||          i            |                     t          t          j        ||d           |                     t          t          j        |d           |                     t          t          j        d|           |                     t          t          j        d           t          d          }t          j
        |                                          }|                     t          j        t          j        |           |                     t          j        t          j        ||           	 t          j        |           nA# t          j        $ r/}|                     |j        t          j                   Y d }~nd }~ww xY w	 t          j        ||           d S # t          j        $ r0}|                     |j        t          j                   Y d }~d S d }~ww xY w)Nr   r   r   spamNUL)r   r   r   r	   WSAEventSelectr   WSAEnumNetworkEventsr   r  r|   r  r   r   r   WSAENOTSOCK)r   r`   er]   rO   s        r   test_basicsz$TestWSAEnumNetworkEvents.test_basics  s+   MOO"4At44 Aq)))7::B???71==rBBB)Y%CQ1MMM)Y%CQOOO)Y%CVQOOO)Y%CVLLLKK$QXXZZ00)/9+I1MMM)/9+I1aPPP	@*1---- 	@ 	@ 	@QZ)>????????	@	@*1a00000 	@ 	@ 	@ QZ)>?????????	@s0   ;G H%H		HH) )I(8%I##I(c                 d   t          j                     }|                    d           t          j        d ddd           }t	          j        ||t          j        t          j        z             |                    d           |	                    d           t          j                     }|                    d           t          j        d ddd           }t	          j        ||t          j
        t          j        z  t          j        z  t          j        z             |                    |                                          }|                     |t          j                   t          j        |d          }|                     |t          j                   t	          j        ||          }|                     |t          j        di           |                                \  }}	|                    d           t          j        d ddd           }
t	          j        ||
t          j        t          j        z  t          j        z             t          j        |
d          }|                     |t          j                   t	          j        ||
          }|                     |t          j        di           t          j        |d          }|                     |t          j                   t	          j        ||          }|                     |t          j
        dt          j        di           d}ddz  }|dk     r}	 ||                    |          z  }n]# t,          $ rP}|j        d         t          j        k    rY d }~J|j        d         t          j        t          j        fv rY d }~n$ d }~ww xY w|dk     }|                     d	           t	          j        |          }|                     |i            t          j        |
d          }|                     |t          j                   t	          j        ||
          }|                     |t          j        di           d}||k     rj	 |t7          |                    d
                    z  }n=# t,          $ r0}|j        d         t          j        t          j        fv rY d }~a d }~ww xY w||k     j|                     ||           t	          j        |          }|                     |i            t          j        |d          }|                     |t          j                   t	          j        ||          }|                     |t          j        di           |                    t           j                   t          j        |
d          }|                     |t          j                   t?          d          D ]/}t	          j        ||
          }|r n$tA          j!        d           0tE          d          |                     |t          j        di           t	          j        |          }|                     |i            |#                                 t          j        |d          }|                     |t          j                   t	          j        ||          }|                     |t          j        di           |#                                 t	          j        |          }|                     |i            d S )Nr   )r  r   r;   i  r   s   xxxxxxxxxxxxxxxxr"   i   z"could not find socket buffer limiti @  r+  d   zfailed to get events)$r   setblockingr   r   r	   r  	FD_ACCEPTFD_CLOSEr   r   
FD_CONNECTFD_READFD_WRITE
connect_exgetsocknamer   WSAEWOULDBLOCKr   r^  r  r  r  r1   r   WSAEINTR
WSAENOBUFSr   r   r  shutdownSHUT_WRr   r>   Sleepr   r&   )r   r   
port_eventclientclient_eventerrr^   r  serverr  server_eventsentr7   r  receivedr   s                   r   test_functionalz(TestWSAEnumNetworkEvents.test_functional  s    }+D!Q==
 *i1I4FF	
 	
 	
 			"###B1!-dAq$??    !  !	
 	
 	
  0 0 2 233i6777,Z>>j6777/jAA)"5q!9:::{{}}1!-dAq$?? 	 22Y5GG	
 	
 	

 ,\4@@j6777/EE)"4a!8999,\4@@j6777/EE)"69;Mq!QRRR4%%%D)))   6!9	 222HHHHVAY9#;Y=Q"RRREEEE %%% II:;;;/77$$$,\4@@j6777/EE)"3Q!7888ooCI 6 6777   6!9!3Y5M NNNHHHH	 oo 	4(((/77$$$,\4@@j6777/EE)"4a!8999''',\4@@j6777q 	9 	9A3FLIIF N3 !7888)"4a!8999/77$$$,\4@@j6777/EE)"4a!8999/55$$$$$sB   ?M 
N2"N-%N-,N--N2/%R 
S%S
	S

SN)r   r   r   r  r  r   r   r   r  r    s:        @ @ @2r% r% r% r% r%r   r  __main__)!rx   r%   r  rc  r   r#   r   r   r  rK  r   r>   r*   r   r	   r   rg   r   pywin32_testutilr   TestCaser   r    r   r   r  r(  rD  rr  r}  r  r  r   r   r   r   <module>r     s*    				                                      % % % % % %+ + + + +X& + + +"^  ^  ^  ^  ^ H% ^  ^  ^ B%= %= %= %= %= 1 %= %= %=Pw4 w4 w4 w4 w4X& w4 w4 w4t=L =L =L =L =L8, =L =L =L@'  '  '  '  ' H% '  '  ' TA. A. A. A. A.8, A. A. A.H    (#   *kI kI kI kI kI(# kI kI kI\X( X( X( X( X(8$ X( X( X(vL% L% L% L% L%x0 L% L% L%^ zHJJJJJ r   