|
@@ -16,49 +16,58 @@ use OpenSSL::Test::Utils;
|
|
|
|
|
|
setup("test_out_option");
|
|
|
|
|
|
-# Paths that should generate failure when trying to write to them.
|
|
|
-# Directories are a safe bet for failure on all platforms.
|
|
|
-# Note that directories must end with a slash here, because of how
|
|
|
-# File::Spec massages them into directory specs on some platforms.
|
|
|
-my @failure_paths = (
|
|
|
- './',
|
|
|
- );
|
|
|
-my @success_paths = (
|
|
|
- 'randomname.bin'
|
|
|
- );
|
|
|
+plan tests => 4;
|
|
|
|
|
|
-# Test for trying to create a file in a non-exist directory
|
|
|
-my $rand_path = "";
|
|
|
-do {
|
|
|
- my @chars = ("A".."Z", "a".."z", "0".."9");
|
|
|
- $rand_path .= $chars[rand @chars] for 1..32;
|
|
|
-} while (-d File::Spec->catdir('.', $rand_path));
|
|
|
-$rand_path .= "/randomname.bin";
|
|
|
+# Test 1
|
|
|
+SKIP: {
|
|
|
+ # Paths that should generate failure when trying to write to them.
|
|
|
+ # Directories are a safe bet for failure on most platforms.
|
|
|
+ # Notably, this isn't true on OpenVMS, as a default file name is
|
|
|
+ # appended under the hood when trying to "write" to a directory spec.
|
|
|
+ # From observation, that file is '.' (i.e. a file with no file name
|
|
|
+ # and no extension), so '[]' gets translated to '[].'
|
|
|
+ skip 'Directories become writable files on OpenVMS', 1 if $^O eq 'VMS';
|
|
|
|
|
|
-push @failure_paths, $rand_path;
|
|
|
+ # Note that directories must end with a slash here, because of how
|
|
|
+ # File::Spec massages them into directory specs on some platforms.
|
|
|
+ my $path = File::Spec->canonpath('./');
|
|
|
+ ok(!run(app([ 'openssl', 'rand', '-out', $path, '1'])),
|
|
|
+ "invalid output path: $path");
|
|
|
+}
|
|
|
|
|
|
-# All explicit cross compilations run a risk of failing this, because the
|
|
|
-# null device provided by perl might not match what the cross compiled
|
|
|
-# application expects to see as a null device. Therefore, we skip the check
|
|
|
-# of outputing to the null device if the cross compile prefix is set.
|
|
|
-if ((config('CROSS_COMPILE') // '') eq '') {
|
|
|
- # Check that we can write to the NULL device
|
|
|
- push @success_paths, File::Spec->devnull();
|
|
|
+# Test 2
|
|
|
+{
|
|
|
+ my $path = File::Spec->canonpath('randomname.bin');
|
|
|
+ ok(run(app([ 'openssl', 'rand', '-out', $path, '1'])),
|
|
|
+ "valid output path: $path");
|
|
|
}
|
|
|
|
|
|
-plan tests => scalar @failure_paths + scalar @success_paths;
|
|
|
+# Test 3
|
|
|
+{
|
|
|
+ # Test for trying to create a file in a non-exist directory
|
|
|
+ my $rand_path = "";
|
|
|
+ do {
|
|
|
+ my @chars = ("A".."Z", "a".."z", "0".."9");
|
|
|
+ $rand_path .= $chars[rand @chars] for 1..32;
|
|
|
+ } while (-d File::Spec->catdir('.', $rand_path));
|
|
|
+ $rand_path .= "/randomname.bin";
|
|
|
|
|
|
-foreach (@failure_paths) {
|
|
|
- my $path = File::Spec->canonpath($_);
|
|
|
+ my $path = File::Spec->canonpath($rand_path);
|
|
|
ok(!run(app([ 'openssl', 'rand', '-out', $path, '1'])),
|
|
|
"invalid output path: $path");
|
|
|
}
|
|
|
-foreach (@success_paths) {
|
|
|
- my $path = File::Spec->canonpath($_);
|
|
|
+
|
|
|
+# Test 4
|
|
|
+SKIP: {
|
|
|
+ skip "It's not safe to use perl's idea of the NULL device in an explicitly cross compiled build", 1
|
|
|
+ unless (config('CROSS_COMPILE') // '') eq '';
|
|
|
+
|
|
|
+ my $path = File::Spec->canonpath(File::Spec->devnull());
|
|
|
ok(run(app([ 'openssl', 'rand', '-out', $path, '1'])),
|
|
|
"valid output path: $path");
|
|
|
}
|
|
|
|
|
|
+# Cleanup
|
|
|
END {
|
|
|
unlink 'randomname.bin' if -f 'randomname.bin';
|
|
|
}
|