diff options
Diffstat (limited to 'test/bio_meth_test.c')
-rw-r--r-- | test/bio_meth_test.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/test/bio_meth_test.c b/test/bio_meth_test.c new file mode 100644 index 0000000000..3eeafe3a23 --- /dev/null +++ b/test/bio_meth_test.c @@ -0,0 +1,71 @@ +/* + * Copyright 2024 The OpenSSL Project Authors. All Rights Reserved. + * + * Licensed under the Apache License 2.0 (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 + */ + +#include <openssl/bio.h> +#include "testutil.h" + +static int test_bio_meth(void) +{ + int i, ret = 0, id; + BIO_METHOD *meth1 = NULL, *meth2 = NULL, *meth3 = NULL; + BIO *membio = NULL, *bio1 = NULL, *bio2 = NULL, *bio3 = NULL; + + id = BIO_get_new_index(); + if (!TEST_int_eq(id, BIO_TYPE_START + 1)) + goto err; + + if (!TEST_ptr(meth1 = BIO_meth_new(id, "Method1")) + || !TEST_ptr(meth2 = BIO_meth_new(BIO_TYPE_NONE, "Method2")) + || !TEST_ptr(meth3 = BIO_meth_new(BIO_TYPE_NONE|BIO_TYPE_FILTER, "Method3")) + || !TEST_ptr(bio1 = BIO_new(meth1)) + || !TEST_ptr(bio2 = BIO_new(meth2)) + || !TEST_ptr(bio3 = BIO_new(meth3)) + || !TEST_ptr(membio = BIO_new(BIO_s_mem()))) + goto err; + + BIO_set_next(bio3, bio2); + BIO_set_next(bio2, bio1); + BIO_set_next(bio1, membio); + + /* Check that we get an error if we exhaust BIO_get_new_index() */ + for (i = id + 1; i <= BIO_TYPE_MASK; ++i) { + if (!TEST_int_eq(BIO_get_new_index(), i)) + goto err; + } + if (!TEST_int_eq(BIO_get_new_index(), -1)) + goto err; + + /* test searching works */ + if (!TEST_ptr_eq(BIO_find_type(bio3, BIO_TYPE_MEM), membio) + || !TEST_ptr_eq(BIO_find_type(bio3, id), bio1)) + goto err; + + /* Check searching for BIO_TYPE_NONE returns NULL */ + if (!TEST_ptr_null(BIO_find_type(bio3, BIO_TYPE_NONE))) + goto err; + /* Check searching for BIO_TYPE_NONE + BIO_TYPE_FILTER works */ + if (!TEST_ptr_eq(BIO_find_type(bio3, BIO_TYPE_FILTER), bio3)) + goto err; + ret = 1; +err: + BIO_free(membio); + BIO_free(bio3); + BIO_free(bio2); + BIO_free(bio1); + BIO_meth_free(meth3); + BIO_meth_free(meth2); + BIO_meth_free(meth1); + return ret; +} + +int setup_tests(void) +{ + ADD_TEST(test_bio_meth); + return 1; +} |