Skip to content

Commit abcd6e9

Browse files
tests: Add CHECK_ILLEGAL(_VOID) macros and use in static ctx tests
1 parent 7c11f97 commit abcd6e9

File tree

1 file changed

+34
-18
lines changed

1 file changed

+34
-18
lines changed

src/tests.c

+34-18
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,33 @@ static int all_bytes_equal(const void* s, unsigned char value, size_t n) {
4444
return 1;
4545
}
4646

47+
static unsigned int ILLEGAL;
48+
static void check_illegal_helper_callback_fn(const char* str, void* data) {
49+
(void)data;
50+
(void)str;
51+
ILLEGAL++;
52+
CHECK(ILLEGAL != 0);
53+
}
54+
55+
/* For checking functions that use ARG_CHECK */
56+
#define CHECK_ILLEGAL(ctx, expr) do { \
57+
ILLEGAL = 0; \
58+
secp256k1_context_set_illegal_callback(ctx, check_illegal_helper_callback_fn, NULL); \
59+
{ CHECK((expr) == 0); } \
60+
secp256k1_context_set_illegal_callback(ctx, NULL, NULL); \
61+
CHECK(ILLEGAL == 1); \
62+
} while(0);
63+
64+
/* For checking functions that use ARG_CHECK_VOID */
65+
#define CHECK_ILLEGAL_VOID(ctx, expr) do { \
66+
ILLEGAL = 0; \
67+
secp256k1_context_set_illegal_callback(ctx, check_illegal_helper_callback_fn, NULL); \
68+
{ (expr); } \
69+
secp256k1_context_set_illegal_callback(ctx, NULL, NULL); \
70+
CHECK(ILLEGAL == 1); \
71+
} while(0);
72+
73+
/* TODO Use CHECK_ILLEGAL(_VOID) everywhere and get rid of these counting callbacks */
4774
static void counting_illegal_callback_fn(const char* str, void* data) {
4875
/* Dummy callback function that just counts. */
4976
int32_t *p;
@@ -246,39 +273,28 @@ static void run_static_context_tests(int use_prealloc) {
246273
CHECK(secp256k1_context_no_precomp == secp256k1_context_static);
247274

248275
{
249-
int ecount = 0;
250276
unsigned char seed[32] = {0x17};
251-
secp256k1_context_set_illegal_callback(STATIC_CTX, counting_illegal_callback_fn, &ecount);
252277

253278
/* Randomizing secp256k1_context_static is not supported. */
254-
CHECK(secp256k1_context_randomize(STATIC_CTX, seed) == 0);
255-
CHECK(ecount == 1);
256-
CHECK(secp256k1_context_randomize(STATIC_CTX, NULL) == 0);
257-
CHECK(ecount == 2);
258-
ecount = 0;
279+
CHECK_ILLEGAL(STATIC_CTX, secp256k1_context_randomize(STATIC_CTX, seed));
280+
CHECK_ILLEGAL(STATIC_CTX, secp256k1_context_randomize(STATIC_CTX, NULL));
259281

260282
/* Destroying or cloning secp256k1_context_static is not supported. */
261283
if (use_prealloc) {
262-
CHECK(secp256k1_context_preallocated_clone_size(STATIC_CTX) == 0);
263-
CHECK(ecount == 1);
284+
CHECK_ILLEGAL(STATIC_CTX, secp256k1_context_preallocated_clone_size(STATIC_CTX));
264285
{
265286
secp256k1_context *my_static_ctx = malloc(sizeof(*STATIC_CTX));
266287
CHECK(my_static_ctx != NULL);
267288
memset(my_static_ctx, 0x2a, sizeof(*my_static_ctx));
268-
CHECK(secp256k1_context_preallocated_clone(STATIC_CTX, my_static_ctx) == NULL);
289+
CHECK_ILLEGAL(STATIC_CTX, secp256k1_context_preallocated_clone(STATIC_CTX, my_static_ctx));
269290
CHECK(all_bytes_equal(my_static_ctx, 0x2a, sizeof(*my_static_ctx)));
270-
CHECK(ecount == 2);
271291
free(my_static_ctx);
272292
}
273-
secp256k1_context_preallocated_destroy(STATIC_CTX);
274-
CHECK(ecount == 3);
293+
CHECK_ILLEGAL_VOID(STATIC_CTX, secp256k1_context_preallocated_destroy(STATIC_CTX));
275294
} else {
276-
CHECK(secp256k1_context_clone(STATIC_CTX) == NULL);
277-
CHECK(ecount == 1);
278-
secp256k1_context_destroy(STATIC_CTX);
279-
CHECK(ecount == 2);
295+
CHECK_ILLEGAL(STATIC_CTX, secp256k1_context_clone(STATIC_CTX));
296+
CHECK_ILLEGAL_VOID(STATIC_CTX, secp256k1_context_destroy(STATIC_CTX));
280297
}
281-
secp256k1_context_set_illegal_callback(STATIC_CTX, NULL, NULL);
282298
}
283299

284300
{

0 commit comments

Comments
 (0)