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