1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
#!/bin/sh
# Run Apport self tests.
#
# Test against the source tree when run in the source tree root. Test against
# the system libraries/programs when run from anywhere else.
# You can specify test names as arguments to only run a subset of tests.
#
# Run all tests: test/run
# Run tests of one module: test/run crashdb
# Run one test in one module: test/run report.test_add_os_info
# Copyright (C) 2007 - 2012 Canonical Ltd.
# Author: Martin Pitt <martin.pitt@ubuntu.com>
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version. See http://www.gnu.org/copyleft/gpl.html for
# the full text of the license.
set -e
mydir=`dirname "$0"`
export LC_MESSAGES=C
# Run against source tree when we are in the source directory
if [ -d test -a -e setup.py ]; then
echo "Testing local source tree."
export PATH=`pwd`/bin:$PATH
export PYTHONPATH=`pwd`
export APPORT_CRASHDB_CONF=./etc/apport/crashdb.conf
export APPORT_DATA_DIR=./data
export APPORT_TEST_LOCAL=1
# PEP8 tests, if pep8 is available
if type pep8 >/dev/null 2>&1; then
echo "Running pep8..."
# . catches all *.py modules; we explicitly need to specify the programs
pep8 -r --ignore=E401,E501,E124 --exclude=test_problem_report.py,report.py,is-enabled,apport-bug . `find bin data -type f -executable`
# those tests deliberately have trailing whitespace in test files, ignore
pep8 -r --ignore=E401,E501,W291,W293 test/test_problem_report.py
# has_key is minidom API, not the dict operator here
pep8 -r --ignore=E401,E501,W601 apport/report.py
else
echo "Skipping PEP 8 tests, pep8 is not installed"
fi
# pyflakes, if available
if type pyflakes >/dev/null 2>&1; then
echo "Running pyflakes..."
pyflakes `find -name '*.py'` `find bin data -type f -executable ! -name is-enabled ! -name apport-bug ! -name root_info_wrapper`
else
echo "Skipping pyflakes tests, pyflakes is not installed"
fi
# assert that there are no hardcoded "Ubuntu" names
out=$(grep -rw Ubuntu test/*.py apport/*.py gtk/apport-gtk* kde/* bin/* | grep -v Debian | grep -v X-Ubuntu-Gettext-Domain | grep -v '#.*Ubuntu') || :
if [ -n "$out" ]; then
echo "Found hardcoded 'Ubuntu' names, use DistroRelease: field or lsb_release instead:\n\n$out" >&2
exit 1
fi
if [ ! -e apport/packaging_impl.py ]; then
echo "You need to copy an appropriate packaging implementation from backends/ to apport/packaging_impl.py; run './setup.py build' for auto-detection." >&2
exit 1
fi
else
echo "Testing installed libraries/program."
fi
# avoid breaking the UI tests due to obsolete packages
export APPORT_IGNORE_OBSOLETE_PACKAGES=1
# avoid breaking tests due to translated strings or assuming a particular
# locale
export LC_MESSAGES=C
export LC_CTYPE=C
unset LANGUAGE LANG
# do not assume/disturb session bus
unset DBUS_SESSION_BUS_ADDRESS
xvfb=
if type xvfb-run >/dev/null && [ -z "$APPORT_TEST_NOXVFB" ]; then
xvfb=xvfb-run
fi
failed=0
# check command line whether to only run a subset of tests
if [ -z "$1" ]; then
TESTS=$(ls $mydir/*.py | cut -f2- -d_ | cut -f1 -d.)
else
while [ -n "$1" ]; do
if [ -e "$mydir/test_${1%%.*}.py" ]; then
TESTS="$TESTS $1"
else
echo "Test $1 does not exist" >&2
exit 1
fi
shift
done
fi
for t in $TESTS; do
echo "--- Testing $t ---"
if [ "${t#ui_}" != $t ]; then
while [ -e /tmp/.X99-lock ]; do
echo "Waiting for previous xvfb to finish..."
sleep 0.5
done
prefix=$xvfb
else
# ensure that non-UI modules do not require X
prefix="env -u DISPLAY"
fi
if [ "$t" = "python_crashes" ]; then
prefix="dbus-launch $prefix"
fi
test_file="$mydir/test_${t%%.*}.py"
if [ "$t" = "${t#*.}" ]; then
test_name=""
else
test_name="T.${t#*.}"
fi
$prefix ${PYTHON:=python3} -tt $test_file -v $test_name || failed=$((failed+1))
done
exit $failed
|