-#! /usr/bin/perl
+#! /usr/bin/env perl
+# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
+#
+# Licensed under the OpenSSL license (the "License"). You may not use
+# this file except in compliance with the License. You can obtain a copy
+# in the file LICENSE in the source distribution or at
+# https://www.openssl.org/source/license.html
+
use strict;
use warnings;
use File::Spec::Functions;
use File::Copy;
use File::Basename;
-use OpenSSL::Test qw/:DEFAULT top_file/;
+use if $^O ne "VMS", 'File::Glob' => qw/glob/;
+use OpenSSL::Test qw/:DEFAULT bldtop_file/;
setup("test_rehash");
-plan tests => 4;
+#If "openssl rehash -help" fails it's most likely because we're on a platform
+#that doesn't support the rehash command (e.g. Windows)
+plan skip_all => "test_rehash is not available on this platform"
+ unless run(app(["openssl", "rehash", "-help"]));
+
+plan tests => 5;
indir "rehash.$$" => sub {
prepare();
indir "rehash.$$" => sub {
prepare();
chmod 0500, curdir();
- isnt(run(app(["openssl", "rehash", curdir()])), 1,
- 'Testing rehash operations on readonly directory');
+ SKIP: {
+ if (!ok(!open(FOO, ">unwritable.txt"),
+ "Testing that we aren't running as a privileged user, such as root")) {
+ close FOO;
+ skip "It's pointless to run the next test as root", 1;
+ }
+ isnt(run(app(["openssl", "rehash", curdir()])), 1,
+ 'Testing rehash operations on readonly directory');
+ }
chmod 0700, curdir(); # make it writable again, so cleanup works
}, create => 1, cleanup => 1;
sub prepare {
my @sourcefiles =
- sort map { glob(top_file('certs', 'demo', "*.$_")) } ('pem',
- 'crt',
- 'cer',
- 'crl');
+ sort map { glob(bldtop_file('certs', 'demo', "*.$_")) } ('pem',
+ 'crt',
+ 'cer',
+ 'crl');
my @destfiles = ();
foreach (@sourcefiles) {
copy($_, curdir());