diff options
Diffstat (limited to 'src/core/init_test.c')
| -rw-r--r-- | src/core/init_test.c | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/src/core/init_test.c b/src/core/init_test.c new file mode 100644 index 00000000..9b9e26b4 --- /dev/null +++ b/src/core/init_test.c @@ -0,0 +1,140 @@ +// +// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech> +// +// This software is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +#include <nuts.h> + +uint64_t nni_init_get_param( + nng_init_parameter parameter, uint64_t default_value); +uint64_t nni_init_get_effective(nng_init_parameter p); +void nni_init_set_effective(nng_init_parameter p, uint64_t); + +void +test_init_param(void) +{ + NUTS_ASSERT(nni_init_get_param(NNG_INIT_PARAMETER_NONE, 456) == 456); + nng_init_set_parameter(NNG_INIT_PARAMETER_NONE, 123); + NUTS_ASSERT(nni_init_get_param(NNG_INIT_PARAMETER_NONE, 567) == 123); + nni_init_set_effective(NNG_INIT_PARAMETER_NONE, 124); + NUTS_ASSERT(nni_init_get_effective(NNG_INIT_PARAMETER_NONE) == 124); + NUTS_ASSERT(nni_init_get_param(NNG_INIT_PARAMETER_NONE, 567) == 123); + nng_fini(); + NUTS_ASSERT(nni_init_get_param(NNG_INIT_PARAMETER_NONE, 567) == 567); +} + +void +test_set_effective(void) +{ + nni_init_set_effective(NNG_INIT_PARAMETER_NONE, 999); + NUTS_ASSERT(nni_init_get_param(NNG_INIT_PARAMETER_NONE, 0) == 0); + NUTS_ASSERT(nni_init_get_effective(NNG_INIT_PARAMETER_NONE) == 999); + nng_fini(); +} + +void +test_init_zero_resolvers(void) +{ + nng_socket s; + nng_init_set_parameter(NNG_INIT_NUM_RESOLVER_THREADS, 0); + NUTS_OPEN(s); + NUTS_CLOSE(s); + NUTS_ASSERT( + nni_init_get_effective(NNG_INIT_NUM_RESOLVER_THREADS) == 1); + nng_fini(); +} + +void +test_init_one_task_thread(void) +{ + nng_socket s; + nng_init_set_parameter(NNG_INIT_NUM_TASK_THREADS, 0); + nng_init_set_parameter(NNG_INIT_MAX_TASK_THREADS, 1); + NUTS_OPEN(s); + NUTS_CLOSE(s); + NUTS_ASSERT(nni_init_get_effective(NNG_INIT_NUM_TASK_THREADS) == 2); + nng_fini(); +} + +void +test_init_too_many_task_threads(void) +{ + nng_socket s; + nng_init_set_parameter(NNG_INIT_NUM_TASK_THREADS, 256); + nng_init_set_parameter(NNG_INIT_MAX_TASK_THREADS, 4); + NUTS_OPEN(s); + NUTS_CLOSE(s); + NUTS_ASSERT(nni_init_get_effective(NNG_INIT_NUM_TASK_THREADS) == 4); + nng_fini(); +} + +void +test_init_no_expire_thread(void) +{ + nng_socket s; + nng_init_set_parameter(NNG_INIT_NUM_EXPIRE_THREADS, 0); + nng_init_set_parameter(NNG_INIT_MAX_EXPIRE_THREADS, 0); + NUTS_OPEN(s); + NUTS_CLOSE(s); + NUTS_ASSERT(nni_init_get_effective(NNG_INIT_NUM_EXPIRE_THREADS) == 1); + nng_fini(); +} + +void +test_init_too_many_expire_threads(void) +{ + nng_socket s; + nng_init_set_parameter(NNG_INIT_NUM_EXPIRE_THREADS, 256); + nng_init_set_parameter(NNG_INIT_MAX_EXPIRE_THREADS, 2); + NUTS_OPEN(s); + NUTS_CLOSE(s); + NUTS_ASSERT(nni_init_get_effective(NNG_INIT_NUM_EXPIRE_THREADS) == 2); + nng_fini(); +} + +// poller tuning only supported on Windows right now +#ifdef NNG_PLATFORM_WINDOWS +void +test_init_poller_no_threads(void) +{ + nng_socket s; + nng_init_set_parameter(NNG_INIT_NUM_POLLER_THREADS, 0); + nng_init_set_parameter(NNG_INIT_MAX_POLLER_THREADS, 0); + NUTS_OPEN(s); + NUTS_CLOSE(s); + NUTS_ASSERT(nni_init_get_effective(NNG_INIT_NUM_POLLER_THREADS) == 1); + nng_fini(); +} + +void +test_init_too_many_poller_threads(void) +{ + nng_socket s; + nng_init_set_parameter(NNG_INIT_NUM_POLLER_THREADS, 256); + nng_init_set_parameter(NNG_INIT_MAX_POLLER_THREADS, 2); + NUTS_OPEN(s); + NUTS_CLOSE(s); + NUTS_ASSERT(nni_init_get_effective(NNG_INIT_NUM_POLLER_THREADS) == 2); + nng_fini(); +} +#endif + +NUTS_TESTS = { + { "init parameter", test_init_param }, + { "init set effective", test_set_effective }, + { "init zero resolvers", test_init_zero_resolvers }, + { "init one task thread", test_init_one_task_thread }, + { "init too many task threads", test_init_too_many_task_threads }, + { "init no expire thread", test_init_no_expire_thread }, + { "init too many expire threads", test_init_too_many_expire_threads }, +#ifdef NNG_PLATFORM_WINDOWS + { "init no poller thread", test_init_poller_no_threads }, + { "init too many poller threads", test_init_too_many_poller_threads }, +#endif + + { NULL, NULL }, +};
\ No newline at end of file |
