| #! /usr/bin/env perl |
| # Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. |
| # Copyright Nokia 2007-2019 |
| # Copyright Siemens AG 2015-2019 |
| # |
| # 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 POSIX; |
| use File::Compare qw/compare_text/; |
| use OpenSSL::Test qw/:DEFAULT with srctop_file srctop_dir bldtop_dir result_file/; |
| use OpenSSL::Test::Utils; |
| |
| BEGIN { |
| setup("test_cmp_cli"); |
| } |
| use lib srctop_dir('Configurations'); |
| use lib bldtop_dir('.'); |
| |
| plan skip_all => "These tests are not supported in a fuzz build" |
| if config('options') =~ /-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION/; |
| |
| plan skip_all => "These tests are not supported in a no-cmp build" |
| if disabled("cmp"); |
| |
| # Prevent MSys2 filename munging for arguments that look like file paths but |
| # aren't |
| $ENV{MSYS2_ARG_CONV_EXCL} = "/CN="; |
| |
| my @app = qw(openssl cmp); |
| |
| my @cmp_basic_tests = ( |
| [ "show help", [ "-help" ], 1 ], |
| [ "CLI option not starting with '-'", [ "days", "1" ], 0 ], |
| [ "unknown CLI option", [ "-dayss" ], 0 ], |
| [ "bad int syntax: non-digit", [ "-days", "a/" ], 0 ], |
| [ "bad int syntax: float", [ "-days", "3.14" ], 0 ], |
| [ "bad int syntax: trailing garbage", [ "-days", "314_+" ], 0 ], |
| [ "bad int: out of range", [ "-days", "2147483648" ], 0 ], |
| ); |
| |
| my @cmp_server_tests = ( |
| [ "with polling", [ "-poll_count", "1" ], 1 ] |
| ); |
| |
| # loader_attic doesn't build on VMS, so we don't test it |
| push @cmp_server_tests, ( |
| [ "with loader_attic engine", [ "-engine", "loader_attic"], 1 ] |
| ) |
| unless disabled('loadereng'); |
| |
| plan tests => @cmp_basic_tests + @cmp_server_tests; |
| |
| foreach (@cmp_basic_tests) { |
| my $title = $$_[0]; |
| my $params = $$_[1]; |
| my $expected = $$_[2]; |
| ok($expected == run(app([@app, "-config", '', @$params])), |
| $title); |
| } |
| |
| # these use the mock server directly in the cmp app, without TCP |
| foreach (@cmp_server_tests) { |
| my $title = $$_[0]; |
| my $extra_args = $$_[1]; |
| my $expected = $$_[2]; |
| my $secret = "pass:test"; |
| my $rsp_cert = srctop_file('test', 'certs', 'ee-cert-1024.pem'); |
| my $outfile = result_file("test.certout.pem"); |
| ok($expected == |
| run(app([@app, "-config", '', @$extra_args, |
| "-use_mock_srv", "-srv_ref", "mock server", |
| "-srv_secret", $secret, |
| "-rsp_cert", $rsp_cert, |
| "-cmd", "cr", |
| "-subject", "/CN=any", |
| "-newkey", srctop_file('test', 'certs', 'ee-key-1024.pem'), |
| "-secret", $secret, |
| "-ref", "client under test", |
| "-certout", $outfile])) |
| && compare_text($outfile, $rsp_cert) == 0, |
| $title); |
| # not unlinking $outfile |
| } |