[Tarantool-patches] [PATCH luajit 4/7] test: make skipcond helper more convenient
Igor Munkin
imun at tarantool.org
Mon Feb 27 12:18:39 MSK 2023
Sergey,
Thanks for the patch!
On 15.02.23, Sergey Kaplun wrote:
> Hi, Igor!
> Thanks for the patch!
> `skipcond` improvement is delightful, I realy like it!
>
> Please, consider my comments below.
>
> On 13.02.23, Igor Munkin wrote:
> > This patch provides two enhancements for <utils.skipcond>:
> > 1. As a result of the patch, <utils.skipcond> becomes multi-conditional,
> > so there is no need to concatenate one huge and complex condition
> > with one huge unreadable reason. Now skipcond receives the table with
> > conditions and skips the test if one of the given conditions is met.
> > 2. <utils.skipcond> yields the test object, that allows to chain
> > skipcond call right next to the test constructor.
> >
> > Finally as a result of the aforementioned changes <utils.skipcond> is
> > moved to tap.lua.
> >
> > Relates to tarantool/tarantool#8252
> >
> > Co-authored-by: Sergey Kaplun <skaplun at tarantool.org>
> > Signed-off-by: Igor Munkin <imun at tarantool.org>
> > ---
<snipped>
> > diff --git a/test/tarantool-tests/gh-5813-resolving-of-c-symbols.test.lua b/test/tarantool-tests/gh-5813-resolving-of-c-symbols.test.lua
> > index e0b6d86d..019fed29 100644
> > --- a/test/tarantool-tests/gh-5813-resolving-of-c-symbols.test.lua
> > +++ b/test/tarantool-tests/gh-5813-resolving-of-c-symbols.test.lua
>
> <snipped>
>
> >
> > -jit.off()
> > -jit.flush()
> > +-- XXX: Run JIT tuning functions in a safe frame to avoid errors
> > +-- thrown when LuaJIT is compiled with JIT engine disabled.
> > +pcall(jit.off)
> > +pcall(jit.flush)
>
> Should this be the part of the next patch?
Yes, thanks for noticing. Moved as well as all other occurrences.
>
> >
> > local bufread = require "utils.bufread"
> > local symtab = require "utils.symtab"
<snipped>
> > diff --git a/test/tarantool-tests/lj-603-err-snap-restore.test.lua b/test/tarantool-tests/lj-603-err-snap-restore.test.lua
> > index b5353e85..c67da00e 100644
> > --- a/test/tarantool-tests/lj-603-err-snap-restore.test.lua
> > +++ b/test/tarantool-tests/lj-603-err-snap-restore.test.lua
> > @@ -1,9 +1,15 @@
> > local tap = require('tap')
> > -
> > -- Test to demonstrate the incorrect JIT behaviour when an error
> > -- is raised on restoration from the snapshot.
> > -- See also https://github.com/LuaJIT/LuaJIT/issues/603.
> > -local test = tap.test('lj-603-err-snap-restore.test.lua')
> > +local test = tap.test('lj-603-err-snap-restore'):skipcond({
> > + ['Disabled on *BSD due to #4819'] = jit.os == 'BSD',
>
> Side note: discussed offline that we can disable the whole test file,
> even that the first test check the behaviour for the VM too.
I guess we'll go back to your original approach here (see Max
suggestion in the next thread).
>
> > + -- XXX: The different amount of stack slots is in-use for
> > + -- Tarantool at start, so just skip test for it.
> > + -- luacheck: no global
> > + ['Disable test for Tarantool'] = _TARANTOOL,
> > +})
> > +
> > test:plan(2)
> >
> > -- XXX: This is fragile. We need a specific amount of Lua stack
> > @@ -15,7 +21,7 @@ test:plan(2)
> > -- error handling"), etc.).
> > -- This amount is suited well for GC64 and non-GC64 mode.
> > -- luacheck: no unused
> > -local _, _, _, _, _, _
> > +local _, _, _, _, _, _, _, _, _, _, _, _, _, _, _
>
> Side note: Is necessary due to different allocations and memory mapping,
> so we can hit `ERRERR` error during raising the `STKOV` error and
> handler will be called.
Well, I can't agree with Max here: I guess this should be stopped within
this patchset. See the next thread for the changes.
>
> >
> > local handler_is_called = false
> > local recursive_f
<snipped>
> > diff --git a/test/tarantool-tests/misclib-getmetrics-capi.test.lua b/test/tarantool-tests/misclib-getmetrics-capi.test.lua
> > index 42a9adf9..a41a1c7a 100644
> > --- a/test/tarantool-tests/misclib-getmetrics-capi.test.lua
> > +++ b/test/tarantool-tests/misclib-getmetrics-capi.test.lua
> > @@ -1,12 +1,15 @@
>
> <snipped>
>
> > +local maxnins = require('utils').const.maxnins
>
> Minor: since this is the constant for the test should we name it in the
> upper-case?
Well, I don't have any arguments for or against this approach, so I just
do it, if you want. The diff is below.
================================================================================
diff --git a/test/tarantool-tests/misclib-getmetrics-capi.test.lua b/test/tarantool-tests/misclib-getmetrics-capi.test.lua
index c8879f57..654e5545 100644
--- a/test/tarantool-tests/misclib-getmetrics-capi.test.lua
+++ b/test/tarantool-tests/misclib-getmetrics-capi.test.lua
@@ -10,7 +10,7 @@ local path = arg[0]:gsub('%.test%.lua', '')
local suffix = package.cpath:match('?.(%a+);')
package.cpath = ('%s/?.%s;'):format(path, suffix)..package.cpath
-local maxnins = require('utils').const.maxnins
+local MAXNINS = require('utils').const.maxnins
local jit_opt_default = {
3, -- level
"hotloop=56",
@@ -95,7 +95,7 @@ end))
-- Compiled loop with a side exit which does not get compiled.
test:ok(testgetmetrics.snap_restores(function()
- jit.opt.start(0, "hotloop=1", "hotexit=2", ("minstitch=%d"):format(maxnins))
+ jit.opt.start(0, "hotloop=1", "hotexit=2", ("minstitch=%d"):format(MAXNINS))
local function foo(i)
-- math.fmod is not yet compiled!
================================================================================
>
> > local jit_opt_default = {
<snipped>
> > diff --git a/test/tarantool-tests/misclib-getmetrics-lapi.test.lua b/test/tarantool-tests/misclib-getmetrics-lapi.test.lua
> > index 0c170d0c..e5ee7902 100644
> > --- a/test/tarantool-tests/misclib-getmetrics-lapi.test.lua
> > +++ b/test/tarantool-tests/misclib-getmetrics-lapi.test.lua
>
> <snipped>
>
> >
> > +local maxnins = require('utils').const.maxnins
>
> Ditto.
Ditto, see the diff below:
================================================================================
diff --git a/test/tarantool-tests/misclib-getmetrics-lapi.test.lua b/test/tarantool-tests/misclib-getmetrics-lapi.test.lua
index b1f86cea..881e717b 100644
--- a/test/tarantool-tests/misclib-getmetrics-lapi.test.lua
+++ b/test/tarantool-tests/misclib-getmetrics-lapi.test.lua
@@ -10,7 +10,7 @@ local test = tap.test("lib-misc-getmetrics"):skipcond({
test:plan(10)
-local maxnins = require('utils').const.maxnins
+local MAXNINS = require('utils').const.maxnins
local jit_opt_default = {
3, -- level
"hotloop=56",
@@ -280,7 +280,7 @@ test:test("snap-restores-loop-side-exit-non-compiled", function(subtest)
-- Compiled loop with a side exit which does not get compiled.
subtest:plan(1)
- jit.opt.start(0, "hotloop=1", "hotexit=2", ("minstitch=%d"):format(maxnins))
+ jit.opt.start(0, "hotloop=1", "hotexit=2", ("minstitch=%d"):format(MAXNINS))
local function foo(i)
-- math.fmod is not yet compiled!
================================================================================
>
> > local jit_opt_default = {
> > 3, -- level
> > "hotloop=56",
>
> <snipped>
>
> > diff --git a/test/tarantool-tests/misclib-memprof-lapi.test.lua b/test/tarantool-tests/misclib-memprof-lapi.test.lua
> > index bae0c27c..accb1ee1 100644
> > --- a/test/tarantool-tests/misclib-memprof-lapi.test.lua
> > +++ b/test/tarantool-tests/misclib-memprof-lapi.test.lua
>
> <snipped>
>
> > @@ -28,8 +28,8 @@ local memprof = require "memprof.parse"
> > local process = require "memprof.process"
> > local symtab = require "utils.symtab"
> >
> > -local TMP_BINFILE = utils.profilename("memprofdata.tmp.bin")
> > -local BAD_PATH = utils.profilename("memprofdata/tmp.bin")
> > +local TMP_BINFILE = require("utils").profilename("memprofdata.tmp.bin")
>
> Don't get the point.
> Why do not require this module once, so there is no need to change these
> lines?
Hm. Ya prosto objebalsa tut. You and Max are right, I've fixed this the
following way (the diff is below):
================================================================================
diff --git a/test/tarantool-tests/misclib-memprof-lapi.test.lua b/test/tarantool-tests/misclib-memprof-lapi.test.lua
index e2701c13..1d3f734e 100644
--- a/test/tarantool-tests/misclib-memprof-lapi.test.lua
+++ b/test/tarantool-tests/misclib-memprof-lapi.test.lua
@@ -27,9 +27,10 @@ local bufread = require "utils.bufread"
local memprof = require "memprof.parse"
local process = require "memprof.process"
local symtab = require "utils.symtab"
+local profilename = require("utils").profilename
-local TMP_BINFILE = require("utils").profilename("memprofdata.tmp.bin")
-local BAD_PATH = require("utils").profilename("memprofdata/tmp.bin")
+local TMP_BINFILE = profilename("memprofdata.tmp.bin")
+local BAD_PATH = profilename("memprofdata/tmp.bin")
local SRC_PATH = "@"..arg[0]
local function default_payload()
================================================================================
>
> > +local BAD_PATH = require("utils").profilename("memprofdata/tmp.bin")
> > local SRC_PATH = "@"..arg[0]
> >
> > local function default_payload()
<snipped>
> > diff --git a/test/tarantool-tests/misclib-sysprof-lapi.test.lua b/test/tarantool-tests/misclib-sysprof-lapi.test.lua
> > index 4bf10e8d..8dc36592 100644
> > --- a/test/tarantool-tests/misclib-sysprof-lapi.test.lua
> > +++ b/test/tarantool-tests/misclib-sysprof-lapi.test.lua
>
> <snipped>
>
> > @@ -18,8 +13,8 @@ local bufread = require("utils.bufread")
> > local symtab = require("utils.symtab")
> > local sysprof = require("sysprof.parse")
> >
> > -local TMP_BINFILE = utils.profilename("sysprofdata.tmp.bin")
> > -local BAD_PATH = utils.profilename("sysprofdata/tmp.bin")
> > +local TMP_BINFILE = require("utils").profilename("sysprofdata.tmp.bin")
> > +local BAD_PATH = require("utils").profilename("sysprofdata/tmp.bin")
>
> Ditto.
Ditto, see the diff below:
================================================================================
diff --git a/test/tarantool-tests/misclib-sysprof-lapi.test.lua b/test/tarantool-tests/misclib-sysprof-lapi.test.lua
index dcde81b9..3e7c0005 100644
--- a/test/tarantool-tests/misclib-sysprof-lapi.test.lua
+++ b/test/tarantool-tests/misclib-sysprof-lapi.test.lua
@@ -14,9 +14,10 @@ pcall(jit.flush)
local bufread = require("utils.bufread")
local symtab = require("utils.symtab")
local sysprof = require("sysprof.parse")
+local profilename = require("utils").profilename
-local TMP_BINFILE = require("utils").profilename("sysprofdata.tmp.bin")
-local BAD_PATH = require("utils").profilename("sysprofdata/tmp.bin")
+local TMP_BINFILE = profilename("sysprofdata.tmp.bin")
+local BAD_PATH = profilename("sysprofdata/tmp.bin")
local function payload()
local function fib(n)
================================================================================
>
> >
> > local function payload()
> > local function fib(n)
> > diff --git a/test/tarantool-tests/tap.lua b/test/tarantool-tests/tap.lua
> > index a1f54d20..ac04c01d 100644
> > --- a/test/tarantool-tests/tap.lua
> > +++ b/test/tarantool-tests/tap.lua
> > @@ -304,6 +304,17 @@ local function check(test)
> > return test.planned == test.total and test.failed == 0
> > end
> >
> > +local function skipcond(test, conditions)
> > + for message, condition in pairs(conditions) do
> > + if condition then
> > + test:plan(1)
> > + test:skip(message)
> > + os.exit(test:check() and 0 or 1)
>
> Does this mean that the subtest should be the last test to run in the
> file? It's kinda not obvious. Also, I suggest the following approach:
> Keep that condition search result, and skip every test (and subtest) if
> the condition met. We can still skip full test, like you done, if it has
> no parent test to run (has no test.parent).
It means that ya objebalsa one more time... Well, I have to declare that
this approach doesn't work for subtests. Hence, I suggest the following:
1. Proceed with this patchset for the root (i.e. parent) tests, since
this is the most popular way to write tests in Tarantool suite.
2. Think a little how to solve the problem for subtests. For now it's
too complex: plain Lua assertions, JIT engine tuning, etc --
everything need to be considered and carefully handled.
Anyway, to prevent skipcond misuse I added the next assertion:
================================================================================
diff --git a/test/tarantool-tests/tap.lua b/test/tarantool-tests/tap.lua
index ac04c01d..f7be9c81 100644
--- a/test/tarantool-tests/tap.lua
+++ b/test/tarantool-tests/tap.lua
@@ -305,6 +305,7 @@ local function check(test)
end
local function skipcond(test, conditions)
+ assert(test.parent ~= nil, 'FIXME: test:skipcond works only for parent tests')
for message, condition in pairs(conditions) do
if condition then
test:plan(1)
================================================================================
>
> > + end
> > + end
> > + return test
> > +end
> > +
> > test_mt = {
> > __index = {
> > test = new,
<snipped>
> > --
> > 2.30.2
> >
>
> --
> Best regards,
> Sergey Kaplun
--
Best regards,
IM
More information about the Tarantool-patches
mailing list