Your IP : 172.28.240.42


Current Path : /usr/share/apport/testsuite/
Upload File :
Current File : //usr/share/apport/testsuite/test_crashdb.pyc


5Oc@sddlZddlZddlZddlZddlZddlZddlmZdej	fdYZ
edkrejndS(iN(t
CrashDatabasetTcBseZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZdZdZdZdZdZdZdZdZRS(cCstj|_tjj|jd|_tdidd6|jd6|_	|j
|j	j|j	jddd|j	jdj
std|j
|j	jdj
|j	jd	j
|j
|j	jd	dS(
Ntdupdbt1t
dummy_datat	dupdb_urlishttp://foo.bugs.example.com/0is2test-suite internal check: Python crash sigs existi(ttempfiletmkdtemptworkdirtostpathtjoint	dupdb_dirRtNonetcrashestassertEqualtget_comment_urltdownloadtcrash_signaturetAssertionErrort	latest_id(tself((s+/usr/share/apport/testsuite/test_crashdb.pytsetUps
	cCstj|jdS(N(tshutiltrmtreeR(R((s+/usr/share/apport/testsuite/test_crashdb.pyttearDownscCsHtdi|_|j|jjd|jt|jjddS(s!No dummy data is added by defaultiiN(RR
RRRtassertRaisest
IndexErrorR(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_no_dummy_datascCsQ|j|jjtdddg|j|jjtddgdS(s+Bookkeeping in retraced and dupchecked bugsiiiiiN(RRtget_unretracedtsettget_dup_unchecked(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_retrace_markers%s(cCstj}|jd|jtjjdd|j}|j	|j
ddtjjdd|j}|jd|j
k|j	|j
dddS(	sDynamic code in crashdb.confs&default = 'testsuite'

def get_dyn():
    return str(2 + 2)

def get_dyn_name():
    return 'on_the' + 'fly'

databases = {
    'testsuite': {
        'impl': 'memory',
        'dyn_option': get_dyn(),
    },
    get_dyn_name(): {
        'impl': 'memory',
        'whoami': 'dynname',
    }
}
t
dyn_optiont4t	on_theflyt	dyn_opiontwhoamitdynnameN(RtNamedTemporaryFiletwritetflushtapporttcrashdbtget_crashdbR
tnameRtoptionstassertFalse(Rtcrashdb_conftdb((s+/usr/share/apport/testsuite/test_crashdb.pyttest_dynamic_crashdb_conf+s
cCsj|j|jjtjd|j|jjtjd|j|jjtjddS(s accepts(): default configurationtCrashtBugt	weirdtypeN(t
assertTrueRtacceptsR*tReport(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_accepts_defaultKs""cCstj}|jd|jtjjdd|j}|j	|j
tjd|j|j
tjd|j|j
tjddS(s/accepts(): problem_types option in crashdb.confsdefault = 'testsuite'

databases = {
    'testsuite': {
        'impl': 'memory',
        'problem_types': ['Bug', 'Kernel'],
    },
}
R4R3R5N(
RR'R(R)R*R+R,R
R-R6R7R8R/(RR0R1((s+/usr/share/apport/testsuite/test_crashdb.pyttest_accepts_problem_typesSs
cCsu|jjd}|j|dd|j|dd|j|jjddd|jt|jjddS(	sCrash uploading and downloadingit
SourcePackagetfootPackages
libfoo1 1.2-3tdup_ofiN(RRRtreportsR
RR(Rtr((s+/usr/share/apport/testsuite/test_crashdb.pyttest_submitns
cCs|j|jjddg|j|jjddg|j|jjddg|j|jjddgdS(NiR<iitbaritpygoo(RRtget_affected_packages(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_get_affected_packagesyscCstj}d|d<d|d<d|d<|jjd|d|j|jjdd	d|j|jjddd|j|jjddd|j|jjddd|jt|jjd
dddS(
supdate()tnewR=tBogustFooBarsFresh!t
StacktraceTopitmuhahatcommentitN(
R*R8RtupdateRR?RRRR
(RR@((s+/usr/share/apport/testsuite/test_crashdb.pyttest_updates


   cCstj}d|d<d|d<d|d<|jjd|dd	ddg|j|jjdd
d|j|jjddd|j|jjddd|j|jjddd|jt|jjddd
dS(supdate() with key_filterRFR=RGRHsFresh!RIiRJt
key_filterRKs
libfoo1 1.2-4iRLN(
R*R8RRMRR?RRRR
(RR@((s+/usr/share/apport/testsuite/test_crashdb.pyttest_update_filters


"   cCstj}d|d<d|d<d|d<|jjd|d|j|jjdd	d|j|jjddd
|j|jjddd|jd|jjdk|jt	|jjdddS(
supdate_traces()RFR=RGRHsFresh!RIiRJRKs
libfoo1 1.2-4iN(R*R8Rt
update_tracesRR?RR/RRR
(RR@((s+/usr/share/apport/testsuite/test_crashdb.pyttest_update_tracess


  cCs |j|jjdddS(sget_distro_release()is
FooLinux Pi/2N(RRtget_distro_release(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_get_distro_releasescCso|j|jjtdddddg|j|jjdd|j|jjdd|j|jjdd|j|jjdd|j|jjdd|jjidd|j|jjdd|j|jjdd|j|jjtddddg|j|jjdd|j|jjdddS(	sEget_unfixed(), get_fixed_version(), duplicate_of(), close_duplicate()iiiiitinvalidicN(RRtget_unfixedRtget_fixed_versionR
tduplicate_oftclose_duplicate(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_statuss.+cCsd|jjdd<|jjdd|j|jjddd|j|jjdd|j|jjdddS(smark_regression()s4.1it
fixed_versioniRKsregression, already fixed in #3N(RR?tmark_regressionRRXR
(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_mark_regressionscCs|jjd|j|jjdd|j|jjid|jjdj6|jjdd|j|jjid|jjdj6dS(sduplicate_db_fixed()s:memory:it42N(iN(iR^(	Rtinit_duplicate_dbRtcheck_duplicateR
t_duplicate_db_dumpRRtduplicate_db_fixed(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_duplicate_db_fixeds cCs|jt|jjd|jjd|j|jjdd|j|jjdd|jjd|j|jjid|jj	dj
6d|jj	dj
6|jjd|j|jjid|jj	dj
6dS(	sduplicate_db_remove()is:memory:iicN(iN(iN(iN(RRRR`R_RR
tduplicate_db_removeRaRR(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_duplicate_db_removescCs|jt|jjd|jjd|jt|jjd|jjd|j|jji|j|jj|jjdd|j|jjdd|j|jj|jjdd|jj
|j|j|jj|jjdd|j|jjdd|jj
|j|j|jj|jjdd|j|jjdd|jj
|j|j|jj|jjdd|j|jjdd|jj
|j|j|jj|jjdd|j|jjdd|j|jjdd|jd	|jj
dk|j|jjid|jjdj6d|jjdj6d|jjdj6d
|jj
dd<|jj|jjddd|j|jjdd|j|jjdd|j|jj
dd	d|j|jjid|jjdj6d|jjdj6d|jjdj6d|jjdj6tj|jjd}|j|jj||jj|d
|j|jjdd |j|jjdd|jd	|jj
dktj|jjd}d|d<|j|jj||jj|d|j|jjdd!|j|jjdd|jd	|jj
dk|j|jjid"|jjdj6d#|jjdj6d$|jjdj6d%|jjdj6d|jj
dd<|jjddtj|jjd}d|d<|j|jj||jj|d|j|jjdd&|jd	|jj
dk|j|jjid'|jjdj6d(|jjdj6d)|jjdj6d*|jjdj6dS(+scheck_duplicate() and known()is:memory:shttp://foo.bugs.example.com/0iishttp://bar.bugs.example.com/2iiRKs4.1R[sregression, already fixed in #3shttp://pygoo.bugs.example.com/5ispython-goo 5.1R=shttp://pygoo.bugs.example.com/6iRLshttp://pygoo.bugs.example.com/7iN(iN(iN(iN(iN(iN(iN(iN(is4.1(iN(is4.1(iN(iN(iN(is4.1(iN(iRL(iN(iN(iRL(iN(RRRR`RR_RRatknownR
tduplicate_db_publishRR/R?RRYRXtcopyRtuploadRb(RR@((s+/usr/share/apport/testsuite/test_crashdb.pyttest_check_duplicates((!!(!"$
$
$cCstj}d|d<d|d<d|d<d|d<d	|d
<d|d<|j|jj||jj|d
|j|jj||jj|d|jjd|j|jjdd|j|jjdddS(s$check_duplicate() with UTF-8 stringssbash 5R=tbashR;s
Testux 2.2t
DistroReleases	/bin/bashtExecutablePatht6tSignalsAfirmação x != 0tAssertionMessageshttp://bash.bugs.example.com/5shttp://bash.bugs.example.com/6s:memory:iiN(iN(	R*R8RRRRiR_R`R
(RR@((s+/usr/share/apport/testsuite/test_crashdb.pyttest_check_duplicate_utf8qs





$$cCsetj}d|d<d|d<d|d<|j|jj||jj|d|jjd|j|jjd	d
|j|jj	idd6|j|jjd
d
d|jj
d
d<|j|jjd
dd|jj
dd<|j|jjdd
|j|jj	idd6dd6d|jj
d
j6d
S(s7check_duplicate() with custom DuplicateSignature: fieldRkR;sbash 5R=t
Code42BluetDuplicateSignatureshttp://bash.bugs.example.com/5s:memory:iitCodeRediN(iN(iN(iN(iN(iN(R*R8RRRRiR_R`R
RaRR(RR@((s+/usr/share/apport/testsuite/test_crashdb.pyt%test_check_duplicate_custom_signatures"


$ cCsw|jjd|j|jjdd|j|jjdd|j|jjd|jjdddS(s0check_duplicate() with explicitly passing reports:memory:iiiN(iN(RR_RR`R
R(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_check_duplicate_report_args
cCsRtj}d|d<d|d<d|_d|_|j|jj||jj|dtj}d|d<d|d<d|_d	|_|j|jj||jj|d
tj}d|d<d|d<d|_d|_|j|jj||jj|d
|jjd|j|jj	d|d|j|jj	d|d|j|jj	d|d|j|jjdd|j|jjdd|j|jjdd|j|jjidd6|j|jj
|jd|j|jj
|jddS(scheck_duplicate() with multiple master bugs

        Due to the unavoidable jitter in gdb stack traces, it can happen that a
        bug B has the same symbolic signature as a bug S, but the same address
        signature as a bug A, where A and S have slightly different symbolic
        and address signatures and thus were not identified as duplicates. In
        that case we want the lowest ID to become the new master bug, and the
        other two duplicates.
        RkR;sbash 5R=cSsdS(Ns/bin/bash:11:read:main((((s+/usr/share/apport/testsuite/test_crashdb.pyt<lambda>scSsdS(Ns,/bin/bash:11:/lib/libc.so+123:/bin/bash+DEAD((((s+/usr/share/apport/testsuite/test_crashdb.pyRwsshttp://bash.bugs.example.com/5cSsdS(Ns/bin/bash:11:__getch:read:main((((s+/usr/share/apport/testsuite/test_crashdb.pyRwscSsdS(Ns>/bin/bash:11:/lib/libc.so+BEEF:/lib/libc.so+123:/bin/bash+DEAD((((s+/usr/share/apport/testsuite/test_crashdb.pyRwsshttp://bash.bugs.example.com/6cSsdS(Ns/bin/bash:11:__getch:read:main((((s+/usr/share/apport/testsuite/test_crashdb.pyRwscSsdS(Ns,/bin/bash:11:/lib/libc.so+123:/bin/bash+DEAD((((s+/usr/share/apport/testsuite/test_crashdb.pyRwsshttp://bash.bugs.example.com/7s:memory:iiis/bin/bash:11:read:mainN(iN(iN(R*R8Rtcrash_signature_addressesRRRRiR_R`R
RXRat#_duplicate_search_address_signature(Rtatstb((s+/usr/share/apport/testsuite/test_crashdb.pyt%test_check_duplicate_multiple_masterss>


$

$

$ "cCsc|jjdtj}d|d<d|d<d|d<d|d	<d
|d<d|d
<|j|jd|jj|j|j	|jj
|d|jj|}|j	|jj|d|jj|j|j	|jj
||jj
||tj}d|d<d|d<d|d<d|d	<d|d<d|d
<|j	|j|j|jj|j|j	|jj
||jj
|||jj|}|j	|jj||dftj}d|d<d|d<d|d<d|d	<d|d<d|d
<|j|j|j|jj|j|j	|jj
|d|jjdd|d<d|d<|jj|}|j	|jj|d|jj|}|j	|jj||df|d=|d=|jj|j|j	|jj
||jj
|||j	|jj
||jj
|||jj|||jj|j|j	|jj
||jj
|||j	|jj
||jj
|||jj||jj|j|j	|jj
|d|j	|jj
|d|j	|jjidS(sknown() for address signaturess:memory:RkR;sbash 5R=s	/bin/bashRmt11Ros
00400000-004df000 r-xp 00000000 08:02 1044485                            /bin/bash
7f491fa8f000-7f491fc24000 r-xp 00000000 08:02 522605                     /lib/x86_64-linux-gnu/libc-2.13.so
tProcMapss
#0  0x00007f491fac5687 in kill ()
#1  0x000000000042eb76 in ?? ()
#2  0x00000000004324d8 in ??
#3  0x00000000004707e3 in parse_and_execute ()
#4  0x000000000041d703 in _start ()
t
Stacktraces
00400000-004df000 r-xp 00000000 08:02 1044485                            /bin/bash
5f491fa8f000-5f491fc24000 r-xp 00000000 08:02 522605                     /lib/x86_64-linux-gnu/libc-2.13.so
s
#0  0x00005f491fac5687 in kill ()
#1  0x000000000042eb76 in ?? ()
#2  0x00000000004324d8 in ??
#3  0x00000000004707e3 in parse_and_execute ()
#4  0x000000000041d703 in _start ()
s
#0  0x00005f491fac5687 in kill ()
#1  0x000000000042eb76 in ?? ()
#2  0x0000000000432401 in ??
#3  0x00000000004707e3 in parse_and_execute ()
#4  0x000000000041d703 in _start ()
tmooRsN(RR_R*R8tassertNotEqualRxR
RgRRRfRiR`Rtduplicate_db_change_master_idRdRa(RR@tr_idtr2tr2_idtr3tr3_id((s+/usr/share/apport/testsuite/test_crashdb.pyttest_known_address_sigs












"








"cCs|jjd|jjd}d|_|jjd}d|_|j|jj|d|j|jjdd|j|jj|d|j|jjdd|jj	|j
|j|jj|d|j|jj|ddS(	s0duplicate_db_publish() with very long signaturess:memory:icSsddS(Nss+i((((s+/usr/share/apport/testsuite/test_crashdb.pyRwisicSsddS(Ns0x1+/i((((s+/usr/share/apport/testsuite/test_crashdb.pyRwmsshttp://foo.bugs.example.com/0shttp://foo.bugs.example.com/1N(RR_RRRxRRfR
R`RgR(Rtsymbtaddr((s+/usr/share/apport/testsuite/test_crashdb.pyt#test_duplicate_db_publish_long_sigsbscCsl|jt|jjd|jjd|j|jjdd|j|jjdd|j|jjid|jjdj	6d|jjdj	6|jj
dd|j|jjid	|jjdj	6d
|jjdj	6|jj
dd|j|jjid|jjdj	6d|jjdj	6dS(
sduplicate_db_change_master_id()is:memory:iiicN(iN(iN(iN(iN(iN(icN(RRRR`R_RR
RaRRR(R((s+/usr/share/apport/testsuite/test_crashdb.pyttest_change_master_idxscCsFz1tj\}}tj||jj||j|jjdd|j|jj	id|jj
dj6|jjdd|j|jj	id|jj
dj6|`t
|d}|jtjj|dd|jtdi|_|jt|jj|Wdtj|XdS(	sDetection of DB file corruptioniR^sr+iiN(iN(is42(RtmkstempR	tcloseRR_RR`R
RaRRRbtopenttruncateR
tgetsizeRRt	Exceptiontunlink(RtfdR1tf((s+/usr/share/apport/testsuite/test_crashdb.pyttest_db_corruptions"
  !
(t__name__t
__module__RRRR R2R9R:RARERNRPRRRTRZR]RcReRjRqRuRvR}RRRR(((s+/usr/share/apport/testsuite/test_crashdb.pyRs4					 													s				8	{		 t__main__(
tunittestRRtos.pathR	RhR*tapport.crashdb_impl.memoryRtTestCaseRRtmain(((s+/usr/share/apport/testsuite/test_crashdb.pyt<module>s<