176 lines
3.6 KiB
Bash
Executable File
176 lines
3.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright 2014 Google Inc. All rights reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
# Test automation script.
|
|
#
|
|
# Usage:
|
|
# test.sh [function name]
|
|
#
|
|
# Examples:
|
|
# $ ./test.sh py-unit # run Python unit tests
|
|
# $ ./test.sh all # all tests
|
|
# $ ./test.sh lint # run lint checks
|
|
# If no function is provided all of the unit tests will be run.
|
|
|
|
set -o nounset
|
|
set -o pipefail
|
|
set -o errexit
|
|
|
|
. util.sh
|
|
|
|
readonly THIS_DIR=$(dirname $0)
|
|
readonly REPO_ROOT=$THIS_DIR
|
|
readonly CLIENT_DIR=$REPO_ROOT/client/python
|
|
|
|
#
|
|
# Fully Automated Tests
|
|
#
|
|
|
|
# Run all Python unit tests.
|
|
#
|
|
# Or pass a particular test to run with the correct PYTHONPATH, e.g.
|
|
#
|
|
# $ ./test.sh py-unit tests/fastrand_test.py
|
|
#
|
|
# TODO: Separate out deterministic tests from statistical tests (which may
|
|
# rarely fail)
|
|
py-unit() {
|
|
export PYTHONPATH=$CLIENT_DIR # to find client library
|
|
|
|
if test $# -gt 0; then
|
|
"$@"
|
|
else
|
|
set +o errexit
|
|
|
|
# -e: exit at first failure
|
|
find $REPO_ROOT -name \*_test.py | sh -x -e
|
|
fi
|
|
|
|
local exit_code=$?
|
|
|
|
if test $exit_code -eq 0; then
|
|
echo 'ALL TESTS PASSED'
|
|
else
|
|
echo 'FAIL'
|
|
exit 1
|
|
fi
|
|
set -o errexit
|
|
}
|
|
|
|
# All tests
|
|
all() {
|
|
banner "Running Python unit tests"
|
|
py-unit
|
|
echo
|
|
|
|
banner "Running R unit tests"
|
|
r-unit
|
|
}
|
|
|
|
#
|
|
# Lint
|
|
#
|
|
lint() {
|
|
banner "Linting Python source files"
|
|
py-lint
|
|
echo
|
|
|
|
banner "Linting Documentation files"
|
|
doc-lint
|
|
}
|
|
|
|
python-lint() {
|
|
# E111: indent not a multiple of 4. We are following the Google/Chrome
|
|
# style and using 2 space indents.
|
|
if pep8 --ignore=E111 "$@"; then
|
|
echo
|
|
echo 'LINT PASSED'
|
|
else
|
|
echo
|
|
echo 'LINT FAILED'
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
py-lint() {
|
|
which pep8 >/dev/null || die "pep8 not installed ('sudo apt-get install pep8' on Ubuntu)"
|
|
|
|
# - Skip _tmp dir, because we are downloading cpplint.py there, and it has
|
|
# pep8 lint errors
|
|
# - Exclude setup.py, because it's a config file and uses "invalid" 'name =
|
|
# 1' style (spaces around =).
|
|
find $REPO_ROOT \
|
|
\( -name _tmp -a -prune \) -o \
|
|
\( -name \*.py -a -print \) \
|
|
| grep -v /setup.py \
|
|
| xargs --verbose -- $0 python-lint
|
|
}
|
|
|
|
r-unit() {
|
|
set -o xtrace # show tests we're running
|
|
|
|
# This one needs to be run from the root dir
|
|
tests/compare_dist_test.R
|
|
|
|
tests/gen_counts_test.R
|
|
|
|
tests/gen_true_values_test.R
|
|
|
|
analysis/R/decode_test.R
|
|
|
|
analysis/test/run_tests.R
|
|
}
|
|
|
|
doc-lint() {
|
|
which tidy >/dev/null || die "tidy not found"
|
|
for doc in _tmp/report.html _tmp/doc/*.html; do
|
|
echo $doc
|
|
# -e: show only errors and warnings
|
|
# -q: quiet
|
|
tidy -e -q $doc || true
|
|
done
|
|
}
|
|
|
|
# This isn't a strict check, but can help.
|
|
# TODO: Add words to whitelist.
|
|
spell-all() {
|
|
which spell >/dev/null || die "spell not found"
|
|
spell README.md doc/*.md | sort | uniq
|
|
}
|
|
|
|
#
|
|
# Smoke Tests. These can be manually run.
|
|
#
|
|
|
|
gen-true-values() {
|
|
local num_unique_values=10
|
|
local num_clients=10
|
|
local values_per_client=2
|
|
local num_cohorts=4
|
|
local out=_tmp/reports.csv
|
|
|
|
tests/gen_true_values.R \
|
|
exp $num_unique_values $num_clients $values_per_client $num_cohorts $out
|
|
wc -l $out
|
|
cat $out
|
|
}
|
|
|
|
if test $# -eq 0 ; then
|
|
all
|
|
else
|
|
"$@"
|
|
fi
|