From 8d43674b8e95697cc8422674d61d302daa4ade73 Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Sun, 9 Jul 2017 23:26:26 -0400 Subject: [PATCH] Convert the tests in x509v3 to GTest. Bug: 129 Change-Id: Ia9819fab436857dd6364a1f1abff49ad3e3b682a Reviewed-on: https://boringssl-review.googlesource.com/17668 Reviewed-by: Adam Langley Commit-Queue: Adam Langley --- crypto/CMakeLists.txt | 2 + crypto/x509v3/CMakeLists.txt | 22 -------- crypto/x509v3/ext_dat.h | 8 +++ crypto/x509v3/{tab_test.c => tab_test.cc} | 56 +++++-------------- .../x509v3/{v3name_test.c => v3name_test.cc} | 30 ++++------ util/all_tests.json | 2 - 6 files changed, 33 insertions(+), 87 deletions(-) rename crypto/x509v3/{tab_test.c => tab_test.cc} (70%) rename crypto/x509v3/{v3name_test.c => v3name_test.cc} (96%) diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt index b941f67db..651793fd4 100644 --- a/crypto/CMakeLists.txt +++ b/crypto/CMakeLists.txt @@ -260,6 +260,8 @@ add_executable( test/file_test_gtest.cc thread_test.cc x509/x509_test.cc + x509v3/tab_test.cc + x509v3/v3name_test.cc $ $ diff --git a/crypto/x509v3/CMakeLists.txt b/crypto/x509v3/CMakeLists.txt index cf2474a4e..b2eb61898 100644 --- a/crypto/x509v3/CMakeLists.txt +++ b/crypto/x509v3/CMakeLists.txt @@ -42,25 +42,3 @@ add_library( v3_sxnet.c v3_utl.c ) - -add_executable( - v3name_test - - v3name_test.c - - $ -) - -target_link_libraries(v3name_test crypto) -add_dependencies(all_tests v3name_test) - -add_executable( - tab_test - - tab_test.c - - $ -) - -target_link_libraries(tab_test crypto) -add_dependencies(all_tests tab_test) diff --git a/crypto/x509v3/ext_dat.h b/crypto/x509v3/ext_dat.h index 9ece19c50..78fa79362 100644 --- a/crypto/x509v3/ext_dat.h +++ b/crypto/x509v3/ext_dat.h @@ -56,6 +56,10 @@ /* This file contains a table of "standard" extensions */ +#if defined(__cplusplus) +extern "C" { +#endif + extern const X509V3_EXT_METHOD v3_bcons, v3_nscert, v3_key_usage, v3_ext_ku; extern const X509V3_EXT_METHOD v3_pkey_usage_period, v3_sxnet, v3_info, v3_sinfo; @@ -133,3 +137,7 @@ static const X509V3_EXT_METHOD *const standard_exts[] = { /* Number of standard extensions */ #define STANDARD_EXTENSION_COUNT (sizeof(standard_exts)/sizeof(X509V3_EXT_METHOD *)) + +#if defined(__cplusplus) +} /* extern C */ +#endif diff --git a/crypto/x509v3/tab_test.c b/crypto/x509v3/tab_test.cc similarity index 70% rename from crypto/x509v3/tab_test.c rename to crypto/x509v3/tab_test.cc index 19005474e..bf91a265f 100644 --- a/crypto/x509v3/tab_test.c +++ b/crypto/x509v3/tab_test.cc @@ -57,52 +57,22 @@ * */ -/* - * Simple program to check the ext_dat.h is correct and print out problems if - * it is not. - */ +#if !defined(BORINGSSL_SHARED_LIBRARY) -#include +#include -#include -#include -#include #include -#if !defined(BORINGSSL_SHARED_LIBRARY) -# include "ext_dat.h" -#endif +#include "../internal.h" +#include "ext_dat.h" -int main(void) -{ -#if !defined(BORINGSSL_SHARED_LIBRARY) - unsigned i; - int prev = -1, bad = 0; - const X509V3_EXT_METHOD *const *tmp; - CRYPTO_library_init(); - i = sizeof(standard_exts) / sizeof(X509V3_EXT_METHOD *); - if (i != STANDARD_EXTENSION_COUNT) - fprintf(stderr, "Extension number invalid expecting %d\n", i); - tmp = standard_exts; - for (i = 0; i < STANDARD_EXTENSION_COUNT; i++, tmp++) { - if ((*tmp)->ext_nid < prev) - bad = 1; - prev = (*tmp)->ext_nid; - - } - if (bad) { - tmp = standard_exts; - fprintf(stderr, "Extensions out of order!\n"); - for (i = 0; i < STANDARD_EXTENSION_COUNT; i++, tmp++) - printf("%d : %s\n", (*tmp)->ext_nid, OBJ_nid2sn((*tmp)->ext_nid)); - return 1; - } else { - printf("PASS\n"); - return 0; - } -#else - /* TODO(davidben): Fix this test in the shared library build. */ - printf("PASS\n"); - return 0; -#endif +// Check ext_data.h is correct. +TEST(X509V3Test, TabTest) { + EXPECT_EQ(OPENSSL_ARRAY_SIZE(standard_exts), STANDARD_EXTENSION_COUNT); + for (size_t i = 1; i < OPENSSL_ARRAY_SIZE(standard_exts); i++) { + SCOPED_TRACE(i); + EXPECT_LT(standard_exts[i-1]->ext_nid, standard_exts[i]->ext_nid); + } } + +#endif // !BORINGSSL_SHARED_LIBRARY diff --git a/crypto/x509v3/v3name_test.c b/crypto/x509v3/v3name_test.cc similarity index 96% rename from crypto/x509v3/v3name_test.c rename to crypto/x509v3/v3name_test.cc index 959b924d6..0736120fc 100644 --- a/crypto/x509v3/v3name_test.c +++ b/crypto/x509v3/v3name_test.cc @@ -57,6 +57,8 @@ #include #include +#include + #include #include #include @@ -335,7 +337,7 @@ static void run_cert(X509 *crt, const char *nameincert, while (*pname) { int samename = OPENSSL_strcasecmp(nameincert, *pname) == 0; size_t namelen = strlen(*pname); - char *name = malloc(namelen); + char *name = (char *)malloc(namelen); int match, ret; OPENSSL_memcpy(name, *pname, namelen); @@ -383,31 +385,19 @@ static void run_cert(X509 *crt, const char *nameincert, } } -int main(void) -{ - CRYPTO_library_init(); - +// TOOD(davidben): Convert this test to GTest more thoroughly. +TEST(X509V3Test, NameTest) { const struct set_name_fn *pfn = name_fns; while (pfn->name) { const char *const *pname = names; while (*pname) { - X509 *crt = make_cert(); - if (crt == NULL) { - fprintf(stderr, "make_cert failed\n"); - return 1; - } - if (!pfn->fn(crt, *pname)) { - fprintf(stderr, "X509 name setting failed\n"); - return 1; - } - run_cert(crt, *pname, pfn); - X509_free(crt); + bssl::UniquePtr crt(make_cert()); + ASSERT_TRUE(crt); + ASSERT_TRUE(pfn->fn(crt.get(), *pname)); + run_cert(crt.get(), *pname, pfn); ++pname; } ++pfn; } - if (errors == 0) { - printf("PASS\n"); - } - return errors > 0 ? 1 : 0; + EXPECT_EQ(0, errors); } diff --git a/util/all_tests.json b/util/all_tests.json index b92a057c8..cb66fed3c 100644 --- a/util/all_tests.json +++ b/util/all_tests.json @@ -1,8 +1,6 @@ [ ["crypto/crypto_test"], ["crypto/fipsmodule/example_mul"], - ["crypto/x509v3/tab_test"], - ["crypto/x509v3/v3name_test"], ["decrepit/decrepit_test"], ["ssl/ssl_test"] ]