81-test_cmp_cli.t: Do connections to 127.0.0.1 (e.g., Mock server) without proxy
[openssl.git] / test / recipes / 15-test_out_option.t
index e1129ccce89aab431cf73f85103918309d25dc3f..4e0aa46e8ecfa1f51db9cbc56a838ad5be14dea7 100644 (file)
@@ -1,7 +1,7 @@
 #! /usr/bin/env perl
 # Copyright 2018 The OpenSSL Project Authors. All Rights Reserved.
 #
-# Licensed under the OpenSSL license (the "License").  You may not use
+# Licensed under the Apache License 2.0 (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
@@ -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';
 }