summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Deegan <bill@baddogconsulting.com>2017-12-10 22:25:12 (GMT)
committerGitHub <noreply@github.com>2017-12-10 22:25:12 (GMT)
commit9414297693816cf1a987d58bb90d0f0251dabeed (patch)
tree3740538958ea5e7f44caa5cd985fd24b265b136c
parent0dffe542497a1936f96251ad2954d5d5b6ce75b5 (diff)
parenta19c00f5061b620b27f570851566cd93c8b2e0db (diff)
downloadSCons-9414297693816cf1a987d58bb90d0f0251dabeed.zip
SCons-9414297693816cf1a987d58bb90d0f0251dabeed.tar.gz
SCons-9414297693816cf1a987d58bb90d0f0251dabeed.tar.bz2
Merge pull request #28 from dmoody256/CoverageTesting
Travis coverage testing with python coverage and coveralls.io
-rw-r--r--.coveralls.yml3
-rw-r--r--.travis.yml70
-rwxr-xr-xruntest.py26
3 files changed, 87 insertions, 12 deletions
diff --git a/.coveralls.yml b/.coveralls.yml
deleted file mode 100644
index 7a1d4a3..0000000
--- a/.coveralls.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-service_name: travis-pro
-repo_token: 1mUyRvK28QaLiKElPYgQGVlrUHxFhS037
-
diff --git a/.travis.yml b/.travis.yml
index e0ea70e..a593e1c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,6 @@
dist: trusty
-before_install:
+
+install:
- sudo apt-get -y install clang gdc docbook-xml xsltproc libxml2-dev libxslt-dev python-pip python-dev fop docbook-xsl-doc-pdf texlive-full biber texmaker build-essential libpcre3-dev autoconf automake libtool bison subversion git
- sudo pip install lxml
- sudo wget http://master.dl.sourceforge.net/project/d-apt/files/d-apt.list -O /etc/apt/sources.list.d/d-apt.list
@@ -12,5 +13,68 @@ before_install:
- tar xzf rel-3.0.12.tar.gz
- cd swig-rel-3.0.12 && ./autogen.sh && ./configure --prefix=/usr && make && sudo make install && cd ..
-script:
- - python runtest.py -a || if [[ $? == 2 ]]; then exit 0; else exit 1; fi
+jobs:
+ include:
+ - &test_job
+ stage: Test
+ script:
+ - n=0; while [[ $n -lt 10 ]]; do python runtest.py src/engine/SCons/JobTests.py && break; n=$((n+1)); done; if [ "$n" -gt "9" ]; then false; fi
+ - echo "src/engine/SCons/JobTests.py" > exclude_jobtest
+ - python runtest.py -a --exclude-list exclude_jobtest || if [[ $? == 2 ]]; then true; else false; fi
+ before_script: skip
+ after_success: skip
+
+ - &coverage_jobs
+ stage: Coverage
+
+ before_script:
+ - sudo pip install coverage
+ - sudo pip install coveralls
+ - echo "import coverage" | sudo tee --append /usr/lib/python2.7/sitecustomize.py
+ - echo "coverage.process_startup()" | sudo tee --append /usr/lib/python2.7/sitecustomize.py
+
+ script:
+ - export TOTAL_BUILD_JOBS=8
+ - export COVERAGE_PROCESS_START=$PWD/.coveragerc
+ - echo "[run]" >> .coveragerc
+ - echo "source = $PWD/src" >> .coveragerc
+ - echo "parallel = True" >> .coveragerc
+ # WORKAROUND: attempt to retry JobTests.py if it fails and then continue if it passes, if it fails ten times
+ # then it is a real failure not related to intermittent travis failures
+ - n=0; while [[ $n -lt 10 ]]; do coverage run --rcfile=$PWD/.coveragerc runtest.py src/engine/SCons/JobTests.py && break; n=$((n+1)); done; if [ "$n" -gt "9" ]; then false; fi
+ # exclude JobTest.py becuase we already ran that
+ - echo "src/engine/SCons/JobTests.py" > exclude_jobtest
+ # also exclude this test since it overides the exit function which doesnt work with coverage
+ # more info here: https://coverage.readthedocs.io/en/coverage-4.4.2/subprocess.html#
+ # TODO: figure out how to cover test/exitfns.py
+ - echo "test/exitfns.py" >> exclude_jobtest
+ - python runtest.py -l -a --exclude-list exclude_jobtest > all_tests
+ - let "start = ($(wc -l < all_tests) / ${TOTAL_BUILD_JOBS}) * (${BUILD_JOB_NUM} - 1)"; true;
+ - let "end = ($(wc -l < all_tests) / ${TOTAL_BUILD_JOBS}) * ${BUILD_JOB_NUM}"
+ - if (( ${BUILD_JOB_NUM} == ${TOTAL_BUILD_JOBS} )); then end=$(wc -l < all_tests); fi
+ - if (( ${start} == 0 )); then start=1; fi
+ - sed -n ${start},${end}p all_tests > build_tests
+ - coverage run --rcfile=$PWD/.coveragerc runtest.py -f build_tests || if [[ $? == 2 ]]; then true; else false; fi
+
+ after_success:
+ - coverage combine
+ - coverage report
+ - coveralls --rcfile=$PWD/.coveragerc
+
+ env: BUILD_JOB_NUM=1
+
+ - <<: *coverage_jobs
+ env: BUILD_JOB_NUM=2
+ - <<: *coverage_jobs
+ env: BUILD_JOB_NUM=3
+ - <<: *coverage_jobs
+ env: BUILD_JOB_NUM=4
+ - <<: *coverage_jobs
+ env: BUILD_JOB_NUM=5
+ - <<: *coverage_jobs
+ env: BUILD_JOB_NUM=6
+ - <<: *coverage_jobs
+ env: BUILD_JOB_NUM=7
+ - <<: *coverage_jobs
+ env: BUILD_JOB_NUM=8
+ \ No newline at end of file
diff --git a/runtest.py b/runtest.py
index 487100b..88ea45c 100755
--- a/runtest.py
+++ b/runtest.py
@@ -72,6 +72,10 @@
# This is (will be) used for reporting results back
# to a central SCons test monitoring infrastructure.
#
+# --exclude-list file
+# list of tests to exclude in the current selection of test
+# mostly meant to easily exclude tests from -a option
+#
# (Note: There used to be a -v option that specified the SCons
# version to be tested, when we were installing in a version-specific
# library directory. If we ever resurrect that as the default, then
@@ -126,6 +130,7 @@ suppress_stdout = False
suppress_stderr = False
allow_pipe_files = True
quit_on_failure = False
+excludelistfile = None
usagestr = """\
Usage: runtest.py [OPTIONS] [TEST ...]
@@ -173,6 +178,8 @@ Options:
-X Test script is executable, don't feed to Python.
-x --exec SCRIPT Test SCRIPT.
--xml file Save results to file in SCons XML format.
+ --exclude-list FILE List of tests to exclude in the current selection of test,
+ mostly meant to easily exclude tests from the -a option
Environment Variables:
@@ -224,7 +231,7 @@ opts, args = getopt.getopt(args, "b:def:hj:klnP:p:qsv:Xx:t",
'quit-on-failure',
'short-progress', 'time',
'version=', 'exec=',
- 'verbose='])
+ 'verbose=', 'exclude-list='])
for o, a in opts:
if o in ['-b', '--baseline']:
@@ -284,7 +291,8 @@ for o, a in opts:
scons_exec = 1
elif o in ['-x', '--exec']:
scons = a
-
+ elif o in ['--exclude-list']:
+ excludelistfile = a
# --- setup stdout/stderr ---
@@ -642,7 +650,7 @@ if old_pythonpath:
# ---[ test discovery ]------------------------------------
tests = []
-
+excludetests = []
unittests = []
endtests = []
@@ -734,7 +742,7 @@ else:
tests.extend(unittests)
tests.extend(endtests)
tests.sort()
-
+
if not tests:
sys.stderr.write(usagestr + """
runtest.py: No tests were found.
@@ -743,9 +751,15 @@ runtest.py: No tests were found.
""")
sys.exit(1)
+if excludelistfile:
+ excludetests = open(excludelistfile, 'r').readlines()
+ excludetests = [x for x in excludetests if x[0] != '#']
+ excludetests = [x[:-1] for x in excludetests]
+ excludetests = [x.strip() for x in excludetests]
+ excludetests = [x for x in excludetests if len(x) > 0]
# ---[ test processing ]-----------------------------------
-
+tests = [t for t in tests if t not in excludetests]
tests = [Test(t) for t in tests]
if list_only:
@@ -927,4 +941,4 @@ else:
# tab-width:4
# indent-tabs-mode:nil
# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:
+# vim: set expandtab tabstop=4 shiftwidth=4: \ No newline at end of file