-
Notifications
You must be signed in to change notification settings - Fork 37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Code coverage #377
Merged
GabrielSoto-INL
merged 8 commits into
idaholab:devel
from
caleb-sitton-inl:code-coverage
Aug 2, 2024
Merged
Code coverage #377
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
6c7151f
Added functionality for customizing python command in argument to heron
caleb-sitton-inl ce76c89
Implemented code coverage
caleb-sitton-inl 29a1544
Edits to code coverage
caleb-sitton-inl 67a55db
Modifications to allow coverage to track calls to HERON scripts from …
caleb-sitton-inl 0d9c014
Corrected mistake in README
caleb-sitton-inl 9070f5f
Corrected comments
caleb-sitton-inl de2393f
Minor fixes
caleb-sitton-inl 99a2c30
Fixed issue with pathing to raven
caleb-sitton-inl File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
#!/bin/bash | ||
SCRIPT_DIRNAME=`dirname $0` | ||
SCRIPT_DIR=`(cd $SCRIPT_DIRNAME; pwd)` | ||
RAVEN_DIR=`python -c 'from src._utils import get_raven_loc; print(get_raven_loc())'` | ||
source $RAVEN_DIR/scripts/establish_conda_env.sh --quiet --load | ||
RAVEN_LIBS_PATH=`conda env list | awk -v rln="$RAVEN_LIBS_NAME" '$0 ~ rln {print $NF}'` | ||
BUILD_DIR=${BUILD_DIR:=$RAVEN_LIBS_PATH/build} | ||
INSTALL_DIR=${INSTALL_DIR:=$RAVEN_LIBS_PATH} | ||
PYTHON_CMD=${PYTHON_CMD:=python} | ||
JOBS=${JOBS:=1} | ||
mkdir -p $BUILD_DIR | ||
mkdir -p $INSTALL_DIR | ||
DOWNLOADER='curl -C - -L -O ' | ||
|
||
ORIGPYTHONPATH="$PYTHONPATH" | ||
|
||
update_python_path () | ||
{ | ||
if ls -d $INSTALL_DIR/lib/python* | ||
then | ||
export PYTHONPATH=`ls -d $INSTALL_DIR/lib/python*/site-packages/`:"$ORIGPYTHONPATH" | ||
fi | ||
} | ||
|
||
update_python_path | ||
PATH=$INSTALL_DIR/bin:$PATH | ||
|
||
if which coverage | ||
then | ||
echo coverage already available, skipping building it. | ||
else | ||
if curl http://www.energy.gov > /dev/null | ||
then | ||
echo Successfully got data from the internet | ||
else | ||
echo Could not connect to internet | ||
fi | ||
|
||
cd $BUILD_DIR | ||
#SHA256=56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1 | ||
$DOWNLOADER https://files.pythonhosted.org/packages/ef/05/31553dc038667012853d0a248b57987d8d70b2d67ea885605f87bcb1baba/coverage-7.5.4.tar.gz | ||
tar -xvzf coverage-7.5.4.tar.gz | ||
cd coverage-7.5.4 | ||
(unset CC CXX; $PYTHON_CMD setup.py install --prefix=$INSTALL_DIR) | ||
fi | ||
|
||
update_python_path | ||
|
||
cd $SCRIPT_DIR | ||
|
||
#coverage help run | ||
SRC_DIR=`(cd src && pwd)` | ||
|
||
# get display var | ||
DISPLAY_VAR=`(echo $DISPLAY)` | ||
# reset it | ||
export DISPLAY= | ||
|
||
export COVERAGE_RCFILE="$SRC_DIR/../tests/.coveragerc" | ||
SOURCE_DIRS=($SRC_DIR,$SRC_DIR/../templates/) | ||
OMIT_FILES=($SRC_DIR/dispatch/twin_pyomo_test.py,$SRC_DIR/dispatch/twin_pyomo_test_rte.py,$SRC_DIR/dispatch/twin_pyomo_limited_ramp.py,$SRC_DIR/ArmaBypass.py) | ||
EXTRA="--source=${SOURCE_DIRS[@]} --omit=${OMIT_FILES[@]} --parallel-mode " | ||
export COVERAGE_FILE=`pwd`/.coverage | ||
|
||
coverage erase | ||
($RAVEN_DIR/run_tests "$@" --re=HERON/tests --python-command="coverage run $EXTRA " || echo run_tests done but some tests failed) | ||
|
||
#get DISPLAY BACK | ||
DISPLAY=$DISPLAY_VAR | ||
|
||
## Prepare data and generate the html documents | ||
coverage combine | ||
coverage html | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# .coveragerc to control coverage.py | ||
[run] | ||
#branch = True | ||
parallel = True | ||
|
||
[report] | ||
# Regexes for lines to exclude from consideration | ||
exclude_lines = | ||
# Have to re-enable the standard pragma | ||
pragma: no cover | ||
|
||
# Don't complain about missing debug-only code: | ||
#def __repr__ | ||
#if self\.debug | ||
|
||
# Don't complain if tests don't hit defensive assertion code: | ||
raise AssertionError | ||
raise NotImplementedError | ||
raise IOError | ||
raise Exception | ||
|
||
# Don't complain for the things under development | ||
pragma: under development | ||
|
||
# Don't complain if non-runnable code isn't run: | ||
if 0: | ||
if __name__ == .__main__.: | ||
|
||
ignore_errors = True | ||
|
||
[html] | ||
directory = tests/coverage_html_report |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Code Coverage | ||
## Coverage source | ||
The "source" for code coverage defines a list of files over which code coverage is checked. This is defined in the `HERON/check_py_coverage.sh` script. By default when the source directory is specified, coverage.py measures coverage over all files in the source directory(ies) ending with .py, .pyw, .pyo, or .pyc that have typical punctuation. It also measures all files in subdirectories that also include an `__init__.py` file. For details see https://coverage.readthedocs.io/en/7.5.4/source.html#source | ||
|
||
HERON code coverage is currently set up to run all files in the `HERON/src/` directory as well as in the `HERON/templates/` directory (provided the limitations listed above). Exceptions, which are in these directories but not covered, are listed as omitted files and directories in `HERON/check_py_coverage.sh`. Currently this list is comprised of the following files: | ||
- `HERON/src/ARMABypass.py` | ||
- `HERON/src/dispatch/twin_pyomo_test.py` | ||
- `HERON/src/dispatch/twin_pyomo_test_rte.py` | ||
- `HERON/src/dispatch/twin_pyomo_limited_ramp.py` | ||
|
||
Note additionally that files in some subdirectories of `HERON/src` are omitted automatically by coverage.py because those subdirectories lack an `__init__.py` file. An example is the `HERON/src/Testers/` directory. |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
just wondering if there is a scenario where the
--python-comand
and--python_command_for_raven
would ever be different?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't know of a current practical scenario where a user would want to make them different. To provide a relatively impractical example, this could allow users to check what functions in HERON are called from within the raven inner. This would be done by using some form of
coverage run
as thepython_command_for_raven
, but keepingpython_command
as something likepython
. The idea was to maximize the flexibility of the new functionality for future use cases. If this flexibility is removed, some of the changed files could be simplified, which could be worth it. Also, there would be no reduction of flexibility from the current code; prior to this PR, it has assumed that the python commands will be the same.