aboutsummaryrefslogtreecommitdiff
path: root/test/recipes/20-test_speed.t
diff options
context:
space:
mode:
Diffstat (limited to 'test/recipes/20-test_speed.t')
-rw-r--r--test/recipes/20-test_speed.t145
1 files changed, 145 insertions, 0 deletions
diff --git a/test/recipes/20-test_speed.t b/test/recipes/20-test_speed.t
new file mode 100644
index 000000000000..3c3c5fab5fcd
--- /dev/null
+++ b/test/recipes/20-test_speed.t
@@ -0,0 +1,145 @@
+#! /usr/bin/env perl
+# Copyright 2024 The OpenSSL Project Authors. All Rights Reserved.
+#
+# 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
+
+
+use strict;
+use warnings;
+
+use File::Spec;
+use File::Basename;
+use OpenSSL::Test qw/:DEFAULT with srctop_file bldtop_dir/;
+use OpenSSL::Test::Utils;
+
+setup("test_speed");
+
+plan tests => 25;
+
+ok(run(app(['openssl', 'speed', '-testmode'])),
+ "Simple test of all speed algorithms");
+
+#Test various options to speed. In all cases we use the -testmode option to
+#ensure we don't spend too long in this test. That option also causes the speed
+#app to return an error code if anything unexpectedly goes wrong.
+
+
+SKIP: {
+ skip "Multi option is not supported by this OpenSSL build", 1
+ if $^O =~ /^(VMS|MSWin32)$/;
+
+ ok(run(app(['openssl', 'speed', '-testmode', '-multi', 2])),
+ "Test the multi option");
+}
+
+ok(run(app(['openssl', 'speed', '-testmode', '-misalign', 1])),
+ "Test the misalign option");
+
+SKIP: {
+ skip "Multiblock is not supported by this OpenSSL build", 1
+ if disabled("multiblock")
+ # The AES-128-CBC-HMAC-SHA1 cipher isn't available on all platforms
+ # We test its availability without the "-mb" option. We only do the
+ # multiblock test via "-mb" if the cipher seems to exist.
+ || !run(app(['openssl', 'speed', '-testmode', '-evp',
+ 'AES-128-CBC-HMAC-SHA1']));
+
+ ok(run(app(['openssl', 'speed', '-testmode', '-mb', '-evp',
+ 'AES-128-CBC-HMAC-SHA1'])),
+ "Test the EVP and mb options");
+}
+
+ok(run(app(['openssl', 'speed', '-testmode', '-kem-algorithms'])),
+ "Test the kem-algorithms option");
+
+ok(run(app(['openssl', 'speed', '-testmode', '-signature-algorithms'])),
+ "Test the signature-algorithms option");
+
+ok(run(app(['openssl', 'speed', '-testmode', '-primes', 3, 'rsa1024'])),
+ "Test the primes option");
+
+ok(run(app(['openssl', 'speed', '-testmode', '-mr'])),
+ "Test the mr option");
+
+ok(run(app(['openssl', 'speed', '-testmode', '-decrypt', '-evp', 'aes-128-cbc'])),
+ "Test the decrypt and evp options");
+
+ok(run(app(['openssl', 'speed', '-testmode', '-evp', 'sha256'])),
+ "Test the evp option with a digest");
+
+ok(run(app(['openssl', 'speed', '-testmode', '-hmac', 'sha256'])),
+ "Test the hmac option");
+
+SKIP: {
+ skip "CMAC is not supported by this OpenSSL build", 1
+ if disabled("cmac");
+
+ ok(run(app(['openssl', 'speed', '-testmode', '-cmac', 'aes-128-cbc'])),
+ "Test the cmac option");
+}
+
+ok(run(app(['openssl', 'speed', '-testmode', '-aead', '-evp', 'aes-128-gcm'])),
+ "Test the aead and evp options");
+
+SKIP: {
+ skip "ASYNC/threads not supported by this OpenSSL build", 1
+ if disabled("async") || disabled("threads");
+
+ ok(run(app(['openssl', 'speed', '-testmode', '-async_jobs', '1'])),
+ "Test the async_jobs option");
+}
+
+SKIP: {
+ skip "Mlock option is not supported by this OpenSSL build", 1
+ if $^O !~ /^(linux|MSWin32)$/;
+
+ ok(run(app(['openssl', 'speed', '-testmode', '-mlock'])),
+ "Test the mlock option");
+}
+
+#We don't expect these options to have an effect in testmode but we at least
+#test that the option parsing works ok
+ok(run(app(['openssl', 'speed', '-testmode', '-seconds', 1, '-bytes', 16,
+ '-elapsed'])),
+ "Test the seconds, bytes and elapsed options");
+
+#Test that this won't crash on sparc
+ok(run(app(['openssl', 'speed', '-testmode', '-seconds', 1, '-bytes', 1,
+ 'aes-128-cbc'])),
+ "Test that bad bytes value doesn't make speed to crash");
+
+#No need to -testmode for testing -help. All we're doing is testing the option
+#parsing. We don't sanity check the output
+ok(run(app(['openssl', 'speed', '-help'])),
+ "Test the help option");
+
+#Now test some invalid options. The speed app should fail
+ok(!run(app(['openssl', 'speed', 'blah'])),
+ "Test an unknwon algorithm");
+
+ok(!run(app(['openssl', 'speed', '-evp', 'blah'])),
+ "Test a unknown evp algorithm");
+
+ok(!run(app(['openssl', 'speed', '-hmac', 'blah'])),
+ "Test a unknown hmac algorithm");
+
+ok(!run(app(['openssl', 'speed', '-cmac', 'blah'])),
+ "Test a unknown cmac algorithm");
+
+ok(!run(app(['openssl', 'speed', '-async_jobs', 100000])),
+ "Test an invalid number of async_jobs");
+
+ok(!run(app(['openssl', 'speed', '-misalign', 65])),
+ "Test an invalid misalign number");
+
+SKIP: {
+ skip "Multiblock is not supported by this OpenSSL build", 1
+ if disabled("multiblock");
+
+ ok(!run(app(['openssl', 'speed', '-testmode', '-mb', '-evp',
+ 'AES-128-CBC'])),
+ "Test a non multiblock cipher with -mb");
+}