From bf852b419f28f03db788d7ba8c131d9d53592eb7 Mon Sep 17 00:00:00 2001 From: Serge Petrenko <sergepetrenko@tarantool.org> Date: Mon, 8 Aug 2022 15:49:30 +0300 Subject: [PATCH] core: add a test for recursive trigger invocation Our triggers support recursive invocation: for example, an on_replace trigger on a space may do a replace in the same space. However, this is not tested and might get broken easily. Let's add a corresponding test. In-scope-of #4264 NO_DOC=testing NO_CHANGELOG=testing --- .../gh_4264_recursive_trigger_test.lua | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 test/box-luatest/gh_4264_recursive_trigger_test.lua diff --git a/test/box-luatest/gh_4264_recursive_trigger_test.lua b/test/box-luatest/gh_4264_recursive_trigger_test.lua new file mode 100644 index 0000000000..888b9b3135 --- /dev/null +++ b/test/box-luatest/gh_4264_recursive_trigger_test.lua @@ -0,0 +1,43 @@ +local t = require('luatest') +local server = require('test.luatest_helpers.server') + +local g = t.group('gh-4264') + +g.before_all(function(cg) + cg.server = server:new{alias = 'server'} + cg.server:start() + cg.server:exec(function() + local s = box.schema.space.create('test') + s:create_index('pk') + end) +end) + +g.after_all(function(cg) + cg.server:drop() +end) + +g.test_recursive_trigger_invocation = function(cg) + local order = cg.server:exec(function() + local order = {} + local level = 0 + local s = box.space.test + local f1 = function() + level = level + 1 + table.insert(order, level * 10 + 1) + if level >= 3 then + return + end + s:replace{1} + level = level - 1 + end + local f2 = function() + table.insert(order, level * 10 + 2) + end + s:on_replace(f2) + s:on_replace(f1) + s:replace{1} + return order + end) + t.assert_equals(order, {11, 21, 31, 32, 22, 12}, + "Correct recursive trigger invocation") +end -- GitLab