diff options
author | Todd Gamblin <tgamblin@llnl.gov> | 2017-04-27 11:47:56 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-27 11:47:56 -0700 |
commit | bb5a433a46a8ffc69b01e8477eb6646f4c66f9d2 (patch) | |
tree | dc20c9c224a85eda36661b1af6be5e8ad3e6e4d2 /share | |
parent | a0ebce0cb3824d154e405d8044ded1aea5e26e12 (diff) | |
download | spack-bb5a433a46a8ffc69b01e8477eb6646f4c66f9d2.tar.gz spack-bb5a433a46a8ffc69b01e8477eb6646f4c66f9d2.tar.bz2 spack-bb5a433a46a8ffc69b01e8477eb6646f4c66f9d2.tar.xz spack-bb5a433a46a8ffc69b01e8477eb6646f4c66f9d2.zip |
Separate integration tests; simplify test scripts (#4006)
* Separate build integration tests; simplify test scripts
- Move build tests out of the regular Travis unit tests, add more smoke
test packages to build.
- Run all test scripts with bash -e, which fails on error.
- Factor coverage out into a Travis environment variable, so it's more
obvious from .travis.yml which tests contribute to coverage and which
don't.
- Factor dependency checking and much of the front-matter in tests
scripts into a setup.sh script, which is sourced by all the test
scripts. Extra cruft in each tests script now reduced to 2 lines at
the beginning.
Diffstat (limited to 'share')
-rwxr-xr-x | share/spack/qa/check_dependencies | 96 | ||||
-rwxr-xr-x | share/spack/qa/run-build-tests | 29 | ||||
-rwxr-xr-x | share/spack/qa/run-doc-tests | 29 | ||||
-rwxr-xr-x | share/spack/qa/run-flake8-tests | 23 | ||||
-rwxr-xr-x | share/spack/qa/run-unit-tests | 40 | ||||
-rwxr-xr-x | share/spack/qa/setup.sh | 118 |
6 files changed, 161 insertions, 174 deletions
diff --git a/share/spack/qa/check_dependencies b/share/spack/qa/check_dependencies deleted file mode 100755 index e999463b03..0000000000 --- a/share/spack/qa/check_dependencies +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env bash -# -# Description: -# Check to see if dependencies are installed. -# If not, warn the user and tell them how to -# install these dependencies. -# -# Usage: -# check-deps <dep> ... -# -# Options: -# One or more dependencies. Must use name of binary. - -for dep in "$@"; do - if ! which $dep &> /dev/null; then - # Map binary name to package name - case $dep in - sphinx-apidoc|sphinx-build) - spack_package=py-sphinx - pip_package=sphinx - ;; - coverage) - spack_package=py-coverage - pip_package=coverage - ;; - flake8) - spack_package=py-flake8 - pip_package=flake8 - ;; - dot) - spack_package=graphviz - ;; - git) - spack_package=git - ;; - hg) - spack_package=mercurial - pip_package=mercurial - ;; - svn) - spack_package=subversion - ;; - *) - spack_package=$dep - pip_package=$dep - ;; - esac - - echo "ERROR: $dep is required to run this script." - echo - - if [[ $spack_package ]]; then - echo "To install with Spack, run:" - echo " $ spack install $spack_package" - fi - - if [[ $pip_package ]]; then - echo "To install with pip, run:" - echo " $ pip install $pip_package" - fi - - if [[ $spack_package || $pip_package ]]; then - echo "Then add the bin directory to your PATH." - fi - - exit 1 - fi - - # Flake8 and Sphinx require setuptools in order to run. - # Otherwise, they print out this error message: - # - # Traceback (most recent call last): - # File: "/usr/bin/flake8", line 5, in <module> - # from pkg_resources import load_entry_point - # ImportError: No module named pkg_resources - # - # Print a more useful error message if setuptools not found. - if [[ $dep == flake8 || $dep == sphinx* ]]; then - # Find which Python is being run - # Spack-installed packages have a hard-coded shebang - python_cmd=$(head -n 1 $(which $dep) | cut -c 3-) - # May not have a shebang - if [[ $python_cmd != *python* ]]; then - python_cmd=python - fi - # Check if setuptools is in the PYTHONPATH - if ! $python_cmd -c "import setuptools" 2> /dev/null; then - echo "ERROR: setuptools is required to run $dep." - echo "Please add it to your PYTHONPATH." - - exit 1 - fi - fi -done - -echo "Dependencies found." diff --git a/share/spack/qa/run-build-tests b/share/spack/qa/run-build-tests new file mode 100755 index 0000000000..b5d5aed28f --- /dev/null +++ b/share/spack/qa/run-build-tests @@ -0,0 +1,29 @@ +#!/bin/bash -e +# +# Description: +# Runs Spack build smoke tests. This installs a few packages that +# cover different parts of the build system. It is not an exhaustive +# test of Spack's packages. +# +# Usage: +# run-build-tests +# +. "$(dirname $0)/setup.sh" +check_dependencies ${coverage} git hg svn + +# Move to root directory of Spack +# Allows script to be run from anywhere +cd "$SPACK_ROOT" + +# Make sure we have a spec to build. +if [ -z "$SPEC" ]; then + echo "Error: run-build-tests requires the $SPEC to build to be set." + exit 1 +fi + +# Print compiler information +spack config get compilers + +# Run some build smoke tests, potentially with code coverage +${coverage_run} bin/spack install -v ${SPEC} +${coverage_combine} diff --git a/share/spack/qa/run-doc-tests b/share/spack/qa/run-doc-tests index ca892d7eb4..b9a05aa3c8 100755 --- a/share/spack/qa/run-doc-tests +++ b/share/spack/qa/run-doc-tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash -e # # Description: # Builds Spack documentation and checks for @@ -8,33 +8,12 @@ # Usage: # run-doc-tests # -# Notes: -# Requires sphinx, graphviz, git, mercurial, and subversion. -# - -QA_DIR="$(dirname "$0")" -SPACK_ROOT="$QA_DIR/../../.." -DOC_DIR="$SPACK_ROOT/lib/spack/docs" - -# Array of dependencies -deps=( - sphinx-apidoc - sphinx-build - dot - git - hg - svn -) - -# Check for dependencies -"$QA_DIR/check_dependencies" "${deps[@]}" || exit 1 - -# Add Spack to the PATH. -export PATH="$SPACK_ROOT/bin:$PATH" +. "$(dirname $0)/setup.sh" +check_dependencies sphinx-apidoc sphinx-build dot git hg svn # Move to documentation directory # Allows script to be run from anywhere -cd "$DOC_DIR" +cd "$SPACK_ROOT/lib/spack/docs" # Treat warnings as fatal errors make clean --silent diff --git a/share/spack/qa/run-flake8-tests b/share/spack/qa/run-flake8-tests index 83469eeb9d..29fc15f9d7 100755 --- a/share/spack/qa/run-flake8-tests +++ b/share/spack/qa/run-flake8-tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash -e # # Description: # Runs source code style checks on Spack. @@ -8,22 +8,7 @@ # Usage: # run-flake8-tests # -# Notes: -# Requires flake8. -# - -QA_DIR="$(dirname "$0")" -SPACK_ROOT="$QA_DIR/../../.." - -# Array of dependencies -deps=( - flake8 -) - -# Check for dependencies -"$QA_DIR/check_dependencies" "${deps[@]}" || exit 1 - -# Add Spack to the PATH. -export PATH="$SPACK_ROOT/bin:$PATH" +. "$(dirname $0)/setup.sh" +check_dependencies flake8 -exec spack flake8 +spack flake8 diff --git a/share/spack/qa/run-unit-tests b/share/spack/qa/run-unit-tests index c266665ccb..7e300280ff 100755 --- a/share/spack/qa/run-unit-tests +++ b/share/spack/qa/run-unit-tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/bash -e # # Description: # Runs Spack unit tests. @@ -10,44 +10,16 @@ # Optionally add one or more unit tests # to only run these tests. # -# Notes: -# Requires coverage, git, mercurial, and subversion. -# - -QA_DIR="$(dirname "$0")" -SPACK_ROOT="$QA_DIR/../../.." - -# Array of dependencies -deps=( - coverage - git - hg - svn -) - -# Check for dependencies -"$QA_DIR/check_dependencies" "${deps[@]}" || exit 1 - -# Add Spack to the PATH. -export PATH="$SPACK_ROOT/bin:$PATH" +. "$(dirname $0)/setup.sh" +check_dependencies ${coverage} git hg svn # Move to root directory of Spack # Allows script to be run from anywhere cd "$SPACK_ROOT" -# Run integration tests -# TODO: should these be separated into a different test suite? -source "$SPACK_ROOT/share/spack/setup-env.sh" -spack compilers +# Print compiler information spack config get compilers # Run unit tests with code coverage -py_ver=$(python -c 'import platform; print(platform.python_version())') -if [[ "$py_ver" == 2.7* || "$py_ver" == 3.6* ]]; -then - coverage run bin/spack install -v libdwarf - coverage run bin/spack test "$@" && coverage combine -else - spack install -v libdwarf - spack test "$@" -fi +${coverage_run} bin/spack test "$@" +${coverage_combine} diff --git a/share/spack/qa/setup.sh b/share/spack/qa/setup.sh new file mode 100755 index 0000000000..98c79a0457 --- /dev/null +++ b/share/spack/qa/setup.sh @@ -0,0 +1,118 @@ +#!/bin/bash -e +# +# Description: +# Common setup code to be sourced by Spack's test scripts. +# + +QA_DIR="$(dirname ${BASH_SOURCE[0]})" +SPACK_ROOT="$QA_DIR/../../.." + +# Source the setup script +. "$SPACK_ROOT/share/spack/setup-env.sh" + +# Set up some variables for running coverage tests. +if [[ "$COVERAGE" == true ]]; then + coverage=coverage + coverage_run="coverage run" + coverage_combine="coverage combine" +else + coverage="" + coverage_run="" + coverage_combine="" +fi + +# +# Description: +# Check to see if dependencies are installed. +# If not, warn the user and tell them how to +# install these dependencies. +# +# Usage: +# check-deps <dep> ... +# +# Options: +# One or more dependencies. Must use name of binary. +check_dependencies() { + for dep in "$@"; do + if ! which $dep &> /dev/null; then + # Map binary name to package name + case $dep in + sphinx-apidoc|sphinx-build) + spack_package=py-sphinx + pip_package=sphinx + ;; + coverage) + spack_package=py-coverage + pip_package=coverage + ;; + flake8) + spack_package=py-flake8 + pip_package=flake8 + ;; + dot) + spack_package=graphviz + ;; + git) + spack_package=git + ;; + hg) + spack_package=mercurial + pip_package=mercurial + ;; + svn) + spack_package=subversion + ;; + *) + spack_package=$dep + pip_package=$dep + ;; + esac + + echo "ERROR: $dep is required to run this script." + echo + + if [[ $spack_package ]]; then + echo "To install with Spack, run:" + echo " $ spack install $spack_package" + fi + + if [[ $pip_package ]]; then + echo "To install with pip, run:" + echo " $ pip install $pip_package" + fi + + if [[ $spack_package || $pip_package ]]; then + echo "Then add the bin directory to your PATH." + fi + + exit 1 + fi + + # Flake8 and Sphinx require setuptools in order to run. + # Otherwise, they print out this error message: + # + # Traceback (most recent call last): + # File: "/usr/bin/flake8", line 5, in <module> + # from pkg_resources import load_entry_point + # ImportError: No module named pkg_resources + # + # Print a more useful error message if setuptools not found. + if [[ $dep == flake8 || $dep == sphinx* ]]; then + # Find which Python is being run + # Spack-installed packages have a hard-coded shebang + python_cmd=$(head -n 1 $(which $dep) | cut -c 3-) + # May not have a shebang + if [[ $python_cmd != *python* ]]; then + python_cmd=python + fi + # Check if setuptools is in the PYTHONPATH + if ! $python_cmd -c "import setuptools" 2> /dev/null; then + echo "ERROR: setuptools is required to run $dep." + echo "Please add it to your PYTHONPATH." + + exit 1 + fi + fi + done + echo "Dependencies found." +} |