2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-22 01:51:26 +00:00
ovs/tests/testsuite.patch
Gurucharan Shetty ddd347c2b4 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 <gshetty@nicira.com>
Acked-by: Eitan Eliahu <eliahue@vmware.com>
Acked-by: Ben Pfaff <blp@nicira.com>
2015-02-13 10:41:43 -08:00

77 lines
2.1 KiB
Diff

--- 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