ó
qxPXc           @   sÎ   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 y d  d l	 m
 Z
 Wn! e k
 r— d  d l m
 Z
 n Xd e  j f d „  ƒ  YZ e d k rÊ e  j ƒ  n  d S(   iÿÿÿÿN(   t   StringIOt   Tc           B   s’   e  Z d  „  Z d „  Z e d „ Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s4   t  j j |  _ t j ƒ  t  j _ t  j j |  _ d  S(   N(   t   apportt	   fileutilst
   report_dirt   orig_report_dirt   tempfilet   mkdtempt   _config_filet   orig_config_file(   t   self(    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   setUp   s    c         C   s>   t  j t j j ƒ |  j t j _ d  |  _ |  j t j _ d  S(   N(	   t   shutilt   rmtreeR   R   R   R   t   NoneR	   R   (   R
   (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   tearDown   s    	c         C   s  t  j j t j j d ƒ } t  j j t j j d ƒ } t | d ƒ  } | j d ƒ Wd QXt | d ƒ  } | j d ƒ Wd QXt  j | d ƒ t  j | d ƒ | rt  j j t j j d ƒ } t | d ƒ  } | j d	 ƒ Wd QXt  j | d
 ƒ | | | g S| | g Sd S(   s   Create some test reportss
   rep1.crashs
   rep2.crasht   ws   report 1Ns   report 2i€  s   inaccessible.crasht   inaccessiblei    (	   t   ost   patht   joinR   R   R   t   opent   writet   chmod(   R
   t   create_inaccessiblet   r1t   r2t   fdt   ri(    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   _create_reports   s    c         C   sç  d } t  g  t j j | ƒ D] } | j d ƒ r | ^ q ƒ d k sL t ‚ d	 } d	 } xÏ t j d ƒ D]¾ } | j d ƒ sƒ qh n  t j j	 t j
 j d | ƒ ƒ } t  g  t j j | ƒ D] } | j d ƒ rº | ^ qº ƒ } | rú | d k rú | } n | r| d k r| } n  | rh | rh Pqh qh W| rV|  j t j j | ƒ d	 d | ƒ n  | r‚|  j t j j | ƒ d	 d | ƒ n  | rãt j j | ƒ } |  j | d	 d | ƒ |  j t j
 j | ƒ ƒ |  j | j d ƒ ƒ n  d	 S(
   s   find_package_desktopfile()t   bashs   .desktopi    s   /usr/share/applications/i   s   no-desktop package %ss   multi-desktop package %ss   one-desktop package %sN(   t   lenR   t	   packagingt	   get_filest   endswitht   AssertionErrorR   R   t   listdirt   get_file_packageR   R   t   assertEqualR   t   find_package_desktopfilet   assertNotEqualt
   assertTruet   exists(   R
   t	   nodesktopt   ft
   onedesktopt   multidesktopt   dt   pkgt   num(    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_find_package_desktopfile-   s6    *			&&c         C   s¬   |  j  t j j d ƒ t ƒ |  j  t j j d ƒ t ƒ |  j  t j j d ƒ t ƒ |  j  t j j d ƒ t ƒ |  j  t j j d ƒ t ƒ |  j  t j j d ƒ t ƒ d S(   s   likely_packaged()s	   /bin/bashs   /usr/bin/foos   /usr/local/bin/foos   /home/test/bin/foos   /tmp/foos   /var/lib/fooN(   R&   R   R   t   likely_packagedt   Truet   False(   R
   (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_likely_packagedQ   s    c         C   sX   |  j  t j j d ƒ d ƒ |  j  t j j d ƒ d ƒ |  j  t j j d ƒ d ƒ d S(   s   find_file_package()s	   /bin/bashR   s   /bin/catt	   coreutilss   /nonexistingN(   R&   R   R   t   find_file_packageR   (   R
   (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_find_file_package\   s    c         C   s%  |  j  t j j ƒ  g  ƒ t j ƒ  d k r= |  j t ƒ } n. g  |  j t ƒ D] } d | k rM | ^ qM } |  j  t t j j ƒ  ƒ t | ƒ ƒ t | ƒ } x‚ | D]z } |  j  t j j	 | ƒ t
 ƒ | j | ƒ t j j | ƒ |  j  t j j	 | ƒ t ƒ |  j  t t j j ƒ  ƒ | ƒ q£ Wd S(   s#   get_new_reports() and seen_report()i    R   N(   R&   R   R   t   get_new_reportsR   t   getuidR   R4   t   sett   seen_reportR5   t   removet   mark_report_seen(   R
   t   trt   rt   nr(    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt	   test_seenc   s    .%c         C   sø   t  j j t j j d ƒ } t | d ƒ  Wd QXt  j j t j j d ƒ } t | d ƒ  Wd QXt j d ƒ t  j j t j j d ƒ } t | d ƒ  Wd QXt j d ƒ t j j	 | ƒ t  j
 | ƒ } t  j
 | ƒ } |  j | j | j k ƒ d S(   s5   mark_report_upload() for a previously uploaded reports   report.uploadR   Ns   report.uploadedi   s   report.crash(   R   R   R   R   R   R   R   t   timet   sleept   mark_report_uploadt   statR)   t   st_mtime(   R
   t   uploadt   uploadedt   reportt	   upload_stt	   report_st(    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_mark_2nd_report_uploadv   s    c         C   sÚ   |  j  t j j ƒ  g  ƒ t j ƒ  d k r= |  j t ƒ } n. g  |  j t ƒ D] } d | k rM | ^ qM } |  j  t t j j ƒ  ƒ t | ƒ ƒ x | D] } t j j	 | ƒ q— W|  j  t t j j ƒ  ƒ t | ƒ ƒ d S(   s   get_all_reports()i    R   N(
   R&   R   R   t   get_all_reportsR   R;   R   R4   R<   R?   (   R
   R@   RA   (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_get_all_reportsˆ   s    .%c         C   s‡  |  j  t j j ƒ  g  ƒ |  j  t j j ƒ  g  ƒ t j ƒ  d k r|  j t ƒ } |  j  t	 t j j ƒ  ƒ t	 | ƒ ƒ |  j  t	 t j j
 ƒ  ƒ t	 | ƒ ƒ x | D] } t j j | ƒ q¤ W|  j  t	 t j j ƒ  ƒ t	 | ƒ ƒ |  j  t	 t j j
 ƒ  ƒ t	 g  ƒ ƒ nx g  |  j t ƒ D] } d | k r| ^ q} |  j  t	 t j j ƒ  ƒ t	 g  ƒ ƒ |  j  t	 t j j
 ƒ  ƒ t	 g  ƒ ƒ d S(   s5   get_all_system_reports() and get_new_system_reports()i    R   N(   R&   R   R   RO   t   get_all_system_reportsR   R;   R   R4   R<   t   get_new_system_reportsR?   (   R
   R@   RA   (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_get_system_reports˜   s    %%%(.%c         C   sX   |  j  ƒ  } xE | rS |  j t t j j ƒ  ƒ t | ƒ ƒ t j j | j ƒ  ƒ q Wd S(   s   delete_report()N(   R   R&   R<   R   R   RO   t   delete_reportt   pop(   R
   R@   (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_delete_report­   s    	%c         C   s  t  d ƒ } |  j t j j | ƒ d ƒ t  d ƒ } |  j t j j | ƒ d ƒ t  d ƒ } |  j t j j | ƒ d ƒ t  d t j t j t j ƒ  ƒ d
 ƒ ƒ } |  j t j j | ƒ d ƒ t  d t j t j t j ƒ  ƒ d ƒ ƒ } |  j t j j | ƒ d ƒ d	 S(   s   get_recent_crashes()s   ProblemType: Crashi    s1   ProblemType: Crash
Date: Wed Aug 01 00:00:01 1990sA   ProblemType: Crash
Date: Wed Aug 01 00:00:01 1990
CrashCounter: 3s+   ProblemType: Crash
Date: %s
CrashCounter: 3i   i  i   Ni_ (	   R    R&   R   R   t   get_recent_crashesRD   t   ctimet   mktimet	   localtime(   R
   RA   (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_get_recent_crashes¶   s    		))c      	   C   s†  t  j ƒ  } |  j t t j j | ƒ d | d <t j j | ƒ e } t j j	 t j j
 t j t j j
 ƒ d ƒ } |  j | j d t j j
 ƒ | ƒ t j | ƒ Wd QXd | d <t j j | ƒ X } t j j	 t j j
 t j t j j
 ƒ d ƒ } |  j | j d t j j
 ƒ | ƒ Wd QX|  j t t j j | ƒ t j | ƒ t j t j j	 t j j
 d	 ƒ | ƒ |  j t t j j | ƒ d S(
   s   make_report_file()s   bash 1t   Packagei    s   %s/bashNs	   /bin/basht   ExecutablePaths   %s/_bin_basht   pwned(   t   problem_reportt   ProblemReportt   assertRaisest
   ValueErrorR   R   t   make_report_fileR   R   R   R   R$   R)   t
   startswitht   unlinkt   OSErrort   symlink(   R
   t   prR,   R   (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_make_report_fileÓ   s    
.#
.)%c         C   sÑ  t  j j t j j d ƒ } t  j j t j j d ƒ } t  j j t j j d ƒ } t | d ƒ  } | j d ƒ Wd QXt | d ƒ  } | j d ƒ Wd QXt | d ƒ " } | j d | d	 | f ƒ Wd QX|  j t j j	 | ƒ g  d
 ƒ t | d ƒ  } | j d ƒ Wd QX|  j t j j	 | ƒ | d	 g d ƒ t | d ƒ  } | j d ƒ Wd QX|  j t j j	 | ƒ | d	 | g d ƒ t | d ƒ  } | j d ƒ Wd QX|  j t j j	 | ƒ | g d ƒ d S(   s   check_files_md5()s
   test 1.txts
   test:2.txts   sums.txtR   s
   Some stuffNs
   More stuffsJ   2e41290da2fa3f68bd3313174467e3b5  %s
f6423dfbc4faf022e58b4d3f5ff71a70  %s
i   s   correct md5sumss   Some stuff!s   file 1 wrongs   More stuff!s   files 1 and 2 wrongs   file 2 wrong(
   R   R   R   R   R   R   R   R   R&   t   check_files_md5(   R
   t   f1t   f2t   sumfileR   (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_check_files_md5ì   s(    &)c         C   s»  d t  j _ |  j t  j j d d ƒ d ƒ |  j t  j j d d d ƒ d ƒ d t  j j _ t j ƒ  } | j	 t  j _ |  j t  j j d d ƒ d ƒ |  j t  j j d d d ƒ d ƒ d t  j j _ | j
 d ƒ | j ƒ  |  j t  j j d d ƒ d ƒ |  j t  j j d d d ƒ d ƒ |  j t  j j d d ƒ d ƒ |  j t  j j d d d d ƒd ƒ |  j t  j j d d	 ƒ d
 ƒ |  j t  j j d d d t ƒt ƒ |  j t  j j d d d t ƒt ƒ |  j t  j j d d d t ƒd ƒ |  j t  j j d d d t d t ƒt ƒ |  j t  j j d d ƒ d ƒ |  j t  j j d d	 ƒ d ƒ |  j t  j j d d d ƒ d ƒ |  j t  j j d d d ƒ d ƒ d t  j j _ | j ƒ  d S(   s   get_config()s   /nonexistingt   maint   foot   moos:   [main]
one=1
two = TWO
b1 = 1
b2=False
[spethial]
one= 99
t   onet   1t   defaultt   twot   TWOt   b1t   boolt   b2t   b3t   spethialt   99t   nopeN(   R   R   R   R&   t
   get_configR   t   configR   t   NamedTemporaryFilet   nameR   t   flushR4   R5   t   close(   R
   R,   (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   test_get_config  s4    ""
"%%%%+""(   t   __name__t
   __module__R   R   R5   R   R2   R6   R9   RC   RN   RP   RS   RV   R[   Ri   Rn   R„   (    (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyR      s   			$											t   __main__(   t   unittestR   R   R   RD   R_   t   apport.fileutilsR   t   apport.packagingt	   cStringIOR    t   ImportErrort   iot   TestCaseR   R…   Ro   (    (    (    s-   /usr/share/apport/testsuite/test_fileutils.pyt   <module>   s   <ÿ  