summaryrefslogtreecommitdiff
path: root/check
diff options
context:
space:
mode:
Diffstat (limited to 'check')
-rwxr-xr-xcheck114
1 files changed, 95 insertions, 19 deletions
diff --git a/check b/check
index c0d1683d..a5ef4128 100755
--- a/check
+++ b/check
@@ -2,7 +2,7 @@
#
# Run test suite for morph.
#
-# Copyright (C) 2011-2013 Codethink Limited
+# Copyright (C) 2011-2014 Codethink Limited
#
# 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
@@ -23,13 +23,61 @@ set -e
# Parse the command line.
-full=false
+run_style=false
+run_unit_tests=false
+run_cmdtests=false
+run_slow_cmdtests=false
+run_yarns=false
+if [ "$#" -eq 0 ]; then
+ run_style=true
+ run_unit_tests=true
+ run_cmdtests=true
+ run_slow_cmdtests=false
+ run_yarns=true
+fi
while [ "$#" -gt 0 ]
do
case "$1" in
- --full) full=true; shift ;;
- *) echo "ERROR: Unknown argument $1." 1>&2; exit 1 ;;
+ --full)
+ run_style=true
+ run_unit_tests=true
+ run_cmdtests=true
+ run_slow_cmdtests=true
+ run_yarns=true
+ ;;
+ --style)
+ run_style=true
+ ;;
+ --no-style)
+ run_style=false
+ ;;
+ --unit-tests)
+ run_unit_tests=true
+ ;;
+ --no-unit-tests)
+ run_unit_tests=false
+ ;;
+ --cmdtests)
+ run_cmdtests=true
+ ;;
+ --no-cmdtests)
+ run_cmdtests=false
+ ;;
+ --slow-cmdtests)
+ run_slow_cmdtests=true
+ ;;
+ --no-slow-cmdtests)
+ run_slow_cmdtests=false
+ ;;
+ --yarns)
+ run_yarns=true
+ ;;
+ --no-yarns)
+ run_yarns=false
+ ;;
+ *) echo "ERROR: Unknown argument $1." 1>&2; exit 1 ;;
esac
+ shift
done
@@ -45,7 +93,7 @@ export PYTHONPATH
# Run the style checks
errors=0
-if [ -d .git ];
+if "$run_style" && [ -d .git ];
then
echo "Checking copyright statements"
if ! (git ls-files -z | xargs -0r scripts/check-copyright-year); then
@@ -68,54 +116,82 @@ fi
# Clean up artifacts from previous (possibly failed) runs, build,
# and run the tests.
-python setup.py clean check
+if "$run_unit_tests"; then
+ python setup.py clean check
+fi
# Run scenario tests with yarn, if yarn is available.
+#
+# Yarn cleans up the environment when it runs tests, and this removes
+# PYTHONPATH from the environment. However, we need our tests to have
+# the PYTHONPATH, so that we can get them to, for example, use the right
+# versions of updated dependencies. The immediate current need is to
+# be able to get them to use an updated version of cliapp, but it is
+# a general need.
+#
+# We solve this by using the yarn --env option, allowing us to tell yarn
+# explicitly which environment variables to set in addition to the set
+# it sets anyway.
-if command -v yarn > /dev/null
+if "$run_yarns" && command -v yarn > /dev/null
then
- yarn -s yarns/morph.shell-lib yarns/*.yarn
+ yarn --env "PYTHONPATH=$PYTHONPATH" -s yarns/morph.shell-lib yarns/*.yarn
fi
# cmdtest tests.
HOME="$(pwd)/scripts"
-cmdtest tests
+if "$run_cmdtests"
+then
+ cmdtest tests
+else
+ echo "NOT RUNNING test"
+fi
-if $full
+if "$run_slow_cmdtests"
then
cmdtest tests.branching
else
echo "NOT RUNNING test.branching"
fi
-if $full && false
+if false && "$run_cmdtests"
then
cmdtest tests.merging
else
echo "NOT RUNNING test.merging"
fi
-cmdtest tests.deploy
+if "$run_cmdtests"
+then
+ cmdtest tests.deploy
+else
+ echo "NOT RUNNING test.deploy"
+fi
# Building systems requires the 'filter' parameter of tarfile.TarFile.add():
# this was introduced in Python 2.7
-if python --version 2>&1 | grep '^Python 2\.[78]' > /dev/null; then
- cmdtest tests.build
-else
+if ! "$run_cmdtests"; then
+ echo "NOT RUNNING tests.build"
+elif ! (python --version 2>&1 | grep -q '^Python 2\.[78]'); then
echo "NOT RUNNING tests.build (requires Python 2.7)"
+else
+ cmdtest tests.build
fi
# The as-root tests use YAML morphologies, so they require the PyYAML module.
-if $full && [ $(whoami) = root ] && command -v mkfs.btrfs > /dev/null &&
- python -c "
+if ! "$run_slow_cmdtests"; then
+ echo "NOT RUNNING tests.as-root"
+elif [ $(whoami) != root ] || ! command -v mkfs.btrfs > /dev/null; then
+ echo "NOT RUNNING tests.as-root (no btrfs)"
+elif ! python -c "
import morphlib, sys
if not morphlib.got_yaml:
sys.exit(1)
" > /dev/null 2>&1
then
- cmdtest tests.as-root
-else
echo "NOT RUNNING tests.as-root (requires PyYAML)"
+else
+ cmdtest tests.as-root
fi