[Tarantool-patches] [PATCH v2 luajit 2/6] test: introduce module for C tests
Sergey Bronnikov
sergeyb at tarantool.org
Thu May 25 20:33:20 MSK 2023
Hi, Sergey! Thanks for fixes, see comments below.
On 5/24/23 09:41, Sergey Kaplun wrote:
> Hi, Sergey!
> Thanks for the review!
>
> Fixed some of your comments, branch is force-pushed.
>
<snipped>
> The <test.c> module serves to achieve these goals without too fancy
> features.
>
> It's functionality inspired by cmoka API [1], but only TAP14 [2]
>> typo: cmocka
> Fixed, thanks!
Nit: probably it is better "CMocka", because it is a proper name ("имя
собственное") and should be with capital letters.
Feel free to ignore.
>
>>> protocol is supported (Version of TAP set to 13 to be compatible with
>>> old TAP13 harnesses).
>> Please add tests for TAP13/TAP14 conformance testing.
>>
>> It would be unpleasant if proposed library will produce TAP-incompatible
>> output and it will break parsing in 'prove'.
>>
>> At least single test for passed testcase "ok", single testcase for
>> failed "not ok" testcase, one testcase for every directive.
> I've added the tests for ok|skip|todo. "not ok" is skipped, because it
> rather tricky to test it behaviour via prove without test failure.
>
> The content of <test/tarantool-c-tests/unit-tap.test.c> is the
> following:
> ===================================================================
> #include "test.h"
>
> #define UNUSED(x) ((void)(x))
>
> static int test_ok(void *test_state)
> {
> UNUSED(test_state);
> return TEST_EXIT_SUCCESS;
> }
>
> static int test_skip(void *test_state)
> {
> UNUSED(test_state);
> return skip("test skip");
> }
>
> static int test_todo(void *test_state)
> {
> UNUSED(test_state);
> return todo("test todo");
> }
>
> int main(void)
> {
> const struct test_unit tgroup[] = {
> test_unit_new(test_ok),
> test_unit_new(test_skip),
> test_unit_new(test_todo)
> };
> return test_run_group(tgroup, NULL);
> }
> ===================================================================
This test checks that macroses/functions in test.h could be called and
nothing more.
We need checking TAP output that binary will emit for different test
statuses, plan, testcase counters ("1..10").
>
>>> The group of unit tests is declared like the following:
> <snipped>
>
>>> [1]: https://github.com/clibs/cmocka
>>> [2]: https://testanything.org/tap-version-14-specification.html
>>>
>>> Part of tarantool/tarantool#7900
>>> ---
>>> test/CMakeLists.txt | 2 +
>>> test/tarantool-c-tests/CMakeLists.txt | 41 +++++
>>> test/tarantool-c-tests/test.c | 251 ++++++++++++++++++++++++++
>>> test/tarantool-c-tests/test.h | 217 ++++++++++++++++++++++
>>> 4 files changed, 511 insertions(+)
>>> create mode 100644 test/tarantool-c-tests/CMakeLists.txt
>>> create mode 100644 test/tarantool-c-tests/test.c
>>> create mode 100644 test/tarantool-c-tests/test.h
>>>
>>> diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
>>> index a8262b12..47296a22 100644
>>> --- a/test/CMakeLists.txt
>>> +++ b/test/CMakeLists.txt
>>> @@ -48,12 +48,14 @@ separate_arguments(LUAJIT_TEST_COMMAND)
>>> add_subdirectory(LuaJIT-tests)
>>> add_subdirectory(PUC-Rio-Lua-5.1-tests)
>>> add_subdirectory(lua-Harness-tests)
>>> +add_subdirectory(tarantool-c-tests)
>>> add_subdirectory(tarantool-tests)
>>>
>>> add_custom_target(${PROJECT_NAME}-test DEPENDS
>>> LuaJIT-tests
>>> PUC-Rio-Lua-5.1-tests
>>> lua-Harness-tests
>>> + tarantool-c-tests
>>> tarantool-tests
>> Should we rename tarantool-tests to tarantool-lua-tests in a separate
>> commit?
> Maybe, but I don't really want to do it since inconsistencies with
> Tarantool's integration suite, so I suppose we can leave it as is, can't
> we?
Sure, let's skip.
>>> )
>>>
>>> diff --git a/test/tarantool-c-tests/CMakeLists.txt b/test/tarantool-c-tests/CMakeLists.txt
>>> new file mode 100644
>>> index 00000000..c6b7cd30
>>> --- /dev/null
>>> +++ b/test/tarantool-c-tests/CMakeLists.txt
>>> @@ -0,0 +1,41 @@
>>> +find_program(PROVE prove)
>>> +if(NOT PROVE)
>>> + message(WARNING "`prove' is not found, so tarantool-c-tests target is not generated")
>>> + return()
>>> +endif()
>> copy-pasted from test/tarantool-tests/CMakeLists.txt, I would place it
>> to test/CMakeLists.txt.
>>
>> At least searching prove (find_program(PROVE prove)).
> As, discussed here [1], this refactoring should be the part of the separate
> pachset.
OK
>
>>> +
>>> +set(C_TEST_SUFFIX .c_test)
>> Lua tests in test/tarantool-tests have prefix ".test.lua".
>>
>> Should we use here ".test.c" for consistency?
> "c_test" is the suffix for executable files.
> ".test.c" is used for test files themselves.
OK
>
>>
>>> +set(C_TEST_FLAGS --failures --shuffle)
>>> +
> <snipped>
>
>>> diff --git a/test/tarantool-c-tests/test.c b/test/tarantool-c-tests/test.c
>>> new file mode 100644
>>> index 00000000..74cba3a3
>>> --- /dev/null
>>> +++ b/test/tarantool-c-tests/test.c
> <snipped>
>
>>> diff --git a/test/tarantool-c-tests/test.h b/test/tarantool-c-tests/test.h
>>> new file mode 100644
>>> index 00000000..28df9daf
>>> --- /dev/null
>>> +++ b/test/tarantool-c-tests/test.h
>>> @@ -0,0 +1,217 @@
>>> +#ifndef TEST_H
>>> +#define TEST_H
>> I would use prefix to avoid intersection with another headers. For
>> example "TARANTOOL_TEST_H" or something else.
> Replaced with TARANTOOL_LUAJIT_TEST_H. See the iterative patch below:
Good, thanks!
>
> ===================================================================
> diff --git a/test/tarantool-c-tests/test.h b/test/tarantool-c-tests/test.h
> index 28df9daf..047f01a5 100644
> --- a/test/tarantool-c-tests/test.h
> +++ b/test/tarantool-c-tests/test.h
> @@ -1,5 +1,5 @@
> -#ifndef TEST_H
> -#define TEST_H
> +#ifndef TARANTOOL_LUAJIT_TEST_H
> +#define TARANTOOL_LUAJIT_TEST_H
>
> #include <stdio.h>
> #include <stdlib.h>
> @@ -214,4 +214,4 @@ static inline int todo(const char *reason)
> ); \
> } while (0)
>
> -#endif /* TEST_H */
> +#endif /* TARANTOOL_LUAJIT_TEST_H */
> ===================================================================
>
> Same for utils header:
>
> ===================================================================
> diff --git a/test/tarantool-c-tests/utils.h b/test/tarantool-c-tests/utils.h
> index cf668006..f651f7f6 100644
> --- a/test/tarantool-c-tests/utils.h
> +++ b/test/tarantool-c-tests/utils.h
> @@ -1,3 +1,6 @@
> +#ifndef TARANTOOL_LUAJIT_TEST_UTILS_H
> +#define TARANTOOL_LUAJIT_TEST_UTILS_H
> +
> #include <limits.h>
> #include <string.h>
>
> @@ -61,3 +64,5 @@ static void utils_lua_close(lua_State *L)
> if (!lua_isfunction((L), -1)) \
> bail_out("Can't get auxiliary test function"); \
> } while (0)
> +
> +#endif /* TARANTOOL_LUAJIT_TEST_UTILS_H */
> ===================================================================
>
>>> +
> <snipped>
>
>>> +#endif /* TEST_H */
> [1]: https://lists.tarantool.org/pipermail/tarantool-patches/2023-May/027577.html
>
More information about the Tarantool-patches
mailing list