diff options
author | Jim Meyering <meyering@redhat.com> | 2007-06-02 23:04:10 +0200 |
---|---|---|
committer | Jim Meyering <meyering@redhat.com> | 2007-10-07 19:44:38 +0200 |
commit | 99b039fead8d72936d0d558198235eee03016904 (patch) | |
tree | c091380766498c29066a6533aff4e3b20ceb0e28 /tests/misc/mktemp | |
parent | 7eab7d027e624350cc9749dcbb963e2d6d6a9b46 (diff) | |
download | coreutils-99b039fead8d72936d0d558198235eee03016904.tar.xz |
New program: mktemp.
* NEWS: Mention this.
* README: Add mktemp to the list.
* AUTHORS: Add this: mktemp: Jim Meyering
* src/mktemp.c: New file.
* src/Makefile.am (bin_PROGRAMS): Add mktemp.
(mktemp_LDADD): Add $(LIB_GETHRXTIME).
* man/mktemp.x: New file.
* man/Makefile.am (dist_man_MANS): Add mktemp.1.
(mktemp.1): New dependency.
* man/.cvsignore: Add mktemp.1.
* man/.gitignore: New file.
* src/.cvsignore, src/.gitignore: Add mktemp.
* tests/misc/mktemp: New file.
* tests/misc/Makefile.am (TESTS): Add mktemp.
* tests/Coreutils.pm (run_tests): Give the POST-test function
access to stdout and stderr contents, so it can verify that
the named-on-stdout file/dir does indeed exist and has proper
permissions, etc.
[po/ChangeLog]
* POTFILES.in: Add src/mktemp.c.
Diffstat (limited to 'tests/misc/mktemp')
-rwxr-xr-x | tests/misc/mktemp | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/tests/misc/mktemp b/tests/misc/mktemp new file mode 100755 index 000000000..da576e8b2 --- /dev/null +++ b/tests/misc/mktemp @@ -0,0 +1,121 @@ +#!/bin/sh +# Test "mktemp". + +# Copyright (C) 2007 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +: ${PERL=perl} +: ${srcdir=.} + +$PERL -e 1 > /dev/null 2>&1 || { + echo 1>&2 "$0: configure didn't find a usable version of Perl," \ + "so can't run this test" + exit 77 +} + +me=`echo $0|sed 's,.*/,,'` +exec $PERL -w -I$srcdir/.. -MCoreutils -M"CuTmpdir qw($me)" -- - <<\EOF +require 5.003; +use strict; + +(my $ME = $0) =~ s|.*/||; + +sub check_tmp($$) +{ + my ($file, $file_or_dir) = @_; + + my (undef, undef, $mode, undef) = stat $file + or die "$ME: failed to stat $file: $!\n"; + my $required_mode; + if ($file_or_dir eq 'D') { + -d $file or die "$ME: $file isn't a directory\n"; + -x $file or die "$ME: $file isn't owner-searchable\n"; + $required_mode = 0700; + } elsif ($file_or_dir eq 'F') { + -f $file or die "$ME: $file isn't a regular file\n"; + $required_mode = 0600; + } + -r $file or die "$ME: $file isn't owner-readable\n"; + -w $file or die "$ME: $file isn't owner-writable\n"; + ($mode & 0777) == $required_mode + or die "$ME: $file doesn't have required permissions\n"; + + $file_or_dir eq 'D' + and do { rmdir $file or die "$ME: failed to rmdir $file: $!\n" }; + $file_or_dir eq 'F' + and do { unlink $file or die "$ME: failed to unlink $file: $!\n" }; +} + +# Turn off localisation of executable's ouput. +@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3; +my $prog = 'mktemp'; + +my @Tests = + ( + # test-name, [option, option, ...] {OUT=>"expected-output"} + # + ['too-many', 'a b', + {ERR=>"$prog: too many templates\n" + . "Try `$prog --help' for more information.\n"}, {EXIT => 1} ], + ['too-many-q', '-q a b', {EXIT => 1} ], + + ['too-few-x', 'foo.XX', + {ERR=>"$prog: too few X's in template `foo.XX'\n"}, {EXIT => 1} ], + + ['1f', 'bar.XXXX', {OUT => "bar.ZZZZ\n"}, + {OUT_SUBST => 's,\.....$,.ZZZZ,'}, + {POST => sub { my ($f) = @_; defined $f or return; chomp $f; + check_tmp $f, 'F'; }} + ], + + # Create a temporary directory. + ['1d', '-d f.XXXX', {OUT => "f.ZZZZ\n"}, + {OUT_SUBST => 's,\.....$,.ZZZZ,'}, + {POST => sub { my ($f) = @_; defined $f or return; chomp $f; + check_tmp $f, 'D'; }} + ], + + # Use a template consisting solely of X's + ['1d-allX', '-d XXXX', {OUT => "ZZZZ\n"}, + {OUT_SUBST => 's,^....$,ZZZZ,'}, + {POST => sub { my ($f) = @_; defined $f or return; chomp $f; + check_tmp $f, 'D'; }} + ], + + ['invalid-tmpl', '-t a/bXXXX', + {ERR=>"$prog: invalid template, `a/bXXXX', " + . "contains directory separator\n"}, {EXIT => 1} ], + + ['invalid-t2', '--tmpdir=a /bXXXX', + {ERR=>"$prog: invalid template, `/bXXXX'; " + . "with --tmpdir, it may not be absolute\n"}, {EXIT => 1} ], + + ['tmp-w-slash', '--tmpdir=. a/bXXXX', + {PRE => sub {mkdir 'a',0755 or die "a: $!\n"}}, + {OUT_SUBST => 's,b....$,bZZZZ,'}, + {OUT => "./a/bZZZZ\n"}, + {POST => sub { my ($f) = @_; defined $f or return; chomp $f; + check_tmp $f, 'F'; unlink $f; rmdir 'a' or die "rmdir a: $!\n" }} + ], + ); + +my $save_temps = $ENV{DEBUG}; +my $verbose = $ENV{VERBOSE}; + +my $fail = run_tests ($ME, $prog, \@Tests, $save_temps, $verbose); +exit $fail; +EOF |