Add a simple test for the new rehash command
authorRichard Levitte <levitte@openssl.org>
Wed, 9 Sep 2015 15:36:21 +0000 (17:36 +0200)
committerRichard Levitte <levitte@openssl.org>
Wed, 9 Sep 2015 17:12:09 +0000 (19:12 +0200)
Reviewed-by: Rich Salz <rsalz@openssl.org>
test/recipes/40-test_rehash.t [new file with mode: 0644]

diff --git a/test/recipes/40-test_rehash.t b/test/recipes/40-test_rehash.t
new file mode 100644 (file)
index 0000000..514d0d3
--- /dev/null
@@ -0,0 +1,56 @@
+#! /usr/bin/perl
+
+use strict;
+use warnings;
+
+use File::Spec::Functions;
+use File::Copy;
+use File::Basename;
+use OpenSSL::Test qw/:DEFAULT top_file/;
+
+setup("test_rehash");
+
+plan tests => 4;
+
+indir "rehash.$$" => sub {
+    prepare();
+    ok(run(app(["openssl", "rehash", curdir()])),
+       'Testing normal rehash operations');
+}, create => 1, cleanup => 1;
+
+indir "rehash.$$" => sub {
+    prepare(sub { chmod 400, $_ foreach (@_); });
+    ok(run(app(["openssl", "rehash", curdir()])),
+       'Testing rehash operations on readonly files');
+}, create => 1, cleanup => 1;
+
+indir "rehash.$$" => sub {
+    ok(run(app(["openssl", "rehash", curdir()])),
+       'Testing rehash operations on empty directory');
+}, create => 1, cleanup => 1;
+
+indir "rehash.$$" => sub {
+    prepare();
+    chmod 0500, curdir();
+    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');
+    my @destfiles = ();
+    foreach (@sourcefiles) {
+        copy($_, curdir());
+        push @destfiles, catfile(curdir(), basename($_));
+    }
+    foreach (@_) {
+        die "Internal error, argument is not CODE"
+            unless (ref($_) eq 'CODE');
+        $_->(@destfiles);
+    }
+}