From 2c1661714856f75ebd17b2a881c913a08f0103b1 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Wed, 26 Oct 2016 23:12:48 +0200 Subject: Convert asn1 selftests (a_strnid and ameth_lib) into internal test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Emilia Käsper (Merged from https://github.com/openssl/openssl/pull/1789) --- test/asn1_internal_test.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 test/asn1_internal_test.c (limited to 'test/asn1_internal_test.c') diff --git a/test/asn1_internal_test.c b/test/asn1_internal_test.c new file mode 100644 index 0000000000..fc0ac202b4 --- /dev/null +++ b/test/asn1_internal_test.c @@ -0,0 +1,152 @@ +/* + * Copyright 1999-2016 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 + */ + +/* Internal tests for the asn1 module */ + +#include +#include + +#include +#include +#include +#include "testutil.h" +#include "e_os.h" + +typedef struct { + const char *test_case_name; + const char *test_section; +} SIMPLE_FIXTURE; + +/********************************************************************** + * + * Test of a_strnid's tbl_standard + * + ***/ + +static SIMPLE_FIXTURE setup_tbl_standard(const char *const test_case_name) +{ + SIMPLE_FIXTURE fixture; + fixture.test_case_name = test_case_name; + return fixture; +} + +#include "../crypto/asn1/tbl_standard.h" + +static int execute_tbl_standard(SIMPLE_FIXTURE fixture) +{ + const ASN1_STRING_TABLE *tmp; + int last_nid = -1; + size_t i; + + for (tmp = tbl_standard, i = 0; i < OSSL_NELEM(tbl_standard); i++, tmp++) { + if (tmp->nid < last_nid) { + last_nid = 0; + break; + } + last_nid = tmp->nid; + } + + if (last_nid != 0) { + fprintf(stderr, "%s: Table order OK\n", fixture.test_section); + return 1; + } + + for (tmp = tbl_standard, i = 0; i < OSSL_NELEM(tbl_standard); i++, tmp++) + fprintf(stderr, "%s: Index %" OSSLzu ", NID %d, Name=%s\n", + fixture.test_section, i, tmp->nid, OBJ_nid2ln(tmp->nid)); + + return 0; +} + +static void teardown_tbl_standard(SIMPLE_FIXTURE fixture) +{ + ERR_print_errors_fp(stderr); +} + +/********************************************************************** + * + * Test of ameth_lib's standard_methods + * + ***/ + +static SIMPLE_FIXTURE setup_standard_methods(const char *const test_case_name) +{ + SIMPLE_FIXTURE fixture; + fixture.test_case_name = test_case_name; + return fixture; +} + +#include "internal/asn1_int.h" +#include "../crypto/asn1/standard_methods.h" + +static int execute_standard_methods(SIMPLE_FIXTURE fixture) +{ + const EVP_PKEY_ASN1_METHOD **tmp; + int last_pkey_id = -1; + size_t i; + + for (tmp = standard_methods, i = 0; i < OSSL_NELEM(standard_methods); + i++, tmp++) { + if ((*tmp)->pkey_id < last_pkey_id) { + last_pkey_id = 0; + break; + } + last_pkey_id = (*tmp)->pkey_id; + } + + if (last_pkey_id != 0) { + fprintf(stderr, "%s: Table order OK\n", fixture.test_section); + return 1; + } + + for (tmp = standard_methods, i = 0; i < OSSL_NELEM(standard_methods); + i++, tmp++) + fprintf(stderr, "%s: Index %" OSSLzu ", pkey ID %d, Name=%s\n", + fixture.test_section, i, (*tmp)->pkey_id, + OBJ_nid2sn((*tmp)->pkey_id)); + + return 0; +} + +static void teardown_standard_methods(SIMPLE_FIXTURE fixture) +{ + ERR_print_errors_fp(stderr); +} + +/********************************************************************** + * + * Test driver + * + ***/ + +static struct { + const char *section; + SIMPLE_FIXTURE (*setup)(const char *const test_case_name); + int (*execute)(SIMPLE_FIXTURE); + void (*teardown)(SIMPLE_FIXTURE); +} tests[] = { + {"asn1 tlb_standard", setup_tbl_standard, execute_tbl_standard, + teardown_tbl_standard}, + {"asn1 standard_methods", setup_standard_methods, execute_standard_methods, + teardown_standard_methods} +}; + +static int drive_tests(int idx) +{ + SETUP_TEST_FIXTURE(SIMPLE_FIXTURE, tests[idx].setup); + fixture.test_section = tests[idx].section; + EXECUTE_TEST(tests[idx].execute, tests[idx].teardown); +} + +int main(int argc, char **argv) +{ + ADD_ALL_TESTS(drive_tests, OSSL_NELEM(tests)); + + return run_tests(argv[0]); +} -- cgit v1.2.3