Home | History | Annotate | Line # | Download | only in recipes
      1 #! /usr/bin/env perl
      2 # Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved.
      3 # Copyright Nokia 2007-2019
      4 # Copyright Siemens AG 2015-2019
      5 #
      6 # Licensed under the Apache License 2.0 (the "License").  You may not use
      7 # this file except in compliance with the License.  You can obtain a copy
      8 # in the file LICENSE in the source distribution or at
      9 # https://www.openssl.org/source/license.html
     10 
     11 use strict;
     12 use warnings;
     13 
     14 use POSIX;
     15 use File::Compare qw/compare_text/;
     16 use OpenSSL::Test qw/:DEFAULT with srctop_file srctop_dir bldtop_dir result_file/;
     17 use OpenSSL::Test::Utils;
     18 
     19 BEGIN {
     20     setup("test_cmp_cli");
     21 }
     22 use lib srctop_dir('Configurations');
     23 use lib bldtop_dir('.');
     24 
     25 plan skip_all => "These tests are not supported in a fuzz build"
     26     if config('options') =~ /-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION/;
     27 
     28 plan skip_all => "These tests are not supported in a no-cmp build"
     29     if disabled("cmp");
     30 
     31 # Prevent MSys2 filename munging for arguments that look like file paths but
     32 # aren't
     33 $ENV{MSYS2_ARG_CONV_EXCL} = "/CN=";
     34 
     35 my @app = qw(openssl cmp);
     36 
     37 my @cmp_basic_tests = (
     38     [ "show help",                        [ "-help"               ], 1 ],
     39     [ "CLI option not starting with '-'", [  "days", "1"          ], 0 ],
     40     [ "unknown CLI option",               [ "-dayss"              ], 0 ],
     41     [ "bad int syntax: non-digit",        [ "-days", "a/"         ], 0 ],
     42     [ "bad int syntax: float",            [ "-days", "3.14"       ], 0 ],
     43     [ "bad int syntax: trailing garbage", [ "-days", "314_+"      ], 0 ],
     44     [ "bad int: out of range",            [ "-days", "2147483648" ], 0 ],
     45     );
     46 
     47 my @cmp_server_tests = (
     48     [ "with polling",             [ "-poll_count", "1"       ], 1 ]
     49     );
     50 
     51 # loader_attic doesn't build on VMS, so we don't test it
     52 push @cmp_server_tests, (
     53     [ "with loader_attic engine", [ "-engine", "loader_attic"], 1 ]
     54     )
     55     unless disabled('loadereng');
     56 
     57 plan tests => @cmp_basic_tests + @cmp_server_tests;
     58 
     59 foreach (@cmp_basic_tests) {
     60     my $title = $$_[0];
     61     my $params = $$_[1];
     62     my $expected = $$_[2];
     63     ok($expected == run(app([@app, "-config", '', @$params])),
     64        $title);
     65 }
     66 
     67 # these use the mock server directly in the cmp app, without TCP
     68 foreach (@cmp_server_tests) {
     69     my $title = $$_[0];
     70     my $extra_args = $$_[1];
     71     my $expected = $$_[2];
     72     my $secret = "pass:test";
     73     my $rsp_cert = srctop_file('test',  'certs', 'ee-cert-1024.pem');
     74     my $outfile = result_file("test.certout.pem");
     75     ok($expected ==
     76        run(app([@app, "-config", '', @$extra_args,
     77                 "-use_mock_srv", "-srv_ref", "mock server",
     78                 "-srv_secret", $secret,
     79                 "-rsp_cert", $rsp_cert,
     80                 "-cmd", "cr",
     81                 "-subject", "/CN=any",
     82                 "-newkey", srctop_file('test', 'certs', 'ee-key-1024.pem'),
     83                 "-secret", $secret,
     84                 "-ref", "client under test",
     85                 "-certout", $outfile]))
     86        && compare_text($outfile, $rsp_cert) == 0,
     87        $title);
     88     # not unlinking $outfile
     89 }
     90