]> git.ipfire.org Git - thirdparty/openssl.git/blob - test/recipes/80-test_ca_internals.t
threads_pthread.c: change inline to ossl_inline
[thirdparty/openssl.git] / test / recipes / 80-test_ca_internals.t
1 #! /usr/bin/env perl
2 # Copyright 2021-2022 The OpenSSL Project Authors. All Rights Reserved.
3 #
4 # Licensed under the Apache License 2.0 (the "License"). You may not use
5 # this file except in compliance with the License. You can obtain a copy
6 # in the file LICENSE in the source distribution or at
7 # https://www.openssl.org/source/license.html
8
9 use strict;
10 use warnings;
11
12 use POSIX;
13 use OpenSSL::Test qw/:DEFAULT data_file/;
14 use File::Copy;
15
16 setup('test_ca_internals');
17
18 my @updatedb_tests = (
19 {
20 description => 'updatedb called before the first certificate expires',
21 filename => 'index.txt',
22 copydb => 1,
23 testdate => '990101000000Z',
24 need64bit => 0,
25 expirelist => [ ]
26 },
27 {
28 description => 'updatedb called before Y2k',
29 filename => 'index.txt',
30 copydb => 0,
31 testdate => '991201000000Z',
32 need64bit => 0,
33 expirelist => [ '1000' ]
34 },
35 {
36 description => 'updatedb called after year 2020',
37 filename => 'index.txt',
38 copydb => 0,
39 testdate => '211201000000Z',
40 need64bit => 0,
41 expirelist => [ '1001' ]
42 },
43 {
44 description => 'updatedb called in year 2049 (last year with 2 digits)',
45 filename => 'index.txt',
46 copydb => 0,
47 testdate => '491201000000Z',
48 need64bit => 1,
49 expirelist => [ '1002' ]
50 },
51 {
52 description => 'updatedb called in year 2050 (first year with 4 digits) before the last certificate expires',
53 filename => 'index.txt',
54 copydb => 0,
55 testdate => '20500101000000Z',
56 need64bit => 1,
57 expirelist => [ ]
58 },
59 {
60 description => 'updatedb called after the last certificate expired',
61 filename => 'index.txt',
62 copydb => 0,
63 testdate => '20501201000000Z',
64 need64bit => 1,
65 expirelist => [ '1003' ]
66 },
67 {
68 description => 'updatedb called for the first time after the last certificate expired',
69 filename => 'index.txt',
70 copydb => 1,
71 testdate => '20501201000000Z',
72 need64bit => 1,
73 expirelist => [ '1000',
74 '1001',
75 '1002',
76 '1003' ]
77 }
78 );
79
80 my @unsupported_commands = (
81 {
82 command => 'unsupported'
83 }
84 );
85
86 # every "test_updatedb" makes 3 checks
87 plan tests => 3 * scalar(@updatedb_tests) +
88 1 * scalar(@unsupported_commands);
89
90
91 foreach my $test (@updatedb_tests) {
92 test_updatedb($test);
93 }
94 foreach my $test (@unsupported_commands) {
95 test_unsupported_commands($test);
96 }
97
98
99 ################### subs to do tests per supported command ################
100
101 sub test_unsupported_commands {
102 my ($opts) = @_;
103
104 run(
105 test(['ca_internals_test',
106 $opts->{command}
107 ]),
108 capture => 0,
109 statusvar => \my $exit
110 );
111
112 is($exit, 0, "command '".$opts->{command}."' completed without an error");
113 }
114
115 sub test_updatedb {
116 my ($opts) = @_;
117 my $amtexpectedexpired = scalar(@{$opts->{expirelist}});
118 my @output;
119 my $expirelistcorrect = 1;
120 my $cert;
121 my $amtexpired = 0;
122 my $skipped = 0;
123
124 if ($opts->{copydb}) {
125 copy(data_file('index.txt'), 'index.txt');
126 }
127
128 @output = run(
129 test(['ca_internals_test',
130 "do_updatedb",
131 $opts->{filename},
132 $opts->{testdate},
133 $opts->{need64bit}
134 ]),
135 capture => 1,
136 statusvar => \my $exit
137 );
138
139 foreach my $tmp (@output) {
140 ($cert) = $tmp =~ /^[\x20\x23]*[^0-9A-Fa-f]*([0-9A-Fa-f]+)=Expired/;
141 if ($tmp =~ /^[\x20\x23]*skipping test/) {
142 $skipped = 1;
143 }
144 if (defined($cert) && (length($cert) > 0)) {
145 $amtexpired++;
146 my $expirefound = 0;
147 foreach my $expire (@{$opts->{expirelist}}) {
148 if ($expire eq $cert) {
149 $expirefound = 1;
150 }
151 }
152 if ($expirefound != 1) {
153 $expirelistcorrect = 0;
154 }
155 }
156 }
157
158 if ($skipped) {
159 $amtexpired = $amtexpectedexpired;
160 $expirelistcorrect = 1;
161 }
162 is($exit, 1, "ca_internals_test: returned EXIT_FAILURE (".$opts->{description}.")");
163 is($amtexpired, $amtexpectedexpired, "ca_internals_test: amount of expired certificates differs from expected amount (".$opts->{description}.")");
164 is($expirelistcorrect, 1, "ca_internals_test: list of expired certificates differs from expected list (".$opts->{description}.")");
165 }