From f31ea18146a686d1ce838a9b6e6785cbfae35bbf Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 9 Mar 2009 14:56:13 -0700 Subject: tests: add another sort/nmerge test * tests/Makefile.am (TESTS): Add sort-merge-fdlimit. * tests/misc/sort-merge-fdlimit: New file. * doc/coreutils.texi (sort invocation): Document that we now silently lower nmerge if necessary. Patch by Paul Eggert, Nima Nikzad, Max Chang, Alexander Nguyen, Sahil Amoli, and Nick Graham. --- tests/misc/sort-merge-fdlimit | 54 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100755 tests/misc/sort-merge-fdlimit (limited to 'tests/misc') diff --git a/tests/misc/sort-merge-fdlimit b/tests/misc/sort-merge-fdlimit new file mode 100755 index 000000000..82305be41 --- /dev/null +++ b/tests/misc/sort-merge-fdlimit @@ -0,0 +1,54 @@ +#!/bin/sh +# Test whether sort avoids opening more file descriptors than it is +# allowed when merging files. + +# Copyright (C) 2009 Free Software Foundation, Inc. + +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +if test "$VERBOSE" = yes; then + set -x + sort --version +fi + +. $srcdir/test-lib.sh +require_ulimit_ + +mkdir in err || framework_failure + +fail=0 + +for i in `seq 17`; do + echo $i >in/$i +done + +# When these tests are run inside the automated testing framework, they +# have one less available file descriptor than when run outside the +# automated testing framework. If a test with a batch size of b fails +# inside the ATF, then the same test with batch size b+1 may pass outside +# the ATF but fail inside it. + +# The default batch size (nmerge) is 16. +(ulimit -n 19 \ + && sort -m --batch-size=16 in/* 2>err/merge-default-err \ + || ! grep "open failed" err/merge-default-err) || fail=1 + +# If sort opens a file (/dev/urandom) to sort by random hashes of keys, +# it needs to consider this file against its limit on open file +# descriptors. +(ulimit -n 20 \ + && sort -mR --batch-size=16 in/* 2>err/merge-random-err \ + || ! grep "open failed" err/merge-random-err) || fail=1 + +Exit $fail -- cgit v1.2.3-70-g09d2