mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Test of brute-force key typing to test lyx for crashes.
Vanilla sources from John McCabe-Dansted. http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg152155.html git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@30121 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
934308286d
commit
5cf6f4f656
40
development/keystest/README
Normal file
40
development/keystest/README
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
--- LyXtest ---
|
||||||
|
|
||||||
|
This is a program to spam LyX with millions of randomly generated key
|
||||||
|
presses, and collect the crash results.
|
||||||
|
|
||||||
|
Since the code involves spamming random keypresses, I'd recommend
|
||||||
|
running it in a VM, well away from your main X windows session.
|
||||||
|
|
||||||
|
In short, to use this, move this directory LT into your LyX source directory
|
||||||
|
(e.g. lyx-1.6.x, but not lyx-1.6.x/src). Then run LT/lyx_make.sh
|
||||||
|
|
||||||
|
It requires the following packages to run
|
||||||
|
xvkbd wmctrl
|
||||||
|
the following are also useful:
|
||||||
|
lyx libqt4-dbg subversion automake
|
||||||
|
|
||||||
|
It is run by running ./autolyx in one xterm, and ./test.py in another.
|
||||||
|
I wrote lyx_make.sh as a easy way of updating lyx and running these two
|
||||||
|
programs together.
|
||||||
|
|
||||||
|
CONTENTS:
|
||||||
|
|
||||||
|
README: this readme file
|
||||||
|
report.sh: A quick way of generating bug reports and an overview from the logs.
|
||||||
|
autolyx: A script to continually restart lyx and collect the bug reports
|
||||||
|
lyx_make.sh: should updates, compiles, and everything needed to generated logs.
|
||||||
|
maketar.sh: Makes this tar file :)
|
||||||
|
test.py: Sends LT100 randomly generated keypresses per second to the LyX window.
|
||||||
|
killtest: stop the testing
|
||||||
|
stock_text: The stock test to add to each bug report.
|
||||||
|
|
||||||
|
OUTPUTS:
|
||||||
|
|
||||||
|
autolyx: Outputs out/GDB, a log of all output, including backtraces.
|
||||||
|
test.py: Outputs out/KEYCODES, a list of all keycodes sent to LyX
|
||||||
|
|
||||||
|
reports.sh: Outputs
|
||||||
|
out/overview: an overview of all the frequency of each error
|
||||||
|
out/overview_sort: as above but sorted
|
||||||
|
out/report_*: A collection of autogenerated bug reports.
|
16
development/keystest/autolyx
Executable file
16
development/keystest/autolyx
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# This script starts LyX, and restarts LyX if it is closed
|
||||||
|
# it logs all output, including backtraces to LT/out/GDB
|
||||||
|
|
||||||
|
#rename other windows to avoid confusion.
|
||||||
|
wmctrl -N __renamed__ -r lyx
|
||||||
|
wmctrl -N __renamed__ -r lyx
|
||||||
|
wmctrl -N __renamed__ -r lyx
|
||||||
|
wmctrl -N __renamed__ -r lyx
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
( (echo SECONDS: `date +%s`
|
||||||
|
(echo "run
|
||||||
|
bt" ; yes q) | gdb src/lyx 2>&1) | strings| tee -a LT/out/GDB)
|
||||||
|
done
|
14
development/keystest/killtest.sh
Executable file
14
development/keystest/killtest.sh
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
AUTOLYX=`ps gaux | grep autolyx | grep -v grep | sed 's/[^ ]* //' | sed s/0.0.*//g`
|
||||||
|
killall autolyx
|
||||||
|
killall test.py
|
||||||
|
killall lyx
|
||||||
|
killall gdb
|
||||||
|
killall xterm
|
||||||
|
kill $AUTOLYX
|
||||||
|
sleep 0.3
|
||||||
|
killall autolyx -9
|
||||||
|
killall test.py -9
|
||||||
|
killall lyx -9
|
||||||
|
killall gdb -9
|
||||||
|
killall xterm -9
|
||||||
|
kill $AUTOLYX -9
|
20
development/keystest/lyx_make.sh
Executable file
20
development/keystest/lyx_make.sh
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#This script updates LyX, runs LyX, starts spamming it with hundreds of
|
||||||
|
#keypresses, and logs all output, including backtraces to LT/out/GDB
|
||||||
|
#Use report.sh to generated the more useful bug reports in LT/out/{or}*
|
||||||
|
|
||||||
|
#LYXDIR=LT/lyx-1.6.x-test
|
||||||
|
cd ~/lyx-1.6.x-test
|
||||||
|
mkdir -p LT/out
|
||||||
|
if which wmctrl xvkbd bash xterm python
|
||||||
|
then
|
||||||
|
#cd "$LYXDIR" || echo CANNOT FIND LT/lyx-1.6.x-test
|
||||||
|
#cd "$LYXDIR" || exit
|
||||||
|
svn up Makefile.am autogen.sh boost/ config/ configure.ac lib/ lyx.1in m4/ rename.sh src/
|
||||||
|
export CFLAGS="-g"
|
||||||
|
export CXXFLAGS="$CFLAGS"
|
||||||
|
./autogen.sh && ./configure && nice -18 make && (bash LT/autolyx & sleep 9 ; xterm -e python LT/test.py)
|
||||||
|
else
|
||||||
|
echo NEEDS the following packages:
|
||||||
|
echo wmctrl xvkbd bash xterm python
|
||||||
|
fi
|
2
development/keystest/maketar.sh
Executable file
2
development/keystest/maketar.sh
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
tar -c LT/start_tests.sh LT/killt* LT/README LT/stock_text LT/report.sh LT/autolyx LT/lyx_make.sh LT/maketar.sh LT/test.py | gzip -9 > LT/lyxtestc.tar.gz
|
||||||
|
#cp lyxtestb.tar.gz LT/share
|
52
development/keystest/report.sh
Executable file
52
development/keystest/report.sh
Executable file
@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# echo 'grep "#1 " LT/out/GDB | sed 's/0x[^ )]*[ )]/.*/g' | sort | uniq' >> report.sh
|
||||||
|
|
||||||
|
UNIQUE_LINE=1
|
||||||
|
|
||||||
|
while [ ! -e LT/out/GDB ]
|
||||||
|
do
|
||||||
|
cd ..
|
||||||
|
if [ `pwd` = '/' ]
|
||||||
|
then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
strings LT/out/GDB > LT/out/GDBs
|
||||||
|
grep "#$UNIQUE_LINE " LT/out/GDBs > LT/out/list
|
||||||
|
#cat LT/out/list | grep -o ' in [[:alnum:]:]* ' | sort | uniq| tee LT/out/listuniq
|
||||||
|
#cat LT/out/list | grep -o ' in [[:alnum:]:]* ' | sort | uniq| tee LT/out/listuniq
|
||||||
|
cat LT/out/list | sed 's/0x[^ )]*[ )]/.*/g' | sort | uniq | tee LT/out/listuniq
|
||||||
|
|
||||||
|
NUM_REPORTS=`wc -l < LT/out/list`
|
||||||
|
echo NUM_REPORTS $NUM_REPORTS
|
||||||
|
|
||||||
|
echo > LT/out/overview
|
||||||
|
|
||||||
|
cat LT/out/listuniq | while read l
|
||||||
|
do
|
||||||
|
#name=`echo $l | sed s/in// | sed 's/ //g'`
|
||||||
|
grep "$l" -B $UNIQUE_LINE -A 100 LT/out/GDBs | head -n 100 | grep '#[0-9]' >LT/out/tmp
|
||||||
|
name=`cat LT/out/tmp | ( grep -o ' in lyx::[[:alnum:]:]*' || cat LT/out/tmp | grep -o ' [ai][nt] [[:alnum:]:]*' ) | head -n1 | sed s/in// | sed 's/ //g'`
|
||||||
|
echo NAME: $name
|
||||||
|
echo L: $l
|
||||||
|
#out/list | grep -o ' in [[:alnum:]:]* ' | sort | uniq| tee out/listuniq
|
||||||
|
(
|
||||||
|
cat stock_text
|
||||||
|
uname -r ; cat /etc/lsb-release| grep -i DISTRIB_DESCRIPTION
|
||||||
|
(cd src && svn info | grep Rev:)
|
||||||
|
echo
|
||||||
|
NUM_OCCURANCES=`grep "$l" LT/out/list | wc -l`
|
||||||
|
echo number_of_occurances: $NUM_OCCURANCES/$NUM_REPORTS
|
||||||
|
echo -e $NUM_OCCURANCES "\t" $name >> LT/out/overview
|
||||||
|
#echo grep "$l" LT/out/list
|
||||||
|
#grep $l LT/out/GDB
|
||||||
|
echo '{{{'
|
||||||
|
grep "$l" -B $UNIQUE_LINE -A 100 LT/out/GDBs | head -n 100 | grep '#[0-9]'
|
||||||
|
echo '}}}'
|
||||||
|
) | tee LT/out/report_$name
|
||||||
|
done
|
||||||
|
|
||||||
|
cat LT/out/overview | sort -rn | tee LT/out/overview_sort
|
||||||
|
#cp LT/out/r* LT/share/
|
||||||
|
#cp LT/out/o* LT/share/
|
6
development/keystest/start_tests.sh
Executable file
6
development/keystest/start_tests.sh
Executable file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#This script runs LyX, starts spamming it with hundreds of
|
||||||
|
#keypresses, and logs all output, including backtraces to LT/out/GDB
|
||||||
|
#Use report.sh to generated the more useful bug reports in LT/out/{or}*
|
||||||
|
|
||||||
|
(bash LT/autolyx & sleep 9 ; xterm -e python LT/test.py)
|
1
development/keystest/stock_text
Normal file
1
development/keystest/stock_text
Normal file
@ -0,0 +1 @@
|
|||||||
|
[[Add stock text here]]
|
47
development/keystest/test.py
Executable file
47
development/keystest/test.py
Executable file
@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#This script generated hundreds of random keypresses per second,
|
||||||
|
# and sends them to the lyx window
|
||||||
|
#It requires xvkbd and wmctrl
|
||||||
|
#It generates a log of the KEYCODES it sends as LT/out/KEYCODES
|
||||||
|
|
||||||
|
import random
|
||||||
|
import os
|
||||||
|
|
||||||
|
#os.system("mv LT/*lyx*_*
|
||||||
|
|
||||||
|
#os.system("lyx &")
|
||||||
|
#os.system("sleep 20")
|
||||||
|
|
||||||
|
|
||||||
|
keycode=["\[Left]",'\[Right]','\[Down]','\[Up]','\[BackSpace]','\[Delete]']
|
||||||
|
keycode[:0]=keycode
|
||||||
|
keycode[:0]=keycode
|
||||||
|
|
||||||
|
keycode[:0]=['\\']
|
||||||
|
|
||||||
|
for k in range(97, 123):
|
||||||
|
keycode[:0]=chr(k)
|
||||||
|
|
||||||
|
for k in range(97, 123):
|
||||||
|
keycode[:0]=["\A"+chr(k)]
|
||||||
|
|
||||||
|
for k in range(97, 123):
|
||||||
|
keycode[:0]=["\A"+chr(k)]
|
||||||
|
|
||||||
|
for k in range(97, 123):
|
||||||
|
keycode[:0]=["\C"+chr(k)]
|
||||||
|
|
||||||
|
|
||||||
|
print (keycode[1])
|
||||||
|
print(keycode)
|
||||||
|
print (random.randint(1,len(keycode)))
|
||||||
|
for k in range(97, 123):
|
||||||
|
print (keycode[random.randint(1,len(keycode))-1])
|
||||||
|
|
||||||
|
while True:
|
||||||
|
keystr=""
|
||||||
|
for k in range(1,80):
|
||||||
|
keystr=keystr+keycode[random.randint(1,len(keycode))-1]
|
||||||
|
os.system("wmctrl -R LyX && xvkbd -xsendevent -text '"+keystr+"';sleep 1")
|
||||||
|
#os.system("echo KEYCODES: '"+keystr+"' >> LT/out/GDB")
|
||||||
|
os.system("echo `date +%s`: '"+keystr+"' >> LT/out/KEYCODES")
|
Loading…
Reference in New Issue
Block a user