A number of improvements to the output of the C portion of the test framework 
have been made.
Specifically, a number of functions have been added to provide uniform 
reporting of test case failures.

You access this functionality by including "testutil.h"

There are two unconditional functions: TEST_info and TEST_error which print 
informative and error messages respectively.  They have no return value and 
accept a printf format string plus arguments.

All of the remaining functions are conditional tests.  They return 1 if the 
condition is true and 0 if false.  They output a uniform diagnostic message in 
the latter case and nothing in the former.  The majority of these are of the 
form TEST_type_cond, where _type_ is the type being tested and _cond_ is the 
relation being tested.  The currently available types are:

        type                C type
        int                 int             
        uint                unsigned int    
        char                char            
        uchar               unsigned char   
        long                long            
        ulong               unsigned long   
        size_t              size_t          
        ptr                 void *          
        str                 char *          
        mem                 void *, size_t  


For the integral types, cond can be:

        cond                C comparison
        eq                  ==
        ne                  !=
        gt                  >
        ge                  >=
        lt                  <
        le                  <=


For the pointer types, cond can only be _eq_ or _ne_.  In the case of _str_ and 
_mem_, the memory pointed to is compared.  For _ptr_ just the pointer 
themselves are compared.  The _mem_ comparisons take a pair of pointers + sizes 
as arguments (i.e. ptr1, size1, ptr2, size2).


There are two additional short hand calls for ptr:

        TEST_ptr            ptr != NULL
        TEST_ptr_null       ptr == NULL


Finally, there are two calls to check Boolean values:

        TEST_true           checks for != 0
        TEST_false          checks for == 0


In all cases, it is up to the test executable to process the return codes and 
to indicate success or failure to the PERL test framework.  This would usually 
be done using:

        if (!TEST_cond(args))
            return 0;


See the brief notes at the end of test/README and look at some of the test 
cases that have been converted already:

        test/asn1_internal_test.c
        test/cipherlist_test.c
        test/crltest.c
        test/lhash_test.c
        test/mdc2_internal_test.c
        test/pkey_meth_test.c
        test/poly1305_internal_test.c
        test/ssl_test.c
        test/ssl_test_ctx_test.c
        test/stack_test.c
        test/tls13encryptiontest.c
        test/tls13secretstest.c
        test/x509_internal_test.c
        test/x509_time_test.c


To see some examples output of failing tests, test the test_test case:

        make test TESTS=test_test VERBOSE=1

To see examples of all of the new test functions have a look in 
test/test_test.c  This features both passing and failing calls.  However, the 
actual error handling is not normal for a test executable because it treats 
desired failures as passes.


Pauli
-- 
Oracle
Dr Paul Dale | Cryptographer | Network Security & Encryption 
Phone +61 7 3031 7217
Oracle Australia

-- 
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev

Reply via email to