Files
openssl/test/ca_internals_test.c
Bob Beck 2fbc715b18 Adapt the tests to not care about failures from platform gmtime()
Now that we don't use gmtime, timegm and friends from the platform
we should be able to handle all values the same on any platform
with no concerns other than what the platform has decided to use
for time_t.

The hpux #ifdef is removed, as looking at f5e3115361 shows this
was added due to a gmtime() failure on the platform.

This then clears out all the platform specific chaos in helper.c
as an example of why the public API being added is actually
generally useful, as it has been noticed that users of OpenSSL
frequently end up dealing with the same issues in the same really
awful ways in their own software as were were doing in that file
in the tests.

Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Saša Nedvědický <sashan@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/28748)
2025-10-21 12:19:00 -04:00

95 lines
2.3 KiB
C

/*
* Copyright 2021-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
*/
#include <string.h>
#include "apps.h"
#include "testutil.h"
#include "crypto/asn1.h"
#define binname "ca_internals_test"
char *default_config_file = NULL;
static int test_do_updatedb(void)
{
CA_DB *db = NULL;
time_t testdateutc;
int rv;
size_t argc = test_get_argument_count();
BIO *bio_tmp;
char *testdate;
char *indexfile;
int need64bit;
int have64bit;
if (argc != 4) {
TEST_error("Usage: %s: do_updatedb dbfile testdate need64bit\n", binname);
TEST_error(" testdate format: ASN1-String\n");
return 0;
}
/*
* if the test will only work with 64bit time_t and
* the build only supports 32, assume the test as success
*/
need64bit = (int)strtol(test_get_argument(3), NULL, 0);
have64bit = sizeof(time_t) > sizeof(uint32_t);
if (need64bit && !have64bit) {
BIO_printf(bio_out, "skipping test (need64bit: %i, have64bit: %i)",
need64bit, have64bit);
return 1;
}
testdate = test_get_argument(2);
if (!test_asn1_string_to_time_t(testdate, &testdateutc))
return 0;
if (TEST_time_t_lt(testdateutc, 0)) {
return 0;
}
indexfile = test_get_argument(1);
db = load_index(indexfile, NULL);
if (TEST_ptr_null(db)) {
return 0;
}
bio_tmp = bio_err;
bio_err = bio_out;
rv = do_updatedb(db, &testdateutc);
bio_err = bio_tmp;
if (rv > 0) {
if (!TEST_true(save_index(indexfile, "new", db)))
goto end;
if (!TEST_true(rotate_index(indexfile, "new", "old")))
goto end;
}
end:
free_index(db);
return 1;
}
int setup_tests(void)
{
char *command = test_get_argument(0);
if (test_get_argument_count() < 1) {
TEST_error("%s: no command specified for testing\n", binname);
return 0;
}
if (strcmp(command, "do_updatedb") == 0)
return test_do_updatedb();
TEST_error("%s: command '%s' is not supported for testing\n", binname, command);
return 0;
}