
    %
i.                     l   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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)TestSkipped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     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\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_BEGINr1   SetEndOfFiler   GetFileAttributesExGetFileAttributesExWGetFileAttributesisfile)r   testNamedesiredAccess	fileFlagshr8   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*   rC   FILE_ATTRIBUTE_NORMALr-   assertFalser   r   rF   rG   r1   FILE_ENDr.   r(   )r   r4   fr8   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*   rC   SetFileTimeGetFileTimer   r'   r&   r(   )r   r4   now_utc	now_localrP   rU   rV   rW   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   )rl   )tzre   r	   )secondsx   rd   wz#File was created in the past - now=z
, created=z$File was written-to in the past now=z
, written=T)UTCTimes)rh   rl   datetimenowutcrj   	timedeltar$   rg   openr'   r
   r)   r/   r*   r+   r0   ro   assertGreaterEqualrD   rn   r   r.   r&   r(   )
r   rl   rz   nowishlaterr4   r^   rU   rV   rW   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   r9   rY   rb   rr   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   r3   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(   r2   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
   rK   r   r)   r/   r+   r0   r   ro   GetFileInformationByHandleExFileBasicInfor   )r   rT   r^   rU   rV   rW   
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)   rC   r   ranger-   WaitForSingleObjectINFINITEOffsetr.   r/   r0   r   r1   failerror)r   r   rM   rN   
overlappedevtrP   
chunk_data	num_loopsexpected_sizeir   rQ   r8   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newra   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   rD   
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.   rD   r1   r-   )r   r5   portdrop_overlapped_referencer   resultol2r8   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_namer5   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   rD   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   rD   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< < <* * *0,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   r7   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   ra   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  updateFindFilesIteratoraddassertGreaterr   r   )r   dirfilesset1set2files         r   testIterzTestFindFiles.testIter-  s    gll29;;,,$S))uuE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   r0  )r   r3  s     r   
testBadDirzTestFindFiles.testBadDir8  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
   r0  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@   rmdirr2   mkdirr
   r0  r   )r   	test_pathr=  r   s       r   testEmptyDirzTestFindFiles.testEmptyDirC  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   r8  r:  r>  rD  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$   rg   r&   rB  r   r
   r)   ntsecurityconFILE_LIST_DIRECTORYr+   rB   r0   FILE_FLAG_BACKUP_SEMANTICSr   r   r   _watcherThreadOverlappedr   )r   r   tdhdirchangesr   s         r   r   zTestDirectoryChanges.setUpZ  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dhrS  flagss        r   _watcherThreadz#TestDirectoryChanges._watcherThreadv  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 )NrV  r   r	   Fi  Tz ERROR: Watcher thread timed-out!)r+   rW  r
   r   r   r   r   r   r   rY  r   WAIT_OBJECT_0r  FILE_NOTIFY_INFORMATIONrZ  rX  )
r   r[  r\  rS  r]  bufr   r7   r  bitss
             r   rP  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)
rK  r.   rJ  shutilrmtreer2   rX  rH  r>   r   )r   rP   r[  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_filerw   r   )r	   rk  	ri  rJ  r&   r=   r>   r}   r'   rI  r   r   r[  fnrS  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xrw   r   )r	   rq  rl  rm  s       r   	testSmallzTestDirectoryChanges.testSmall  s    . 	" 	"Bb#&&BSMM!!!!-a08*-----r   N)r   r   r   rL  r   r^  rP  r   ri  ro  rr  r   r   r   rF  rF  W  s        M8 8 88$ $ $2  B? ? ?&  6 6 6. . . . .r   rF  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$   rg   r}   writer'   r
   EncryptFiler   r   ERROR_ACCESS_DENIEDrX  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   rt  rt    s#            r   rt  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   eventsr7   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           nF# t          j        $ r4}t          j        |           |j        dk    rt%          d           d }~ww xY w	 t          j        |                                |d	           nP# t          j        $ r>}t          j        |           |j        t"          j        k    rt%          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 request&'  +ConnectEx is not available on this platformr	   .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  r   ERROR_CONNECTION_REFUSEDr   r#  responser   r  r>   r\   r   r   r  r   s2olexcbufflengths           r   test_connect_with_payloadz%TestConnect.test_connect_with_payload  s7   !-dAq$??-T<4H
 
 
 	
			
3]__"$$
	DIr3KLLLL 	 	 	---|u$$!"OPPP			)"))++r1==== 	 	 	---|x@@@!"RSSS		
 "$$+D11"dB***.ryy{{BBBWfW(ABBB'?@@@	q			'GHHHHHs0   B6 6C9/C44C9=(D& &E359E..E3c                    t          j        d ddd           }t          j        | j        d|f          }|                                 t          j        d           t          j                    }t          j
                    }|                    d           	 t          j        || j        |           nF# t          j        $ r4}t          j        |           |j        dk    rt%          d           d }~ww xY w	 t          j        |                                |d           nP# t          j        $ r>}t          j        |           |j        t"          j        k    rt%          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   r  s           r   test_connect_without_payloadz(TestConnect.test_connect_without_payload:  s   !-dAq$??-UL4I
 
 
 	
			
3]__"$$
	DIr2222 	 	 	---|u$$!"OPPP			)"))++r1==== 	 	 	---|x@@@!"RSSS		 "$$+D11"dB***.ryy{{BBBWfW(ABBB	q			'GHHHHHs0   B5 5C8/C33C8<(D% %E249E--E2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   r2   r   rX  r   r   acceptr  recvr   )s1r   r  clir  rb  r   s         r   runnerz*TestTransmit.test_transmit.<locals>.runnerh  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   rh  s   [AAA]s   [BBB]s   [CCC]s   [DDD]r   r	   )binasciir&   urandomhexlifyr   r$   TemporaryFilerx  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  rb  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   ra   er^   rP   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  r2   r   WSAEINTR
WSAENOBUFSr   r   r  shutdownSHUT_WRr   r?   Sleepr   r'   )r   r   
port_eventclientclient_eventerrr_   r  serverr  server_eventsentr8   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__)"ry   r&   r  re  r   r$   r   r   unittestrM  r   r?   r+   r   r
   r   rh   r   pywin32_testutilr   r   TestCaser   r!   r   r   r  r)  rF  rt  r  r  r  r   r   r   r   <module>r     s0    				                                      2 2 2 2 2 2 2 2+ + + + +X& + + +"^  ^  ^  ^  ^ H% ^  ^  ^ B%= %= %= %= %= 1 %= %= %=Px4 x4 x4 x4 x4X& x4 x4 x4v=L =L =L =L =L8, =L =L =L@(  (  (  (  ( H% (  (  ( V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   