1 /*
2 * Copyright 2021-2024 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
10 #include <string.h>
11 #include "apps.h"
12 #include "testutil.h"
13 #include "crypto/asn1.h"
14
15 #define binname "ca_internals_test"
16
17 char *default_config_file = NULL;
18
test_do_updatedb(void)19 static int test_do_updatedb(void)
20 {
21 CA_DB *db = NULL;
22 time_t testdateutc;
23 int rv;
24 size_t argc = test_get_argument_count();
25 BIO *bio_tmp;
26 char *testdate;
27 char *indexfile;
28 int need64bit;
29 int have64bit;
30
31 if (argc != 4) {
32 TEST_error("Usage: %s: do_updatedb dbfile testdate need64bit\n", binname);
33 TEST_error(" testdate format: ASN1-String\n");
34 return 0;
35 }
36
37 /*
38 * if the test will only work with 64bit time_t and
39 * the build only supports 32, assume the test as success
40 */
41 need64bit = (int)strtol(test_get_argument(3), NULL, 0);
42 have64bit = sizeof(time_t) > sizeof(uint32_t);
43 if (need64bit && !have64bit) {
44 BIO_printf(bio_out, "skipping test (need64bit: %i, have64bit: %i)",
45 need64bit, have64bit);
46 return 1;
47 }
48
49 testdate = test_get_argument(2);
50 testdateutc = test_asn1_string_to_time_t(testdate);
51 if (TEST_time_t_lt(testdateutc, 0)) {
52 return 0;
53 }
54
55 indexfile = test_get_argument(1);
56 db = load_index(indexfile, NULL);
57 if (TEST_ptr_null(db)) {
58 return 0;
59 }
60
61 bio_tmp = bio_err;
62 bio_err = bio_out;
63 rv = do_updatedb(db, &testdateutc);
64 bio_err = bio_tmp;
65
66 if (rv > 0) {
67 if (!TEST_true(save_index(indexfile, "new", db)))
68 goto end;
69
70 if (!TEST_true(rotate_index(indexfile, "new", "old")))
71 goto end;
72 }
73 end:
74 free_index(db);
75 return 1;
76 }
77
setup_tests(void)78 int setup_tests(void)
79 {
80 char *command = test_get_argument(0);
81
82 if (test_get_argument_count() < 1) {
83 TEST_error("%s: no command specified for testing\n", binname);
84 return 0;
85 }
86
87 if (strcmp(command, "do_updatedb") == 0)
88 return test_do_updatedb();
89
90 TEST_error("%s: command '%s' is not supported for testing\n", binname, command);
91 return 0;
92 }
93
94