Commit b7af3f14 authored by Pauli's avatar Pauli
Browse files

Test support for time_t comparisons.

parent 92738d7d
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -191,6 +191,29 @@ err:
    return 0;
}

static int test_time_t(void)
{
    if (!TEST(1, TEST_time_t_eq((time_t)10, (time_t)10))
        | !TEST(0, TEST_time_t_eq((time_t)10, (time_t)12))
        | !TEST(1, TEST_time_t_ne((time_t)10, (time_t)12))
        | !TEST(0, TEST_time_t_ne((time_t)24, (time_t)24))
        | !TEST(1, TEST_time_t_lt((time_t)30, (time_t)88))
        | !TEST(0, TEST_time_t_lt((time_t)88, (time_t)30))
        | !TEST(1, TEST_time_t_le((time_t)30, (time_t)88))
        | !TEST(1, TEST_time_t_le((time_t)33, (time_t)33))
        | !TEST(0, TEST_time_t_le((time_t)88, (time_t)30))
        | !TEST(1, TEST_time_t_gt((time_t)52, (time_t)33))
        | !TEST(0, TEST_time_t_gt((time_t)33, (time_t)52))
        | !TEST(1, TEST_time_t_ge((time_t)52, (time_t)33))
        | !TEST(1, TEST_time_t_ge((time_t)38, (time_t)38))
        | !TEST(0, TEST_time_t_ge((time_t)33, (time_t)52)))
        goto err;
    return 1;

err:
    return 0;
}

static int test_pointer(void)
{
    int x = 0;
@@ -518,6 +541,7 @@ int setup_tests(void)
    ADD_TEST(test_long);
    ADD_TEST(test_ulong);
    ADD_TEST(test_size_t);
    ADD_TEST(test_time_t);
    ADD_TEST(test_pointer);
    ADD_TEST(test_bool);
    ADD_TEST(test_string);
+8 −0
Original line number Diff line number Diff line
@@ -186,6 +186,7 @@ DECLARE_COMPARISONS(char, char)
DECLARE_COMPARISONS(unsigned char, uchar)
DECLARE_COMPARISONS(long, long)
DECLARE_COMPARISONS(unsigned long, ulong)
DECLARE_COMPARISONS(time_t, time_t)
/*
 * Because this comparison uses a printf format specifier that's not
 * universally known (yet), we provide an option to not have it declared.
@@ -336,6 +337,13 @@ void test_perror(const char *s);
# define TEST_size_t_gt(a, b) test_size_t_gt(__FILE__, __LINE__, #a, #b, a, b)
# define TEST_size_t_ge(a, b) test_size_t_ge(__FILE__, __LINE__, #a, #b, a, b)

# define TEST_time_t_eq(a, b) test_time_t_eq(__FILE__, __LINE__, #a, #b, a, b)
# define TEST_time_t_ne(a, b) test_time_t_ne(__FILE__, __LINE__, #a, #b, a, b)
# define TEST_time_t_lt(a, b) test_time_t_lt(__FILE__, __LINE__, #a, #b, a, b)
# define TEST_time_t_le(a, b) test_time_t_le(__FILE__, __LINE__, #a, #b, a, b)
# define TEST_time_t_gt(a, b) test_time_t_gt(__FILE__, __LINE__, #a, #b, a, b)
# define TEST_time_t_ge(a, b) test_time_t_ge(__FILE__, __LINE__, #a, #b, a, b)

# define TEST_ptr_eq(a, b)    test_ptr_eq(__FILE__, __LINE__, #a, #b, a, b)
# define TEST_ptr_ne(a, b)    test_ptr_ne(__FILE__, __LINE__, #a, #b, a, b)
# define TEST_ptr(a)          test_ptr(__FILE__, __LINE__, #a, a)
+30 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
#include <string.h>
#include <ctype.h>
#include "internal/nelem.h"
#include <openssl/asn1.h>

/*
 * Output a failed test first line.
@@ -416,3 +417,32 @@ int test_BN_abs_eq_word(const char *file, int line, const char *bns,
    BN_free(aa);
    return 0;
}

static const char *print_time(const ASN1_TIME *t)
{
    return t == NULL ? "<null>" : (char *)ASN1_STRING_get0_data(t);
}

#define DEFINE_TIME_T_COMPARISON(opname, op)                            \
    int test_time_t_ ## opname(const char *file, int line,              \
                               const char *s1, const char *s2,          \
                               const time_t t1, const time_t t2)        \
    {                                                                   \
        ASN1_TIME *at1 = ASN1_TIME_set(NULL, t1);                       \
        ASN1_TIME *at2 = ASN1_TIME_set(NULL, t2);                       \
        int r = at1 != NULL && at2 != NULL                              \
                && ASN1_TIME_compare(at1, at2) op 0;                    \
        if (!r)                                                         \
            test_fail_message(NULL, file, line, "time_t", s1, s2, #op,  \
                              "[%s] compared to [%s]",                  \
                              print_time(at1), print_time(at2));        \
        ASN1_STRING_free(at1);                                          \
        ASN1_STRING_free(at2);                                          \
        return r;                                                       \
    }
DEFINE_TIME_T_COMPARISON(eq, ==)
DEFINE_TIME_T_COMPARISON(ne, !=)
DEFINE_TIME_T_COMPARISON(gt, >)
DEFINE_TIME_T_COMPARISON(ge, >=)
DEFINE_TIME_T_COMPARISON(lt, <)
DEFINE_TIME_T_COMPARISON(le, <=)