forked from canonical/snapcraft
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathruntests.sh
executable file
·115 lines (93 loc) · 3.37 KB
/
runtests.sh
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
#!/bin/bash
# -*- Mode:sh; indent-tabs-mode:nil; tab-width:4 -*-
#
# Copyright (C) 2015-2018 Canonical Ltd
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.f-1
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -e
PATH="$(pwd)/bin:$PATH"
PYTHONPATH="$(pwd)${PYTHONPATH:+:$PYTHONPATH}"
export PATH
export PYTHONPATH
printhelp(){
echo "Usage: "
echo " ./runtests.sh static"
echo " ./runtests.sh tests/unit [<use-run>]"
echo " ./runtests.sh tests/integration[/<test-suite>]"
echo " ./runtests.sh spread"
echo ""
echo "<test-suite> can be one of: $(find tests/integration/ -mindepth 1 -maxdepth 1 -type d ! -name __pycache__ | tr '\n' ' ')"
echo "<use-run> makes use of run instead of discover to run the tests"
}
test_suite="$1"
use_run="$2"
parseargs(){
if [[ "$#" -eq 0 ]]; then
printhelp
exit 1
else
if [ "$test_suite" == "static" ] ; then
run_static_tests
elif [ "$test_suite" == "spread" ] ; then
run_spread
else
run_snapcraft_tests "$@"
fi
fi
}
coverage 1>/dev/null 2>&1 && coverage="true"
run_static_tests(){
echo "Running black"
black --check --diff .
echo "Running flake8"
python3 -m flake8 .
echo "Running mypy"
mypy -p snapcraft
echo "Running codespell"
codespell -S "*.tar,*.xz,*.zip,*.bz2,*.7z,*.gz,*.deb,*.rpm,*.snap,*.gpg,*.pyc,*.png,*.ico,*.jar,changelog,.git,.hg,.mypy_cache,.tox,.venv,_build,buck-out,__pycache__,build,dist,.vscode,parts,stage,prime,test_appstream.py" -q4
echo "Running shellcheck"
# Need to skip 'demos/gradle/gradlew' as it wasn't written by us and has
# tons of issues.
find . \( -name .git -o -name gradlew \) -prune -o -print0 | xargs -0 file -N | awk -F": " '$2~/shell.script/{print $1}' | xargs shellcheck
echo "Running shellcheck inside spread yaml"
./tools/spread-shellcheck.py spread.yaml tests/spread/
}
run_snapcraft_tests(){
if [[ -n "$use_run" ]]; then
python3 -m unittest -b -v run "$test_suite"
elif [[ -n "$coverage" ]] && [[ "$test_suite" == "tests/unit"* ]]; then
python3 -m coverage erase
python3 -m coverage run --branch --source snapcraft -m unittest discover -b -v -s "$test_suite" -t .
else
python3 -m unittest discover -b -v -s "$test_suite" -t .
fi
}
run_spread(){
TMP_SPREAD="$(mktemp -d)"
export PATH=$TMP_SPREAD:$PATH
( cd "$TMP_SPREAD" && curl -s -O https://niemeyer.s3.amazonaws.com/spread-amd64.tar.gz && tar xzvf spread-amd64.tar.gz )
spread -v google:
}
if [ "$test_suite" == "-h" ] || [ "$test_suite" == "--help" ]; then
printhelp
exit 0
fi
parseargs "$@"
if [[ -n "$coverage" ]] && [[ "$test_suite" == "tests/unit"* ]]; then
coverage report
echo
echo "Run 'python3-coverage html' to get a nice report"
echo "View it by running 'x-www-browser htmlcov'"
echo
fi
echo -e '\e[1;32mEverything passed\e[0m'