test: add some unit tests for the property to string functions

That is: ossl_property_name_str and ossl_property_value_str.

These only have high level tests during the creation of child library
contexts.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17325)
This commit is contained in:
Pauli 2021-12-21 11:44:49 +11:00 committed by Pauli
parent 2e3c59356f
commit 9f6841e9d8

View File

@ -50,30 +50,59 @@ static void down_ref(void *p)
static int test_property_string(void)
{
OSSL_METHOD_STORE *store;
OSSL_LIB_CTX *ctx;
OSSL_METHOD_STORE *store = NULL;
int res = 0;
OSSL_PROPERTY_IDX i, j;
if (TEST_ptr(store = ossl_method_store_new(NULL))
&& TEST_int_eq(ossl_property_name(NULL, "fnord", 0), 0)
&& TEST_int_ne(ossl_property_name(NULL, "fnord", 1), 0)
&& TEST_int_ne(ossl_property_name(NULL, "name", 1), 0)
/*-
* Use our own library context because we depend on ordering from a
* pristine state.
*/
if (TEST_ptr(ctx = OSSL_LIB_CTX_new())
&& TEST_ptr(store = ossl_method_store_new(ctx))
&& TEST_int_eq(ossl_property_name(ctx, "fnord", 0), 0)
&& TEST_int_ne(ossl_property_name(ctx, "fnord", 1), 0)
&& TEST_int_ne(ossl_property_name(ctx, "name", 1), 0)
/* Pre loaded names */
&& TEST_str_eq(ossl_property_name_str(ctx, 1), "provider")
&& TEST_str_eq(ossl_property_name_str(ctx, 2), "version")
&& TEST_str_eq(ossl_property_name_str(ctx, 3), "fips")
&& TEST_str_eq(ossl_property_name_str(ctx, 4), "output")
&& TEST_str_eq(ossl_property_name_str(ctx, 5), "input")
&& TEST_str_eq(ossl_property_name_str(ctx, 6), "structure")
/* The names we added */
&& TEST_str_eq(ossl_property_name_str(ctx, 7), "fnord")
&& TEST_str_eq(ossl_property_name_str(ctx, 8), "name")
/* Out of range */
&& TEST_ptr_null(ossl_property_name_str(ctx, 0))
&& TEST_ptr_null(ossl_property_name_str(ctx, 9))
/* Property value checks */
&& TEST_int_eq(ossl_property_value(NULL, "fnord", 0), 0)
&& TEST_int_ne(i = ossl_property_value(NULL, "no", 0), 0)
&& TEST_int_ne(j = ossl_property_value(NULL, "yes", 0), 0)
&& TEST_int_eq(ossl_property_value(ctx, "fnord", 0), 0)
&& TEST_int_ne(i = ossl_property_value(ctx, "no", 0), 0)
&& TEST_int_ne(j = ossl_property_value(ctx, "yes", 0), 0)
&& TEST_int_ne(i, j)
&& TEST_int_eq(ossl_property_value(NULL, "yes", 1), j)
&& TEST_int_eq(ossl_property_value(NULL, "no", 1), i)
&& TEST_int_ne(i = ossl_property_value(NULL, "illuminati", 1), 0)
&& TEST_int_eq(j = ossl_property_value(NULL, "fnord", 1), i + 1)
&& TEST_int_eq(ossl_property_value(NULL, "fnord", 1), j)
&& TEST_int_eq(ossl_property_value(ctx, "yes", 1), j)
&& TEST_int_eq(ossl_property_value(ctx, "no", 1), i)
&& TEST_int_ne(i = ossl_property_value(ctx, "illuminati", 1), 0)
&& TEST_int_eq(j = ossl_property_value(ctx, "fnord", 1), i + 1)
&& TEST_int_eq(ossl_property_value(ctx, "fnord", 1), j)
/* Pre loaded values */
&& TEST_str_eq(ossl_property_value_str(ctx, 1), "yes")
&& TEST_str_eq(ossl_property_value_str(ctx, 2), "no")
/* The value we added */
&& TEST_str_eq(ossl_property_value_str(ctx, 3), "illuminati")
&& TEST_str_eq(ossl_property_value_str(ctx, 4), "fnord")
/* Out of range */
&& TEST_ptr_null(ossl_property_value_str(ctx, 0))
&& TEST_ptr_null(ossl_property_value_str(ctx, 5))
/* Check name and values are distinct */
&& TEST_int_eq(ossl_property_value(NULL, "cold", 0), 0)
&& TEST_int_ne(ossl_property_name(NULL, "fnord", 0),
ossl_property_value(NULL, "fnord", 0)))
&& TEST_int_eq(ossl_property_value(ctx, "cold", 0), 0)
&& TEST_int_ne(ossl_property_name(ctx, "fnord", 0),
ossl_property_value(ctx, "fnord", 0)))
res = 1;
ossl_method_store_free(store);
OSSL_LIB_CTX_free(ctx);
return res;
}