forked from cjdoucette/ovs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests: Enable running parallel unit tests for Windows.
testsuite uses mkfifo in its job dispatcher that manages parallel unit tests. MinGW does not have a mkfifo. This results in unit tests running serially on Windows. Right now it takes up to approximately 40 minutes to run all the unit tests on Windows. This commit provides a job dispatcher for MinGW that uses temporary files instead of mkfifo to manage parallel jobs. With this commit, on a Windows machine with 4 cores and with 8 parallel unit test sessions, it takes approximately 8 minutes to finish a unit test run. Signed-off-by: Gurucharan Shetty <[email protected]> Acked-by: Eitan Eliahu <[email protected]> Acked-by: Ben Pfaff <[email protected]>
- Loading branch information
Showing
3 changed files
with
83 additions
and
2 deletions.
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
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,76 @@ | ||
--- testsuite 2015-02-11 17:19:21.654646439 -0800 | ||
+++ testsuite 2015-02-11 17:15:03.810653032 -0800 | ||
@@ -4669,6 +4669,73 @@ | ||
fi | ||
exec 6<&- | ||
wait | ||
+elif test $at_jobs -ne 1 && | ||
+ test "$IS_WIN32" = "yes"; then | ||
+ # FIFO job dispatcher. | ||
+ trap 'at_pids= | ||
+ for at_pid in `jobs -p`; do | ||
+ at_pids="$at_pids $at_job_group$at_pid" | ||
+ done | ||
+ if test -n "$at_pids"; then | ||
+ at_sig=TSTP | ||
+ test "${TMOUT+set}" = set && at_sig=STOP | ||
+ kill -$at_sig $at_pids 2>/dev/null | ||
+ fi | ||
+ kill -STOP $$ | ||
+ test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP | ||
+ | ||
+ echo | ||
+ # Turn jobs into a list of numbers, starting from 1. | ||
+ running_jobs="`pwd`/tests/jobdispatcher" | ||
+ mkdir -p $running_jobs | ||
+ at_joblist=`$as_echo "$at_groups" | sed -n 1,${at_jobs}p` | ||
+ | ||
+ set X $at_joblist | ||
+ shift | ||
+ for at_group in $at_groups; do | ||
+ $at_job_control_on 2>/dev/null | ||
+ ( | ||
+ # Start one test group. | ||
+ $at_job_control_off | ||
+ touch $running_jobs/$at_group | ||
+ trap 'set +x; set +e | ||
+ trap "" PIPE | ||
+ echo stop > "$at_stop_file" | ||
+ rm -f $running_jobs/$at_group | ||
+ as_fn_exit 141' PIPE | ||
+ at_fn_group_prepare | ||
+ if cd "$at_group_dir" && | ||
+ at_fn_test $at_group && | ||
+ . "$at_test_source" | ||
+ then :; else | ||
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5 | ||
+$as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;} | ||
+ at_failed=: | ||
+ fi | ||
+ rm -f $running_jobs/$at_group | ||
+ at_fn_group_postprocess | ||
+ ) & | ||
+ $at_job_control_off | ||
+ shift # Consume one token. | ||
+ if test $# -gt 0; then :; else | ||
+ while [ "`ls -l $running_jobs 2>/dev/null | wc -l`" -gt "$at_jobs" ]; do | ||
+ sleep 0.1 | ||
+ done | ||
+ set x $* | ||
+ fi | ||
+ test -f "$at_stop_file" && break | ||
+ done | ||
+ # Read back the remaining ($at_jobs - 1) tokens. | ||
+ set X $at_joblist | ||
+ shift | ||
+ if test $# -gt 0; then | ||
+ shift | ||
+ while [ "`ls -l $running_jobs | wc -l`" -gt 1 ]; do | ||
+ sleep 0.1 | ||
+ done | ||
+ fi | ||
+ rmdir $running_jobs | ||
+ wait | ||
else | ||
# Run serially, avoid forks and other potential surprises. | ||
for at_group in $at_groups; do |