~ubuntu-branches/ubuntu/utopic/coreutils/utopic-proposed

« back to all changes in this revision

Viewing changes to tests/misc/sort-merge-fdlimit

  • Committer: Package Import Robot
  • Author(s): Colin Watson
  • Date: 2012-11-28 03:03:42 UTC
  • mfrom: (8.3.4 sid)
  • Revision ID: package-import@ubuntu.com-20121128030342-21zanj8354gas5gr
Tags: 8.20-3ubuntu1
* Resynchronise with Debian.  Remaining changes:
  - Make 'uname -i -p' return the real processor/hardware, instead of
    unknown.
  - Build-depend on gettext:any instead of on gettext, so that apt-get can
    properly resolve build-dependencies on the tool when cross-building.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/bin/sh
2
 
# Test whether sort avoids opening more file descriptors than it is
3
 
# allowed when merging files.
4
 
 
5
 
# Copyright (C) 2009-2011 Free Software Foundation, Inc.
6
 
 
7
 
# This program is free software: you can redistribute it and/or modify
8
 
# it under the terms of the GNU General Public License as published by
9
 
# the Free Software Foundation, either version 3 of the License, or
10
 
# (at your option) any later version.
11
 
 
12
 
# This program is distributed in the hope that it will be useful,
13
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 
# GNU General Public License for more details.
16
 
 
17
 
# You should have received a copy of the GNU General Public License
18
 
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
 
 
20
 
. "${srcdir=.}/init.sh"; path_prepend_ ../src
21
 
print_ver_ sort
22
 
require_ulimit_
23
 
 
24
 
mkdir in err || framework_failure_
25
 
 
26
 
 
27
 
for i in `seq 17`; do
28
 
  echo $i >in/$i
29
 
done
30
 
seq 17 >some-data
31
 
 
32
 
# When these tests are run inside the automated testing framework, they
33
 
# have one less available file descriptor than when run outside the
34
 
# automated testing framework. If a test with a batch size of b fails
35
 
# inside the ATF, then the same test with batch size b+1 may pass outside
36
 
# the ATF but fail inside it.
37
 
 
38
 
# The default batch size (nmerge) is 16.
39
 
(ulimit -n 19 \
40
 
   && sort -m --batch-size=16 in/* 2>err/merge-default-err \
41
 
   || ! grep "open failed" err/merge-default-err) || fail=1
42
 
 
43
 
# If sort opens a file to sort by random hashes of keys,
44
 
# it needs to consider this file against its limit on open file
45
 
# descriptors.  Test once with the default random source
46
 
# and once with an explicit source.
47
 
for randsource in '' --random-source=some-data; do
48
 
  (ulimit -n 20 \
49
 
     && sort -mR $randsource --batch-size=16 in/* 2>err/merge-random-err \
50
 
     || ! grep "open failed" err/merge-random-err) || fail=1
51
 
done
52
 
 
53
 
# 'sort -m' should work in a limited file descriptor
54
 
# environment when the output is repeatedly one of its inputs.
55
 
# In coreutils 8.7 and earlier, 'sort' would dump core on this test.
56
 
#
57
 
# This test uses 'exec' to redirect file descriptors rather than
58
 
# ordinary redirection on the 'sort' command.  This is intended to
59
 
# work around bugs in OpenBSD /bin/sh, and some other sh variants,
60
 
# that squirrel away file descriptors before closing them; see
61
 
# <http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00075.html>.
62
 
# This test finds the bug only with shells that do not close FDs on
63
 
# exec, and will miss the bug (if present) on other shells, but it's
64
 
# not easy to fix this without running afoul of the OpenBSD-like sh bugs.
65
 
(seq 6 && echo 6) >exp || fail=1
66
 
echo 6 >out || fail=1
67
 
(exec 3<&- 4<&- 5<&- 6</dev/null 7<&6 8<&6 9<&6 &&
68
 
 ulimit -n 10 &&
69
 
 sort -n -m --batch-size=7 -o out out in/1 in/2 in/3 in/4 in/5 out
70
 
) &&
71
 
compare out exp || fail=1
72
 
 
73
 
Exit $fail