ó
ˆ5„Oc           @   su   d  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 e j f d „  ƒ  YZ e j	 ƒ  d S(   s   Test crash-diggeriÿÿÿÿNt   Tc           B   sY   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   c         C   s^  t  j ƒ  |  _ t j j |  j d ƒ } t | d ƒ j d t j j |  j d ƒ ƒ t j j |  j d ƒ |  _ t j	 |  j ƒ t j	 t j j |  j d ƒ ƒ t j	 t j j |  j d ƒ ƒ t j j |  j d ƒ |  _
 t j j |  j d	 ƒ |  _ t |  j d ƒ j d
 |  j
 ƒ t j |  j d ƒ t j j |  j d ƒ |  _ | t j d <d t j d <d S(   s9   Set up dummy config dir, crashdb.conf, and apport-retraces   crashdb.conft   ws‚   default = 'memory'
databases = { 'memory': {
    'impl': 'memory', 'distro': 'Testux', 'dummy_data': '1',
    'dupdb_url': '%s'}
}t   dupdbt   configs
   Testux 1.0s
   Testux 2.2s   apport-retrace.logs   apport-retraces   #!/bin/sh
echo "$@" >> %sií  t   lockt   APPORT_CRASHDB_CONFt   .t
   PYTHONPATHN(   t   tempfilet   mkdtempt   workdirt   ost   patht   joint   opent   writet
   config_dirt   mkdirt   apport_retrace_logt   apport_retracet   chmodt	   lock_filet   environ(   t   selft   crashdb_conf(    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyt   setUp   s     c         C   s   t  j |  j ƒ d  S(   N(   t   shutilt   rmtreeR
   (   R   (    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyt   tearDown-   s    c         C   sM   t  j d d |  j g | d t  j d t  j ƒ} | j ƒ  \ } } | | f S(   sY   Call crash-digger with given arguments.

        Return a pair (stdout, stderr).
        s   crash-diggers   --apport-retracet   stdoutt   stderr(   t
   subprocesst   PopenR   t   PIPEt   communicate(   R   t   argst   st   outt   err(    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyt   call0   s
    c      	   C   s²  |  j  d |  j d d d t j j |  j d ƒ d |  j g ƒ \ } } |  j | d d | ƒ |  j d	 | k ƒ |  j d
 | k ƒ |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ |  j	 d | k ƒ |  j	 d | k d ƒ |  j	 d | k d ƒ t
 |  j ƒ j ƒ  } |  j t | j ƒ  ƒ d ƒ |  j	 d | k ƒ |  j d | k ƒ |  j d | k ƒ |  j	 t j j |  j ƒ ƒ |  j	 t j j t j j |  j d d ƒ ƒ ƒ d S(   s   Crash retracings   -cs   -as	   /dev/zeros   -ds   dup.dbs   -vlt    s   no error messages:
s0   Available releases: ['Testux 1.0', 'Testux 2.2']s   retracing #0s   retracing #1s   retracing #2sE   crash is release FooLinux Pi/2 which does not have a config availables   failed with statuss   #3s!   dupcheck crashes are not retraceds   #4i   s   dup.db -v 0
s   dup.db -v 1
s   dup.db -v 2
R   t   sigN(   R'   R   R   R   R   R
   R   t   assertEqualt
   assertTruet   assertFalseR   R   t   readt   lent
   splitlinest   existst   isdir(   R   R%   R&   t   retrace_log(    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyt   test_crashes;   s$    -c      	   C   s  t  j |  j |  j d ƒ t |  j d ƒ j d |  j ƒ t  j |  j d ƒ |  j d |  j d d d t  j	 j
 |  j d	 ƒ d
 |  j g ƒ \ } } |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ |  j d | k d ƒ |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ |  j d | k d ƒ |  j d | k d ƒ t |  j ƒ j ƒ  } |  j t | j ƒ  ƒ d ƒ |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ |  j t  j	 j |  j ƒ ƒ t  j |  j d |  j ƒ |  j d |  j d d d t  j	 j
 |  j d	 ƒ d
 |  j g ƒ \ } } |  j | d ƒ |  j | d ƒ t  j |  j ƒ |  j d |  j d d d t  j	 j
 |  j d	 ƒ d
 |  j g ƒ \ } } |  j d | k ƒ |  j | d d | ƒ |  j t  j	 j |  j ƒ ƒ d S(   s1   Crash retracing if apport-retrace fails on bug #1s   .bakR   s…   #!/bin/sh
echo "$@" >> %s
while [ -n "$2" ]; do shift; done
if [ "$1" = 1 ]; then
    echo "cannot frobnicate bug" >&2
    exit 1
fi
ií  s   -cs   -as	   /dev/zeros   -ds   dup.dbs   -vlt	   Tracebacks    SystemError: retracing #1 faileds0   Available releases: ['Testux 1.0', 'Testux 2.2']s   retracing #0s   retracing #1s   retracing #2s    should not continue after errorssE   crash is release FooLinux Pi/2 which does not have a config availables   #0 failed with statuss   #1 failed with status: 1s   #3s!   dupcheck crashes are not retraceds   #4i   s   dup.db -v 0
s   dup.db -v 1
s   dup.db -v 2
R(   s   no error messages:
N(   R   t   renameR   R   R   R   R   R'   R   R   R   R
   R   R+   R,   R-   R*   R.   R/   R0   t   unlink(   R   R%   R&   R2   (    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyt   test_crashes_errorS   sD    ---c      	   C   sO  t  j |  j |  j d ƒ t |  j d ƒ j d |  j ƒ t  j |  j d ƒ |  j d |  j d d d t  j	 j
 |  j d	 ƒ d
 |  j g ƒ \ } } |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ |  j d | k d ƒ |  j d | k ƒ t |  j ƒ j ƒ  } |  j d | k ƒ |  j d | k ƒ |  j t  j	 j |  j ƒ ƒ d S(   s;   Crash retracing if apport-retrace reports a transient errors   .bakR   s‹   #!/bin/sh
echo "$@" >> %s
while [ -n "$2" ]; do shift; done
if [ "$1" = 1 ]; then
    echo "cannot frobnicate crash db" >&2
    exit 99
fi
ií  s   -cs   -as	   /dev/zeros   -ds   dup.dbs   -vls0   Available releases: ['Testux 1.0', 'Testux 2.2']s   retracing #0s   retracing #1s   retracing #2s    should not continue after errorss!   transient error reported; haltings   dup.db -v 1
s   dup.db -v 2
N(   R   R5   R   R   R   R   R   R'   R   R   R   R
   R   R+   R,   R-   R0   (   R   R%   R&   R2   (    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyt   test_crashes_transient_error‰   s    -c         C   sô   |  j  d d d t j j |  j d ƒ d |  j g ƒ \ } } |  j | d d | ƒ |  j d | k d	 ƒ |  j d
 | k d	 ƒ |  j d | k ƒ |  j d | k ƒ |  j d | k ƒ |  j t j j	 |  j
 ƒ ƒ |  j t j j	 |  j ƒ ƒ d S(   s   Duplicate checkings   -as	   /dev/zeros   -ds   dup.dbs   -vDlR(   s   no error messages:
s   #1s   signal crashes are not retraceds   #2s   checking #3 for duplicates   checking #4 for duplicates+   Report is a duplicate of #3 (not fixed yet)N(   R'   R   R   R   R
   R   R*   R,   R+   R0   R   (   R   R%   R&   (    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyt   test_dupcheck§   s    -c      	   C   sŒ   t  |  j d ƒ j d ƒ |  j d |  j d d d t j j |  j d ƒ d |  j	 g ƒ \ } } |  j
 | d	 d
 | ƒ |  j d | k ƒ d S(   s/   apport-retrace's stderr is redirected to stdoutR   s%   #!/bin/sh
echo ApportRetraceError >&2s   -cs   -as	   /dev/zeros   -ds   dup.dbs   -vlR(   s   no error messages:
t   ApportRetraceErrorN(   R   R   R   R'   R   R   R   R   R
   R   R*   R+   (   R   R%   R&   (    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyt   test_stderr_redirectionµ   s    -c         C   s¹   |  j  d |  j d d d t j j |  j d ƒ d |  j d t j j |  j d ƒ g
 ƒ \ } } |  j | d	 d
 | ƒ |  j d | k ƒ |  j t j j	 t j j |  j d d ƒ ƒ ƒ d S(   s   Duplicate database publishings   -cs   -as	   /dev/zeros   -ds   dup.dbs   -vls   --publish-dbR   R(   s   no error messages:
s   retracing #0R)   N(
   R'   R   R   R   R   R
   R   R*   R+   R1   (   R   R%   R&   (    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyt   test_publish_db¿   s    '(   t   __name__t
   __module__R   R   R'   R3   R7   R8   R9   R;   R<   (    (    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyR       s   					6			
(
   t   __doc__t   unittestR   R   R   R   t   os.patht   TestCaseR    t   main(    (    (    s0   /usr/share/apport/testsuite/test_crash_digger.pyt   <module>   s   H»