[Tarantool-patches] [PATCH luajit 1/8] test: introduce LUAJIT_TEST_VARDIR variable

Sergey Bronnikov sergeyb at tarantool.org
Mon Aug 15 15:08:22 MSK 2022


Igor,

  thanks for the patch. See my comments inline.

On 11.08.2022 14:17, Igor Munkin wrote:
> Before the patch both memprof and sysprof artefacts are generated within
> the binary artefacts tree (i.e. in the same directory LuaJIT binary is
> generated). However, more convenient way is producing these temporary
> profiles in a separate directory (e.g. located on the partition with
> more strict space limits). As a result of the patch all memprof and
> sysprof test chunks consider LUAJIT_TEST_VARDIR environment variable to
> set the directory where test profiles are generated. For the case when
> LUAJIT_TEST_VARDIR is not set, everything works as before.

Commit message is inconsistent a bit with a patch itself.

As far as I understand many hunks are not related to introducing 
LUAJIT_TEST_VARDIR.

Probably it is better to change commit one-line message from "test: 
introduce LUAJIT_TEST_VARDIR variable"

to something like "test: refactoring and introduce LUAJIT_TEST_VARDIR 
variable". It allows to keep patch

as is and change expectations for those who will look at your patch.


>
> Part of tarantool/tarantool#7472
>
> Signed-off-by: Igor Munkin <imun at tarantool.org>
> ---
>   .../gh-5813-resolving-of-c-symbols.test.lua   |  6 +++--
>   .../misclib-memprof-lapi.test.lua             | 22 ++++++++++---------
>   .../misclib-sysprof-lapi.test.lua             |  8 ++++---
>   test/tarantool-tests/utils.lua                | 12 ++++++++++
>   4 files changed, 33 insertions(+), 15 deletions(-)
>
> 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 d589dddf..e0b6d86d 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
> @@ -1,5 +1,7 @@
>   -- Memprof is implemented for x86 and x64 architectures only.
> -require("utils").skipcond(
> +local utils = require("utils")
> +
> +utils.skipcond(
>     jit.arch ~= "x86" and jit.arch ~= "x64" or jit.os ~= "Linux",
>     jit.arch.." architecture or "..jit.os..
>     " OS is NIY for memprof c symbols resolving"
> @@ -18,7 +20,7 @@ local testboth = require "resboth"
>   local testhash = require "reshash"
>   local testgnuhash = require "resgnuhash"
>   
> -local TMP_BINFILE = arg[0]:gsub(".+/([^/]+)%.test%.lua$", "%.%1.memprofdata.tmp.bin")
> +local TMP_BINFILE = utils.profilename("memprofdata.tmp.bin")
>   
>   local function tree_contains(node, name)
>     if node == nil then
> diff --git a/test/tarantool-tests/misclib-memprof-lapi.test.lua b/test/tarantool-tests/misclib-memprof-lapi.test.lua
> index a11f0be1..bae0c27c 100644
> --- a/test/tarantool-tests/misclib-memprof-lapi.test.lua
> +++ b/test/tarantool-tests/misclib-memprof-lapi.test.lua
> @@ -1,5 +1,7 @@
>   -- Memprof is implemented for x86 and x64 architectures only.
> -require("utils").skipcond(
> +local utils = require("utils")
> +
> +utils.skipcond(
>     jit.arch ~= "x86" and jit.arch ~= "x64",
>     jit.arch.." architecture is NIY for memprof"
>   )
> @@ -26,8 +28,8 @@ local memprof = require "memprof.parse"
>   local process = require "memprof.process"
>   local symtab = require "utils.symtab"
>   
> -local TMP_BINFILE = arg[0]:gsub(".+/([^/]+)%.test%.lua$", "%.%1.memprofdata.tmp.bin")
> -local BAD_PATH = arg[0]:gsub(".+/([^/]+)%.test%.lua$", "%1/memprofdata.tmp.bin")
> +local TMP_BINFILE = utils.profilename("memprofdata.tmp.bin")
> +local BAD_PATH = utils.profilename("memprofdata/tmp.bin")
>   local SRC_PATH = "@"..arg[0]
>   
>   local function default_payload()
> @@ -189,9 +191,9 @@ test:test("output", function(subtest)
>     -- one is the number of allocations. 1 event - alocation of
>     -- table by itself + 1 allocation of array part as far it is
>     -- bigger than LJ_MAX_COLOSIZE (16).
> -  subtest:ok(check_alloc_report(alloc, { line = 35, linedefined = 33 }, 2))
> +  subtest:ok(check_alloc_report(alloc, { line = 37, linedefined = 35 }, 2))
>     -- 20 strings allocations.
> -  subtest:ok(check_alloc_report(alloc, { line = 40, linedefined = 33 }, 20))
> +  subtest:ok(check_alloc_report(alloc, { line = 42, linedefined = 35 }, 20))
What are these magic numbers mean and why we should change them for 
introducing LUAJIT_TEST_VARDIR?
>   
>     -- Collect all previous allocated objects.
>     subtest:ok(free.INTERNAL.num == 22)
> @@ -199,8 +201,8 @@ test:test("output", function(subtest)
>     -- Tests for leak-only option.
>     -- See also https://github.com/tarantool/tarantool/issues/5812.
>     local heap_delta = process.form_heap_delta(events, symbols)
> -  local tab_alloc_stats = heap_delta[form_source_line(35)]
> -  local str_alloc_stats = heap_delta[form_source_line(40)]
> +  local tab_alloc_stats = heap_delta[form_source_line(37)]
> +  local str_alloc_stats = heap_delta[form_source_line(42)]
>     subtest:ok(tab_alloc_stats.nalloc == tab_alloc_stats.nfree)
>     subtest:ok(tab_alloc_stats.dbytes == 0)
>     subtest:ok(str_alloc_stats.nalloc == str_alloc_stats.nfree)
> @@ -291,10 +293,10 @@ test:test("jit-output", function(subtest)
>     -- 10 allocations in interpreter mode, 1 allocation for a trace
>     -- recording and assembling and next 9 allocations will happen
>     -- while running the trace.
> -  subtest:ok(check_alloc_report(alloc, { line = 40, linedefined = 33 }, 11))
> -  subtest:ok(check_alloc_report(alloc, { traceno = 1, line = 38 }, 9))
> +  subtest:ok(check_alloc_report(alloc, { line = 42, linedefined = 35 }, 11))
> +  subtest:ok(check_alloc_report(alloc, { traceno = 1, line = 40 }, 9))
>     -- See same checks with jit.off().
> -  subtest:ok(check_alloc_report(alloc, { line = 35, linedefined = 33 }, 2))
> +  subtest:ok(check_alloc_report(alloc, { line = 37, linedefined = 35 }, 2))
>   
>     -- Restore default JIT settings.
>     jit.opt.start(unpack(jit_opt_default))
> diff --git a/test/tarantool-tests/misclib-sysprof-lapi.test.lua b/test/tarantool-tests/misclib-sysprof-lapi.test.lua
> index 9e0a8a77..dbff41b0 100644
> --- a/test/tarantool-tests/misclib-sysprof-lapi.test.lua
> +++ b/test/tarantool-tests/misclib-sysprof-lapi.test.lua
> @@ -1,6 +1,8 @@
>   -- Sysprof is implemented for x86 and x64 architectures only.
>   local ffi = require("ffi")
> -require("utils").skipcond(
> +local utils = require("utils")
> +
> +utils.skipcond(
>     jit.arch ~= "x86" and jit.arch ~= "x64" or jit.os ~= "Linux"
>       or ffi.abi("gc64"),
>     jit.arch.." architecture or "..jit.os..
> @@ -19,8 +21,8 @@ local bufread = require("utils.bufread")
>   local symtab = require("utils.symtab")
>   local sysprof = require("sysprof.parse")
>   
> -local TMP_BINFILE = arg[0]:gsub(".+/([^/]+)%.test%.lua$", "%.%1.sysprofdata.tmp.bin")
> -local BAD_PATH = arg[0]:gsub(".+/([^/]+)%.test%.lua$", "%1/sysprofdata.tmp.bin")
> +local TMP_BINFILE = utils.profilename("sysprofdata.tmp.bin")
> +local BAD_PATH = utils.profilename("sysprofdata/tmp.bin")
>   
>   local function payload()
>     local function fib(n)
> diff --git a/test/tarantool-tests/utils.lua b/test/tarantool-tests/utils.lua
> index a1906498..87f7ff15 100644
> --- a/test/tarantool-tests/utils.lua
> +++ b/test/tarantool-tests/utils.lua
> @@ -123,4 +123,16 @@ function M.hasbc(f, bytecode)
>     return hasbc
>   end
>   
> +function M.profilename(name)
> +  local vardir = os.getenv('LUAJIT_TEST_VARDIR')
> +  -- Replace pattern will change directory name of the generated
> +  -- profile to LUAJIT_TEST_VARDIR if it is set in the process
> +  -- environment. Otherwise, the original dirname is left intact.
> +  -- As a basename for this profile the test name is concatenated
> +  -- with the name given as an argument.
> +  local replacepattern = ('%s/%s-%s'):format(vardir or '%1', '%2', name)
> +  -- XXX: return only the resulting string.
> +  return (arg[0]:gsub('^(.+)/([^/]+)%.test%.lua$', replacepattern))
> +end
> +
>   return M


More information about the Tarantool-patches mailing list