X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=test%2Frecipes%2F15-test_out_option.t;h=9c2a95482b4cc5bd19befe188fea48d5607c06c2;hp=e1129ccce89aab431cf73f85103918309d25dc3f;hb=6fb7b08987b57a3a90d426fcad6ca24e6a11c705;hpb=fe1128dc2a6e7aae9010cf6595c78245e0eefd46 diff --git a/test/recipes/15-test_out_option.t b/test/recipes/15-test_out_option.t index e1129ccce8..9c2a95482b 100644 --- a/test/recipes/15-test_out_option.t +++ b/test/recipes/15-test_out_option.t @@ -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'; }