Tarantool development patches archive
 help / color / mirror / Atom feed
* [Tarantool-patches] [PATCH v2 luajit 0/6] Revorking C tests
@ 2023-05-18 20:44 Sergey Kaplun via Tarantool-patches
  2023-05-18 20:44 ` [Tarantool-patches] [PATCH v2 luajit 1/6] test: fix setting of {DY}LD_LIBRARY_PATH variables Sergey Kaplun via Tarantool-patches
                   ` (6 more replies)
  0 siblings, 7 replies; 29+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2023-05-18 20:44 UTC (permalink / raw)
  To: Igor Munkin, Maxim Kokryashkin, Sergey Bronnikov; +Cc: tarantool-patches

The whole idea of the patch-set introduce module for LuaJIT C tests. It
also, can be used for unit tests.
* The first patch is the prerequisite for the patch-set. It fixes
  LD_LIBRARY_PATH definition.
* The 2nd and 3d patches provides an API and helper for writing the tests.
* The last 3 patches rewrite existing tests that should be written in C in
  the proper way.

Branch: https://github.com/tarantool/luajit/tree/skaplun/gh-noticket-tarantool-c-tests
PR: https://github.com/tarantool/tarantool/pull/8444
Related Issue:
* https://github.com/tarantool/tarantool/issues/7900
* https://github.com/tarantool/tarantool/issues/781

Thanks Maxim, for the review!

I've fixed some Maxim comments and suggestions for the previous series.
Some ignorable comments about wording are ignored:).

Also, see answers for your questions below:

> >+if(NOT PROVE)
> >+ message(WARNING "`prove' is not found, so tarantool-c-tests target is not generated")
> >+ return()
> >+endif()
> There is the same check in the test/tarantool-tests/CMakeLists.txt. Maybe
> we should move it to the higher-level CMake so the lower-level CMakeLists
> inherit it.

I agree it maybe done, but not within this particular patchsett, so
ignoring for now.

> >+#define test_run_group(t_arr, t_state) \
> >+ _test_run_group(__func__, t_arr, lengthof(t_arr), t_state)
> Is there any reason for it to be a macro and not a function wrapper?
> I believe it is better to use the functions when possible, since they are
> easier to support and debug.

Just for the convenience in usage of __func__ macro as a test group name.

> >+/* Need for `strchr()` in diagnostic parsing. */
> `strchr()` is not safe, despite the fact it searches till `\0`.
> We should at least replace it with `memchr()`, which has
> the explicit constraint for buffer length.
> >+#include <string.h>

Yes, but:
1) We use it only for our test code, where we set this `\0` directly to
mark EOL.
2) It's simplier than use several marks in buffer.
So, ignoring for now.

> >+# vim: ft=cmake expandtab shiftwidth=2: tabstop=2:
> That change is not necessary.

Yes, but more convenient to use in vim -- since our usual codestyle isn't 4
tabs as its default for CMake. :)
Still we don't use it anywhere (unfortunately), so removed.

> >+ bail_out("failed to translate Lua code snippet");
> Why `bail_out` and not an assertion? Here and below.

Assertion is for some thing we wnat to test and may fail.
Bail out usage is more specific:
| As an emergency measure a test script can decide that further tests are
| useless (e.g. missing dependencies) and testing should stop immediately.
| In that case the test script prints the magic words
See [1]. I think that loading Lua script helper (dependency) is
something like that.

> >+#include "lj_arch.h"
> Side note: I don't like the approach with private headers, but
> I couldn't find any better way to check that. Maybe it is a good
> idea to implement a public C API function to get the information
> about OS and ARCH, since it is a really common to check them?

I think, that this is the best option, espessialy if we want to write
some unit test for some specific module (I mean <src/lj_*>).

Changes in v2:
1) use

| int _test_run_group(const char *group_name, const struct test_unit tests[],
| 		    size_t n_tests, void *test_state);

instead of

| int _test_run_group(const char *group_name, const struct test_unit *tests,
| 		    size_t n_tests, void *test_state);

2) `skip()` `skip_all()` and `todo()` helpers now return values to be
return to runner.
i.e. change usage from
| if (cond)
| 	skip("NIY");
to
| if (cond)
| 	return skip("NIY");

`bail_out()` helper still just exits with error code, which corresponding
its standard specification.

But now some parts of the code start to look "alya cringe":
| return todo("Need to replace backtrace with libunwind first");
| lua_State *L = test_state;
| utils_get_aux_lfunc(L);
| (void)luaJIT_setmode(L, 0, LUAJIT_MODE_ENGINE | LUAJIT_MODE_OFF);
| (void)luaJIT_setmode(L, 0, LUAJIT_MODE_ENGINE | LUAJIT_MODE_FLUSH);
| check_profile_func(L);
| (void)luaJIT_setmode(L, 0, LUAJIT_MODE_ENGINE | LUAJIT_MODE_ON);
| return TEST_EXIT_SUCCESS;

(Yes, we want to use unconditional `todo()`).
So I commented the similar code, helper `check_profile_func()`, etc.
with `#if 0`.

3) In 4th patch use subtest group for snap-related tests to skip all at
once with disabled JIT.

4) lj-49-bad-lightuserdata is moved in C tests, too.

Sergey Kaplun (6):
  test: fix setting of {DY}LD_LIBRARY_PATH variables
  test: introduce module for C tests
  test: introduce utils.h helper for C tests
  test: rewrite misclib-getmetrics-capi test in C
  test: rewrite misclib-sysprof-capi test in C
  test: rewrite lj-49-bad-lightuserdata test in C

 .gitignore                                    |   1 +
 src/CMakeLists.txt                            |   2 +
 test/CMakeLists.txt                           |   2 +
 test/tarantool-c-tests/CMakeLists.txt         |  65 ++++
 .../lj-49-bad-lightuserdata.test.c}           |  47 +--
 .../misclib-getmetrics-capi-script.lua}       |  83 ++---
 .../misclib-getmetrics-capi.test.c            | 343 ++++++++++++++++++
 .../misclib-sysprof-capi-script.lua           |  35 ++
 .../misclib-sysprof-capi.test.c               | 325 +++++++++++++++++
 test/tarantool-c-tests/test.c                 | 251 +++++++++++++
 test/tarantool-c-tests/test.h                 | 217 +++++++++++
 test/tarantool-c-tests/utils.h                |  63 ++++
 test/tarantool-tests/CMakeLists.txt           |  12 +-
 .../lj-49-bad-lightuserdata.test.lua          |  11 -
 .../lj-49-bad-lightuserdata/CMakeLists.txt    |   1 -
 .../misclib-getmetrics-capi/CMakeLists.txt    |   1 -
 .../misclib-getmetrics-capi/testgetmetrics.c  | 270 --------------
 .../misclib-sysprof-capi.test.lua             |  54 ---
 .../misclib-sysprof-capi/CMakeLists.txt       |   1 -
 .../misclib-sysprof-capi/testsysprof.c        | 260 -------------
 20 files changed, 1374 insertions(+), 670 deletions(-)
 create mode 100644 test/tarantool-c-tests/CMakeLists.txt
 rename test/{tarantool-tests/lj-49-bad-lightuserdata/testlightuserdata.c => tarantool-c-tests/lj-49-bad-lightuserdata.test.c} (55%)
 rename test/{tarantool-tests/misclib-getmetrics-capi.test.lua => tarantool-c-tests/misclib-getmetrics-capi-script.lua} (68%)
 create mode 100644 test/tarantool-c-tests/misclib-getmetrics-capi.test.c
 create mode 100644 test/tarantool-c-tests/misclib-sysprof-capi-script.lua
 create mode 100644 test/tarantool-c-tests/misclib-sysprof-capi.test.c
 create mode 100644 test/tarantool-c-tests/test.c
 create mode 100644 test/tarantool-c-tests/test.h
 create mode 100644 test/tarantool-c-tests/utils.h
 delete mode 100644 test/tarantool-tests/lj-49-bad-lightuserdata.test.lua
 delete mode 100644 test/tarantool-tests/lj-49-bad-lightuserdata/CMakeLists.txt
 delete mode 100644 test/tarantool-tests/misclib-getmetrics-capi/CMakeLists.txt
 delete mode 100644 test/tarantool-tests/misclib-getmetrics-capi/testgetmetrics.c
 delete mode 100644 test/tarantool-tests/misclib-sysprof-capi.test.lua
 delete mode 100644 test/tarantool-tests/misclib-sysprof-capi/CMakeLists.txt
 delete mode 100644 test/tarantool-tests/misclib-sysprof-capi/testsysprof.c

-- 
2.34.1


^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2023-05-31 13:36 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-18 20:44 [Tarantool-patches] [PATCH v2 luajit 0/6] Revorking C tests Sergey Kaplun via Tarantool-patches
2023-05-18 20:44 ` [Tarantool-patches] [PATCH v2 luajit 1/6] test: fix setting of {DY}LD_LIBRARY_PATH variables Sergey Kaplun via Tarantool-patches
2023-05-19 11:23   ` Maxim Kokryashkin via Tarantool-patches
2023-05-22 11:03   ` Sergey Bronnikov via Tarantool-patches
2023-05-23  6:47     ` Sergey Kaplun via Tarantool-patches
2023-05-29 14:37       ` Sergey Bronnikov via Tarantool-patches
2023-05-18 20:44 ` [Tarantool-patches] [PATCH v2 luajit 2/6] test: introduce module for C tests Sergey Kaplun via Tarantool-patches
2023-05-19 11:46   ` Maxim Kokryashkin via Tarantool-patches
2023-05-22 12:33   ` Sergey Bronnikov via Tarantool-patches
2023-05-24  6:41     ` Sergey Kaplun via Tarantool-patches
2023-05-25 17:33       ` Sergey Bronnikov via Tarantool-patches
2023-05-29 10:03         ` Sergey Kaplun via Tarantool-patches
2023-05-29 14:38           ` Sergey Bronnikov via Tarantool-patches
2023-05-31 13:32             ` Sergey Kaplun via Tarantool-patches
2023-05-18 20:44 ` [Tarantool-patches] [PATCH v2 luajit 3/6] test: introduce utils.h helper " Sergey Kaplun via Tarantool-patches
2023-05-19 11:58   ` Maxim Kokryashkin via Tarantool-patches
2023-05-20  7:52     ` Sergey Kaplun via Tarantool-patches
2023-05-29 15:26   ` Sergey Bronnikov via Tarantool-patches
2023-05-18 20:44 ` [Tarantool-patches] [PATCH v2 luajit 4/6] test: rewrite misclib-getmetrics-capi test in C Sergey Kaplun via Tarantool-patches
2023-05-19 12:17   ` Maxim Kokryashkin via Tarantool-patches
2023-05-20  8:08     ` Sergey Kaplun via Tarantool-patches
2023-05-29 16:15   ` Sergey Bronnikov via Tarantool-patches
2023-05-18 20:44 ` [Tarantool-patches] [PATCH v2 luajit 5/6] test: rewrite misclib-sysprof-capi " Sergey Kaplun via Tarantool-patches
2023-05-19 13:00   ` Maxim Kokryashkin via Tarantool-patches
2023-05-20  7:28     ` Sergey Kaplun via Tarantool-patches
2023-05-18 20:44 ` [Tarantool-patches] [PATCH v2 luajit 6/6] test: rewrite lj-49-bad-lightuserdata " Sergey Kaplun via Tarantool-patches
2023-05-19 12:40   ` Maxim Kokryashkin via Tarantool-patches
2023-05-19 14:29 ` [Tarantool-patches] [PATCH v2 luajit 0/6] Revorking C tests Maxim Kokryashkin via Tarantool-patches
2023-05-20  8:38   ` Sergey Kaplun via Tarantool-patches

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox