mò
­fIc           @   sæ  d  k  Z  d  k Z d  k Z d  k Z d  k Z d  k Z d k l Z y d  k Z e i	 Wn e
 e f j
 o d  Z n Xy d  k Z Wn e
 j
 o d  Z n Xd „  Z e d ƒ Z e i i e i ƒ  d e i d ƒ Z e i Z d Z d d „ Z d	 „  Z d
 „  Z d e i f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ  d e i f d „  ƒ  YZ! d e f d „  ƒ  YZ" d e f d „  ƒ  YZ# d e f d „  ƒ  YZ$ d e f d  „  ƒ  YZ% d! e f d" „  ƒ  YZ& d# e  f d$ „  ƒ  YZ' d% e i f d& „  ƒ  YZ( e o\ d' e$ f d( „  ƒ  YZ) d) e% f d* „  ƒ  YZ* d+ e f d, „  ƒ  YZ+ d- e' f d. „  ƒ  YZ, n e p [$ [% [& [' n d/ „  Z- e. d0 j o e- ƒ  n d  S(1   N(   s   test_supportc         C   s   t  i |  ƒ S(   N(   t   test_supportt   findfilet   path(   R   (    (    t.   /mit/python/lib/python2.4/test/test_tarfile.pyR      s    s   testtar.tart   testtart   diri
   t    c         C   s2   |  p t Sn t i i t d t t i |  f ƒ S(   Ns   %s%s%s(   t   compR   t   osR   t   joint   tempdirt   extsep(   R   (    (    R   t   tarname   s    c           C   s(   t  i i t ƒ p t  i t ƒ n t S(   N(   R   R   t   existsR
   t   mkdir(    (    (    R   t   dirname#   s    c           C   s   t  S(   N(   t   tempname(    (    (    R   t   tmpname(   s    t   BaseTestc           B   s,   t  Z d Z d Z d Z d „  Z d „  Z RS(   NR   t   rt   :c         C   s9   |  i |  i |  i } t i t |  i ƒ | ƒ |  _ d  S(   N(   t   selft   modet   sepR   t   tarfilet   openR   t   tar(   R   R   (    (    R   t   setUp1   s    c         C   s   |  i i ƒ  d  S(   N(   R   R   t   close(   R   (    (    R   t   tearDown5   s    (   t   __name__t
   __module__R   R   R   R   R   (    (    (    R   R   ,   s
   	t   ReadTestc           B   s5   t  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   Nc         C   s“   d } xp |  i D]e } | d 7} | i ƒ  p q n |  i i | ƒ } |  i t | i	 ƒ  ƒ | i
 j d ƒ | i ƒ  q W|  i | t j d ƒ d S(   s    Test member extraction.
        i    i   s&   size read does not match expected sizes   could not find all membersN(   t   membersR   R   t   tarinfot   isregt   extractfilet   ft   assert_t   lent   readt   sizeR   t   membercount(   R   R%   R!   R"   (    (    R   t   test:   s     
 
c         C   s^   |  i d j oJ |  i i d ƒ } |  i i d ƒ } |  i | i ƒ  | i ƒ  j d ƒ n d S(   s'   Test sparse member extraction.
        t   |s   S-SPARSEs   S-SPARSE-WITH-NULLSs(   _FileObject failed on sparse file memberN(   R   R   R   R$   t   f1t   f2R&   R(   (   R   R-   R.   (    (    R   t   test_sparseJ   s     c         C   s‰   |  i d j ou d } |  i i | t ƒ  ƒ t t i i	 t ƒ  | ƒ d ƒ i
 ƒ  } |  i i | ƒ i
 ƒ  } |  i | | j d ƒ n d S(   s0   Test readlines() method of _FileObject.
        R,   s   0-REGTYPE-TEXTt   rUs.   _FileObject.readline() does not work correctlyN(   R   R   t   filenameR   t   extractR   t   fileR   R   R	   t	   readlinest   lines1R$   t   lines2R&   (   R   R5   R1   R6   (    (    R   t   test_readlinesS   s     'c   	      C   s1  |  i d j od } |  i i | t ƒ  ƒ t t i i	 t ƒ  | ƒ d ƒ i
 ƒ  } |  i i | ƒ } |  i i | ƒ } | i
 ƒ  } | i d ƒ |  i d | i ƒ  j d ƒ | i d d ƒ |  i d | i ƒ  j d ƒ | i d d	 ƒ |  i d
 | i ƒ  j d ƒ | i d
 d	 ƒ |  i d | i ƒ  j d ƒ | i
 d ƒ } |  i | | d d !j d ƒ | i d d ƒ |  i | i | i ƒ  j d ƒ |  i | i
 ƒ  d j d ƒ | i | i d ƒ |  i d | i ƒ  j d ƒ | i d ƒ | i ƒ  } | i d ƒ | i ƒ  } |  i | | j d ƒ | i ƒ  n d S(   sA   Test seek() method of _FileObject, incl. random reading.
        R,   s	   0-REGTYPEt   rbi    s   seek() to file's start failedi   s"   seek() to absolute position failedi üÿÿi   i   s+   seek() to negative relative position faileds+   seek() to positive relative position failedi
   i
  s   read() after seek failedi   s   seek() to file's end failedR   s0   read() at file's end did not return empty strings&   relative seek() to file's start failedi   s   readlines() after seek failedN(   R   R   R1   R   R2   R   R3   R   R   R	   R(   t   datat	   getmemberR"   R$   t   fobjt   textt   seekR&   t   tellt   sR)   R4   t   s1t   s2R   (	   R   RA   R9   R1   R;   R?   R<   R@   R"   (    (    R   t	   test_seek^   sL     'c         C   s¯   t  ƒ  } t i d ƒ } t i | _ t | d ƒ } | i	 | i
 ƒ  ƒ | i ƒ  t i | ƒ } | i ƒ  d } | i ƒ  |  i | i t i j ƒ |  i | i i d ƒ ƒ d S(   s6   Test old style dirtype member (bug #1336623).
        s
   directory/t   wi    t   /N(   R   R1   R   t   TarInfoR"   t   REGTYPEt   typeR3   R;   t   writet   tobufR   R   R   t
   getmembersR   R&   t   DIRTYPEt   namet   endswith(   R   R   R;   R1   R"   (    (    R   t   test_old_dirtype‰   s     	

(   R   R   R+   R/   R7   RB   RN   (    (    (    R   R    8   s
   					+t   ReadStreamTestc           B   s    t  Z d Z d „  Z d „  Z RS(   NR,   c         C   sL   t  i |  ƒ |  i i ƒ  d } |  i i | ƒ } |  i t	 i
 | i ƒ d S(   sW   Test member extraction, and for StreamError when
           seeking backwards.
        i    N(   R    R+   R   R   RJ   R"   R$   R%   t   assertRaisesR   t   StreamErrorR(   (   R   R"   R%   (    (    R   R+   ¤   s
     c         C   s  |  i } t i t ƒ  d ƒ } xé | i ƒ  } | i ƒ  } | d j o Pn |  i
 | d j	 d ƒ | i ƒ  p | i ƒ  o  |  i t i | i | ƒ q! n | i | ƒ } | i | ƒ } | d j o q! n |  i
 | d j	 d ƒ |  i
 | i ƒ  | i ƒ  j d ƒ q! W| i ƒ  d S(   s3   Compare the normal tar and the stream tar.
        R   i   s   stream.next() failed.s   stream.extractfile() faileds   stream extraction failedN(   R   R   t   streamR   R   R   t   nextt   t1t   t2t   NoneR&   t   islnkt   issymRP   RQ   R$   t   v1t   v2R(   R   (   R   RR   R   RU   RT   RY   RZ   (    (    R   t   test_stream­   s(     	  '(   R   R   R   R+   R[   (    (    (    R   RO   ¡   s   		t	   WriteTestc           B   sD   t  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   NRC   c         C   s]   |  i |  i |  i } t i t |  i ƒ d ƒ |  _ t ƒ  |  _	 t i |  i	 | ƒ |  _
 d  S(   NR   (   R   R   R   R   R   R   R   t   srcR   t   dstnamet   dst(   R   R   (    (    R   R   É   s    c         C   s   |  i i ƒ  |  i i ƒ  d  S(   N(   R   R]   R   R_   (   R   (    (    R   R   Ï   s    c         C   s   d |  i _ |  i ƒ  d  S(   Ni   (   R   R_   t   posixt   _test(   R   (    (    R   t
   test_posixÓ   s    c         C   s   d |  i _ |  i ƒ  d  S(   Ni    (   R   R_   R`   Ra   (   R   (    (    R   t   test_nonposix×   s    c         C   s[   |  i i t i i t i i t ƒ d ƒ ƒ |  i i ƒ  |  i	 t i
 |  i ƒ i d ƒ d  S(   Ns   cfgparser.1i    (   R   R_   t   addR   R   R	   R   t   __file__R   t   assertNotEqualt   statR^   t   st_size(   R   (    (    R   t
   test_smallÛ   s    +c         C   s—   x |  i D]… } | i ƒ  p q
 n |  i i | ƒ } |  i i o9 t | i	 ƒ t
 i j o  |  i t |  i i | | ƒ q
 |  i i | | ƒ q
 Wd  S(   N(   R   R]   R"   R#   R$   R%   R_   R`   R'   RL   R   t   LENGTH_NAMERP   t
   ValueErrort   addfile(   R   R%   R"   (    (    R   Ra   à   s    
 &(	   R   R   R   R   R   Rb   Rc   Ri   Ra   (    (    (    R   R\   Æ   s   					t   WriteSize0Testc           B   s;   t  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   NRC   c         C   s4   t  ƒ  |  _ t ƒ  |  _ t i |  i d ƒ |  _ d  S(   NRC   (   R   R   t   tmpdirR   R^   R   R   R_   (   R   (    (    R   R   î   s    c         C   s   |  i i ƒ  d  S(   N(   R   R_   R   (   R   (    (    R   R   ó   s    c         C   s‰   t  i i |  i d ƒ } t | d ƒ |  i i | ƒ } |  i	 | i
 d ƒ t | d ƒ i d ƒ |  i i | ƒ } |  i	 | i
 d ƒ d  S(   NR3   RC   i    t   aaai   (   R   R   R	   R   Rn   R3   R_   t
   gettarinfoR"   t   assertEqualR)   RH   (   R   R   R"   (    (    R   t	   test_fileö   s    c         C   sN   t  i i |  i d ƒ } t  i | ƒ |  i i | ƒ } |  i	 | i
 d ƒ d  S(   Nt	   directoryi    (   R   R   R	   R   Rn   R   R_   Rp   R"   Rq   R)   (   R   R   R"   (    (    R   t   test_directoryÿ   s    c         C   se   t  t d ƒ oQ t i i |  i d ƒ } t i d | ƒ |  i i | ƒ } |  i
 | i d ƒ n d  S(   Nt   symlinkt   link_targeti    (   t   hasattrR   R   R	   R   Rn   Ru   R_   Rp   R"   Rq   R)   (   R   R   R"   (    (    R   t   test_symlink  s
    (   R   R   R   R   R   Rr   Rt   Rx   (    (    (    R   Rm   ë   s   					t   WriteStreamTestc           B   s   t  Z d Z RS(   NR,   (   R   R   R   (    (    (    R   Ry     s   t   WriteGNULongTestc           B   s’   t  Z d  Z d „  Z d „  Z d „  Z e d „ Z e d „ Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z RS(   sG  This testcase checks for correct creation of GNU Longname
       and Longlink extensions.

       It creates a tarfile and adds empty members with either
       long names, long linknames or both and compares the size
       of the tarfile with the expected size.

       It checks for SF bug #812325 in TarFile._create_gnulong().

       While I was writing this testcase, I noticed a second bug
       in the same method:
       Long{names,links} weren't null-terminated which lead to
       bad tarfiles when their length was a multiple of 512. This
       is tested as well.
    c         C   s(   t  i t ƒ  d ƒ |  _ t |  i _ d  S(   NRC   (   R   R   R   R   R   t   FalseR`   (   R   (    (    R   R   !  s    c         C   s   |  i i ƒ  d  S(   N(   R   R   R   (   R   (    (    R   R   %  s    c         C   s<   t  t | ƒ d d ƒ \ } } | o | d 7} n | d S(   Ni   i   (   t   divmodR'   R?   t   blockst	   remainder(   R   R?   R}   R~   (    (    R   t   _length(  s    c         C   s…   d } t | ƒ t i j o! | d 7} | |  i | ƒ 7} n | d  j	 o7 t | ƒ t i	 j o! | d 7} | |  i | ƒ 7} n | S(   Ni   (
   t   countR'   RL   R   Rj   R   R   t   linkRV   t   LENGTH_LINK(   R   RL   R   R€   (    (    R   t
   _calc_size.  s    
#
c         C   st   t  i | ƒ } | o | | _ t  i | _ n |  i	 i
 | ƒ |  i | | ƒ } |  i	 i } |  i | | d ƒ d  S(   Ns%   GNU longname/longlink creation failed(   R   RE   RL   R"   R   t   linknamet   LNKTYPERG   R   R   Rl   Rƒ   RY   t   offsetRZ   Rq   (   R   RL   R   RY   RZ   R"   (    (    R   Ra   >  s    	c         C   s   |  i d d d ƒ d  S(   Ns   longnam/i   t   longnam(   R   Ra   (   R   (    (    R   t   test_longname_1023J  s    c         C   s   |  i d d d ƒ d  S(   Ns   longnam/i   t   longname(   R   Ra   (   R   (    (    R   t   test_longname_1024M  s    c         C   s   |  i d d d ƒ d  S(   Ns   longnam/i   t	   longname_(   R   Ra   (   R   (    (    R   t   test_longname_1025P  s    c         C   s   |  i d d d d ƒ d  S(   NRL   s   longlnk/i   t   longlnk(   R   Ra   (   R   (    (    R   t   test_longlink_1023S  s    c         C   s   |  i d d d d ƒ d  S(   NRL   s   longlnk/i   t   longlink(   R   Ra   (   R   (    (    R   t   test_longlink_1024V  s    c         C   s   |  i d d d d ƒ d  S(   NRL   s   longlnk/i   t	   longlink_(   R   Ra   (   R   (    (    R   t   test_longlink_1025Y  s    c         C   s$   |  i d d d d d d ƒ d  S(   Ns   longnam/i   R‡   s   longlnk/R   (   R   Ra   (   R   (    (    R   t   test_longnamelink_1023\  s    c         C   s$   |  i d d d d d d ƒ d  S(   Ns   longnam/i   R‰   s   longlnk/R   (   R   Ra   (   R   (    (    R   t   test_longnamelink_1024`  s    c         C   s$   |  i d d d d d d ƒ d  S(   Ns   longnam/i   R‹   s   longlnk/R‘   (   R   Ra   (   R   (    (    R   t   test_longnamelink_1025d  s    (   R   R   t   __doc__R   R   R   RV   Rƒ   Ra   Rˆ   RŠ   RŒ   RŽ   R   R’   R“   R”   R•   (    (    (    R   Rz     s    											t   ExtractHardlinkTestc           B   s   t  Z d „  Z RS(   Nc         C   s…   d |  i _ |  i i d t ƒ  ƒ y |  i i d t ƒ  ƒ WnB t j
 o6 } d k } | i | i j o |  i	 d ƒ q n Xd S(   s/   Test hardlink extraction (bug #857297)
        i   s	   0-REGTYPEs	   1-LNKTYPENs   hardlink not extracted properly(
   R   R   t
   errorlevelR2   R   t   EnvironmentErrort   et   errnot   ENOENTt   fail(   R   R›   Rš   (    (    R   t   test_hardlinkj  s     	(   R   R   Rž   (    (    (    R   R—   h  s   t   CreateHardlinkTestc           B   s2   t  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   sé   Test the creation of LNKTYPE (hardlink) members in an archive.
       In this respect tarfile.py mimics the behaviour of GNU tar: If
       a file has a st_nlink > 1, it will be added a REGTYPE member
       only the first time.
    c         C   sÒ   t  i t ƒ  d ƒ |  _ t i i t ƒ  d ƒ |  _	 t i i t ƒ  d ƒ |  _
 t i i |  i	 ƒ o t i |  i	 ƒ n t i i |  i
 ƒ o t i |  i
 ƒ n t |  i	 d ƒ i d ƒ |  i i |  i	 ƒ d  S(   NRC   t   foot   bar(   R   R   R   R   R   R   R   R	   R   R    R¡   R   t   removeR3   RH   Rd   (   R   (    (    R   R   €  s    c         C   s2   |  i i |  i ƒ } |  i | i t i d ƒ d  S(   Ns   add file as regular failed(	   R   R   Rp   R    R"   Rq   RG   R   RF   (   R   R"   (    (    R   t   test_add_twiceŽ  s    c         C   sv   t  i |  i |  i ƒ |  i i |  i ƒ } |  i | i	 t
 i d ƒ |  i i |  i ƒ } |  i | i	 t
 i d ƒ d  S(   Ns   add file as hardlink failed(   R   R   R   R    R¡   R   Rp   R"   Rq   RG   R   R…   (   R   R"   (    (    R   t   test_add_hardlink•  s    c         C   sT   t  |  i _ t i |  i |  i ƒ |  i i |  i ƒ } |  i
 | i t i d ƒ d  S(   Ns   dereferencing hardlink failed(   t   TrueR   R   t   dereferenceR   R   R    R¡   Rp   R"   Rq   RG   R   RF   (   R   R"   (    (    R   t   test_dereference_hardlink¡  s
    (   R   R   R–   R   R£   R¤   R§   (    (    (    R   RŸ   y  s
    			t   ReadTestGzipc           B   s   t  Z d Z RS(   Nt   gz(   R   R   R   (    (    (    R   R¨   ª  s   t   ReadStreamTestGzipc           B   s   t  Z d Z RS(   NR©   (   R   R   R   (    (    (    R   Rª   ¬  s   t   WriteTestGzipc           B   s   t  Z d Z RS(   NR©   (   R   R   R   (    (    (    R   R«   ®  s   t   WriteStreamTestGzipc           B   s   t  Z d Z RS(   NR©   (   R   R   R   (    (    (    R   R¬   °  s   t   FileModeTestc           B   s   t  Z d „  Z RS(   Nc         C   s6   |  i t i d ƒ d ƒ |  i t i d ƒ d ƒ d  S(   Nií  s
   -rwxr-xr-xiI  s
   ---s--s--t(   R   Rq   R   t   filemode(   R   (    (    R   t
   test_modes¶  s    (   R   R   R¯   (    (    (    R   R­   µ  s   t   ReadTestBzip2c           B   s   t  Z d Z RS(   Nt   bz2(   R   R   R   (    (    (    R   R°   ½  s   t   ReadStreamTestBzip2c           B   s   t  Z d Z RS(   NR±   (   R   R   R   (    (    (    R   R²   ¿  s   t   WriteTestBzip2c           B   s   t  Z d Z RS(   NR±   (   R   R   R   (    (    (    R   R³   Á  s   t   WriteStreamTestBzip2c           B   s   t  Z d Z RS(   NR±   (   R   R   R   (    (    (    R   R´   Ã  s   c          C   s²  t  o5 t  i t d ƒ d ƒ i t t ƒ  d ƒ i ƒ  ƒ n t o5 t i t d ƒ d ƒ i t t ƒ  d ƒ i ƒ  ƒ n t t	 t
 t t t t g }  t t d ƒ o |  i t ƒ |  i t ƒ n t  o |  i t t t t g ƒ n t o |  i t t t t g ƒ n z t i |  Œ  Wd  t  o t i  t d ƒ ƒ n t o t i  t d ƒ ƒ n t i! i" t# ƒ  ƒ o t$ i% t# ƒ  ƒ n t i! i" t& ƒ  ƒ o t i  t& ƒ  ƒ n Xd  S(   NR©   t   wbR8   R±   R   ('   t   gzipR   R   RH   R3   R(   R±   t   BZ2FileR­   R    RO   R\   Rm   Ry   Rz   t   testsRw   R   t   appendR—   RŸ   t   extendR¨   Rª   R«   R¬   R°   R²   R³   R´   R    t   run_unittestR¢   R   R   R   t   shutilt   rmtreeR   (   R¸   (    (    R   t	   test_mainÍ  s.    55
 t   __main__(/   t   sysR   R¼   t   tempfilet   unittestR   R+   R    R¶   t   GzipFilet   ImportErrort   AttributeErrorRV   R±   R   R   R	   t
   gettempdirR   R
   t   TESTFNR   R*   R   R   R   t   TestCaseR   R    RO   R\   Rm   Ry   Rz   R—   RŸ   R¨   Rª   R«   R¬   R­   R°   R²   R³   R´   R¾   R   ($   R    R­   R³   RÂ   R*   R   R¼   Rz   R¨   R   R±   RÁ   R´   R¬   R   RŸ   R   R«   R¾   R
   R²   R—   Rª   R   RÀ   Rm   R   R    R   R°   R\   Ry   R   RO   R¶   R   (    (    R   t   ?   sd   								&			i%%"X1	-