diff options
author | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2018-03-05 15:42:14 +0100 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@gnutls.org> | 2018-03-05 14:52:18 +0000 |
commit | 77639ed40823382601594fbae6c566c8766e0472 (patch) | |
tree | 289275ce9aa8df6cf5a8417571d9e6e7a5f9c5a6 | |
parent | 7c8a527766e270c3d603f633fbd52ee02870ae60 (diff) | |
download | gnutls-77639ed40823382601594fbae6c566c8766e0472.tar.gz |
tests: added unit tests of gnutls_x509_crt_export
Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
-rw-r--r-- | tests/crt_apis.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/crt_apis.c b/tests/crt_apis.c index 9fc1a53be6..cf0c7fd800 100644 --- a/tests/crt_apis.c +++ b/tests/crt_apis.c @@ -78,6 +78,7 @@ void doit(void) gnutls_x509_crt_t crt2; const char *err = NULL; unsigned char buf[64]; + unsigned char large_buf[5*1024]; unsigned int status; gnutls_datum_t out; size_t s = 0; @@ -331,6 +332,29 @@ void doit(void) assert(memcmp(out.data, saved_crt.data, out.size)==0); #endif + /* test behavior of gnutls_x509_crt_export on varios corner cases */ + s = 0; + assert(gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_PEM, NULL, &s) == GNUTLS_E_SHORT_MEMORY_BUFFER); + assert(s == out.size+1); + s = sizeof(buf); + assert(gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_PEM, buf, &s) == GNUTLS_E_SHORT_MEMORY_BUFFER); + assert(s == out.size+1); + + /* check whether the PEM output matches gnutls_x509_crt_export2 */ + s = sizeof(large_buf); + assert(gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_PEM, large_buf, &s) == 0); + assert(s == out.size); + assert(memcmp(large_buf, out.data, out.size) == 0); + gnutls_free(out.data); + + /* check whether the der out length differs */ + s = sizeof(large_buf); + assert(gnutls_x509_crt_export(crt, GNUTLS_X509_FMT_DER, large_buf, &s) == 0); + assert(gnutls_x509_crt_export2(crt, GNUTLS_X509_FMT_DER, &out) >= 0); + + assert(s == out.size); + assert(memcmp(large_buf, out.data, out.size) == 0); + gnutls_free(out.data); gnutls_x509_crt_deinit(crt); |