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

Igor Munkin imun at tarantool.org
Thu Aug 11 14:17:40 MSK 2022


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.

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))
 
   -- 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
-- 
2.34.0



More information about the Tarantool-patches mailing list