mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-02-17 02:49:19 +00:00
d543c0d917 Merge bitcoin-core/secp256k1#1734: Introduce (mini) unit test framework f44c1ebd96 Merge bitcoin-core/secp256k1#1719: ci: DRY workflow using anchors a44a339384 Merge bitcoin-core/secp256k1#1750: ci: Use clang-snapshot in "MSan" job 15d014804e ci: Drop default for `inputs.command` in `run-in-docker-action` 1decc49a1f ci: Use YAML anchor and aliases for repeated "CI script" steps dff1bc107d ci, refactor: Generalize use of `matrix.configuration.env_vars` 4b644da199 ci: Use YAML anchor and aliases for repeated "Print logs" steps a889cd93df ci: Bump `actions/checkout` version 574c2f3080 ci: Use YAML anchor and aliases for repeated "Checkout" steps 53585f93b7 ci: Use clang-snapshot in "MSan" job 6894c964f3 Fix Clang 21+ `-Wuninitialized-const-pointer` warning when using MSan 2b7337f63a Merge bitcoin-core/secp256k1#1756: ci: Fix image caching and apply other improvements f163c35897 ci: Set `DEBIAN_FRONTEND=noninteractive` 70ae177ca0 ci: Bump `docker/build-push-action` version b2a95a420f ci: Drop `tags` input for `docker/build-push-action` 122014edb3 ci: Add `scope` parameter to `cache-{to,from}` options 2f4546ce56 test: add --log option to display tests execution 95b9953ea4 test: Add option to display all available tests 953f7b0088 test: support running specific tests/modules targets 0302c1a3d7 test: add --help for command-line options 9ec3bfe22d test: adapt modules to the new test infrastructure 48789dafc2 test: introduce (mini) unit test framework baa265429f Merge bitcoin-core/secp256k1#1727: docs: Clarify that callback can be called more than once 4d90585fea docs: Improve API docs of _context_set_illegal_callback 895f53d1cf docs: Clarify that callback can be called more than once de6af6ae35 Merge bitcoin-core/secp256k1#1748: bench: improve context creation in ECDH benchmark 5817885153 Merge bitcoin-core/secp256k1#1749: build: Fix warnings in x86_64 assembly check ab560078aa build: Fix warnings in x86_64 assembly check 10dab907e7 Merge bitcoin-core/secp256k1#1741: doc: clarify API doc of `secp256k1_ecdsa_recover` return value dfe284ed2d bench: improve context creation in ECDH benchmark 7321bdf27b doc: clarify API doc of `secp256k1_ecdsa_recover` return value b475654302 Merge bitcoin-core/secp256k1#1745: test: introduce group order byte-array constant for deduplication 9cce703863 refactor: move 'gettime_i64()' to tests_common.h 0c91c56041 test: introduce group order byte-array constant for deduplication 88be4e8d86 Merge bitcoin-core/secp256k1#1735: musig: Invalidate secnonce in secp256k1_musig_partial_sign 36e76952cb Merge bitcoin-core/secp256k1#1738: check-abi: remove support for obsolete CMake library output location (src/libsecp256k1.so) 399b582a5f Split memclear into two versions 4985ac0f89 Merge bitcoin-core/secp256k1#1737: doc: mention ctx requirement for `_ellswift_create` (not secp256k1_context_static) 7ebaa134a7 check-abi: remove support for obsolete CMake library output location (src/libsecp256k1.so) 806de38bfc doc: mention ctx requirement for `_ellswift_create` (not secp256k1_context_static) 03fb60ad2e Merge bitcoin-core/secp256k1#1681: doc: Recommend clang-cl when building on Windows d93380fb35 Merge bitcoin-core/secp256k1#1731: schnorrsig: Securely clear buf containing k or its negation 8113671f80 Merge bitcoin-core/secp256k1#1729: hash: Use size_t instead of int for RFC6979 outlen copy 325d65a8cf Rename and clear var containing k or -k 960ba5f9c6 Use size_t instead of int for RFC6979 outlen copy 737912430d ci: Add more tests for clang-cl 7379a5bed3 doc: Recommend clang-cl when building on Windows f36afb8b3d Merge bitcoin-core/secp256k1#1725: tests: refactor tagged hash verification 5153cf1c91 tests: refactor tagged hash tests d2dcf52091 Merge bitcoin-core/secp256k1#1726: docs: fix broken link to Tromer's cache.pdf paper 489a43d1bf docs: fix broken link to eprint cache.pdf paper d599714147 Merge bitcoin-core/secp256k1#1722: docs: Exclude modules' `bench_impl.h` headers from coverage report 0458def51e doc: Add `--gcov-ignore-parse-errors=all` option to `gcovr` invocations 1aecce5936 doc: Add `--merge-mode-functions=separate` option to `gcovr` invocations 106a7cbf41 doc: Exclude modules' `bench_impl.h` headers from coverage report a9e955d3ea autotools, docs: Adjust help string for `--enable-coverage` option e523e4f90e Merge bitcoin-core/secp256k1#1720: chore(ci): Fix typo in Dockerfile comment 24ba8ff168 chore(ci): Fix typo in Dockerfile comment 74b8068c5d Merge bitcoin-core/secp256k1#1717: test: update wycheproof test vectors c25c3c8a88 test: update wycheproof test vectors 20e3b44746 Merge bitcoin-core/secp256k1#1688: cmake: Avoid contaminating parent project's cache with `BUILD_SHARED_LIBS` 2c076d907a Merge bitcoin-core/secp256k1#1711: tests: update Wycheproof 7b07b22957 cmake: Avoid contaminating parent project's cache with BUILD_SHARED_LIBS 5433648ca0 Fix typos and spellings 9ea54c69b7 tests: update Wycheproof files git-subtree-dir: src/secp256k1 git-subtree-split: d543c0d917a76a201578948701cc30ef336e0fe6
146 lines
4.6 KiB
C
146 lines
4.6 KiB
C
/***********************************************************************
|
|
* Distributed under the MIT software license, see the accompanying *
|
|
* file COPYING or https://www.opensource.org/licenses/mit-license.php.*
|
|
***********************************************************************/
|
|
|
|
#ifndef SECP256K1_UNIT_TEST_H
|
|
#define SECP256K1_UNIT_TEST_H
|
|
|
|
/* --------------------------------------------------------- */
|
|
/* Configurable constants */
|
|
/* --------------------------------------------------------- */
|
|
|
|
/* Maximum number of command-line arguments.
|
|
* Must be at least as large as the total number of tests
|
|
* to allow specifying all tests individually. */
|
|
#define MAX_ARGS 150
|
|
/* Maximum number of parallel jobs */
|
|
#define MAX_SUBPROCESSES 16
|
|
|
|
/* --------------------------------------------------------- */
|
|
/* Test Framework Registry Macros */
|
|
/* --------------------------------------------------------- */
|
|
|
|
#define CASE(name) { #name, run_##name }
|
|
#define CASE1(name) { #name, name }
|
|
|
|
#define MAKE_TEST_MODULE(name) { \
|
|
#name, \
|
|
tests_##name, \
|
|
sizeof(tests_##name) / sizeof(tests_##name[0]) \
|
|
}
|
|
|
|
/* Macro to wrap a test internal function with a COUNT loop (iterations number) */
|
|
#define REPEAT_TEST(fn) REPEAT_TEST_MULT(fn, 1)
|
|
#define REPEAT_TEST_MULT(fn, multiplier) \
|
|
static void fn(void) { \
|
|
int i; \
|
|
int repeat = COUNT * (multiplier); \
|
|
for (i = 0; i < repeat; i++) \
|
|
fn##_internal(); \
|
|
}
|
|
|
|
|
|
|
|
/* --------------------------------------------------------- */
|
|
/* Test Framework API */
|
|
/* --------------------------------------------------------- */
|
|
|
|
typedef void (*test_fn)(void);
|
|
|
|
struct tf_test_entry {
|
|
const char* name;
|
|
test_fn func;
|
|
};
|
|
|
|
struct tf_test_module {
|
|
const char* name;
|
|
const struct tf_test_entry* data;
|
|
int size;
|
|
};
|
|
|
|
typedef int (*setup_ctx_fn)(void);
|
|
typedef int (*teardown_fn)(void);
|
|
typedef void (*run_test_fn)(const struct tf_test_entry*);
|
|
|
|
struct tf_targets {
|
|
/* Target tests indexes */
|
|
const struct tf_test_entry* slots[MAX_ARGS];
|
|
/* Next available slot */
|
|
int size;
|
|
};
|
|
|
|
/* --- Command-line args --- */
|
|
struct tf_args {
|
|
/* 0 => sequential; 1..MAX_SUBPROCESSES => parallel workers */
|
|
int num_processes;
|
|
/* Specific RNG seed */
|
|
const char* custom_seed;
|
|
/* Whether to print the help msg */
|
|
int help;
|
|
/* Whether to print the tests list msg */
|
|
int list_tests;
|
|
/* Target tests indexes */
|
|
struct tf_targets targets;
|
|
/* Enable test execution logging */
|
|
int logging;
|
|
};
|
|
|
|
/* --------------------------------------------------------- */
|
|
/* Public API */
|
|
/* --------------------------------------------------------- */
|
|
|
|
struct tf_framework {
|
|
/* Command-line args */
|
|
struct tf_args args;
|
|
/* Test modules registry */
|
|
const struct tf_test_module* registry_modules;
|
|
/* Num of modules */
|
|
int num_modules;
|
|
/* Registry for tests that require no RNG init */
|
|
const struct tf_test_module* registry_no_rng;
|
|
/* Specific context setup and teardown functions */
|
|
setup_ctx_fn fn_setup;
|
|
teardown_fn fn_teardown;
|
|
/* Test runner function (can be customized) */
|
|
run_test_fn fn_run_test;
|
|
};
|
|
|
|
/*
|
|
* Initialize the test framework.
|
|
*
|
|
* Must be called before tf_run() and before any output is performed to
|
|
* stdout or stderr, because this function disables buffering on both
|
|
* streams to ensure reliable diagnostic output.
|
|
*
|
|
* Parses command-line arguments and configures the framework context.
|
|
* The caller must initialize the following members of 'tf' before calling:
|
|
* - tf->registry_modules
|
|
* - tf->num_modules
|
|
*
|
|
* Side effects:
|
|
* - stdout and stderr are set to unbuffered mode via setbuf().
|
|
* This allows immediate flushing of diagnostic messages but may
|
|
* affect performance for other output operations.
|
|
*
|
|
* Returns:
|
|
* EXIT_SUCCESS (0) on success,
|
|
* EXIT_FAILURE (non-zero) on error.
|
|
*/
|
|
static int tf_init(struct tf_framework* tf, int argc, char** argv);
|
|
|
|
/*
|
|
* Run tests based on the provided test framework context.
|
|
*
|
|
* This function uses the configuration stored in the tf_framework
|
|
* (targets, number of processes, iteration count, etc.) to determine
|
|
* which tests to execute and how to execute them.
|
|
*
|
|
* Returns:
|
|
* EXIT_SUCCESS (0) if all tests passed,
|
|
* EXIT_FAILURE (non-zero) otherwise.
|
|
*/
|
|
static int tf_run(struct tf_framework* tf);
|
|
|
|
#endif /* SECP256K1_UNIT_TEST_H */
|