diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/build.info | 7 | ||||
-rw-r--r-- | test/recipes/90-test_time_offset.t | 12 | ||||
-rw-r--r-- | test/time_offset_test.c | 114 |
3 files changed, 132 insertions, 1 deletions
diff --git a/test/build.info b/test/build.info index 2b1ced8b82..00ff4670f1 100644 --- a/test/build.info +++ b/test/build.info @@ -42,7 +42,8 @@ INCLUDE_MAIN___test_libtestutil_OLB = /INCLUDE=MAIN ssl_test_ctx_test ssl_test x509aux cipherlist_test asynciotest \ bioprinttest sslapitest dtlstest sslcorrupttest bio_enc_test \ pkey_meth_test uitest cipherbytes_test asn1_encode_test \ - x509_time_test x509_dup_cert_test recordlentest + x509_time_test x509_dup_cert_test recordlentest \ + time_offset_test SOURCE[aborttest]=aborttest.c INCLUDE[aborttest]=../include @@ -345,6 +346,10 @@ INCLUDE_MAIN___test_libtestutil_OLB = /INCLUDE=MAIN INCLUDE[asn1_encode_test]=../include DEPEND[asn1_encode_test]=../libcrypto libtestutil.a + SOURCE[time_offset_test]=time_offset_test.c + INCLUDE[time_offset_test]=.. ../include + DEPEND[time_offset_test]=../libcrypto libtestutil.a + # Internal test programs. These are essentially a collection of internal # test routines. Some of them need to reach internal symbols that aren't # available through the shared library (at least on Linux, Solaris, Windows diff --git a/test/recipes/90-test_time_offset.t b/test/recipes/90-test_time_offset.t new file mode 100644 index 0000000000..a032d9b40a --- /dev/null +++ b/test/recipes/90-test_time_offset.t @@ -0,0 +1,12 @@ +#! /usr/bin/env perl +# Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the OpenSSL license (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 OpenSSL::Test::Simple; + +simple_test("test_time_offset", "time_offset_test"); diff --git a/test/time_offset_test.c b/test/time_offset_test.c new file mode 100644 index 0000000000..7b4bec92c5 --- /dev/null +++ b/test/time_offset_test.c @@ -0,0 +1,114 @@ +/* + * Copyright 2017 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the OpenSSL license (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 + */ + +/* time_t/offset (+/-XXXX) tests for ASN1 and X509 */ + +#include <stdio.h> +#include <string.h> +#include <time.h> + +#include <openssl/asn1.h> +#include <openssl/x509.h> +#include "testutil.h" +#include "e_os.h" + +typedef struct { + const char *data; + int time_result; + int type; +} TESTDATA; + + +/********************************************************************** + * + * Test driver + * + ***/ + +static TESTDATA tests[] = { + { "20001201000000Z", 0, V_ASN1_GENERALIZEDTIME }, + { "20001201010000+0100", 0, V_ASN1_GENERALIZEDTIME }, + { "20001201050000+0500", 0, V_ASN1_GENERALIZEDTIME }, + { "20001130230000-0100", 0, V_ASN1_GENERALIZEDTIME }, + { "20001130190000-0500", 0, V_ASN1_GENERALIZEDTIME }, + { "20001130190001-0500", 1, V_ASN1_GENERALIZEDTIME }, /* +1 second */ + { "20001130185959-0500", -1, V_ASN1_GENERALIZEDTIME }, /* -1 second */ + { "001201000000Z", 0, V_ASN1_UTCTIME }, + { "001201010000+0100", 0, V_ASN1_UTCTIME }, + { "001201050000+0500", 0, V_ASN1_UTCTIME }, + { "001130230000-0100", 0, V_ASN1_UTCTIME }, + { "001130190000-0500", 0, V_ASN1_UTCTIME }, + { "001201000000-0000", 0, V_ASN1_UTCTIME }, + { "001201000001-0000", 1, V_ASN1_UTCTIME }, /* +1 second */ + { "001130235959-0000", -1, V_ASN1_UTCTIME }, /* -1 second */ + { "20001201000000+0000", 0, V_ASN1_GENERALIZEDTIME }, + { "20001201000000+0100", -1, V_ASN1_GENERALIZEDTIME }, + { "001201000000+0100", -1, V_ASN1_UTCTIME }, + { "20001201000000-0100", 1, V_ASN1_GENERALIZEDTIME }, + { "001201000000-0100", 1, V_ASN1_UTCTIME }, + { "20001201123400+1234", 0, V_ASN1_GENERALIZEDTIME }, + { "20001130112600-1234", 0, V_ASN1_GENERALIZEDTIME }, +}; + +static time_t the_time = 975628800; +static ASN1_TIME the_asn1_time = { + 15, + V_ASN1_GENERALIZEDTIME, + (unsigned char*)"20001201000000Z", + 0 +}; + +static int test_offset(int idx) +{ + ASN1_TIME at; + const TESTDATA *testdata = &tests[idx]; + int ret = -2; + int day, sec; + + at.data = (unsigned char*)testdata->data; + at.length = strlen(testdata->data); + at.type = testdata->type; + + if (!TEST_true(ASN1_TIME_diff(&day, &sec, &the_asn1_time, &at))) { + TEST_info("ASN1_TIME_diff() failed for %s\n", at.data); + return 0; + } + if (day > 0) + ret = 1; + else if (day < 0) + ret = -1; + else if (sec > 0) + ret = 1; + else if (sec < 0) + ret = -1; + else + ret = 0; + + if (!TEST_int_eq(testdata->time_result, ret)) { + TEST_info("ASN1_TIME_diff() test failed for %s day=%d sec=%d\n", at.data, day, sec); + return 0; + } + + if (at.type == V_ASN1_UTCTIME) + ret = ASN1_UTCTIME_cmp_time_t(&at, the_time); + else + return 1; /* no other cmp_time_t() functions available, yet */ + + if (!TEST_int_eq(testdata->time_result, ret)) { + TEST_info("ASN1_UTCTIME_cmp_time_t() test failed for %s\n", at.data); + return 0; + } + + return 1; +} + +void register_tests() +{ + ADD_ALL_TESTS(test_offset, OSSL_NELEM(tests)); +} |