[box 1/1] box: Add before_replace trigger tests

imarkov imarkov at tarantool.org
Thu Feb 22 17:33:12 MSK 2018


* Add test on usage run_triggers inside before_replace.
Test verifies that other before_replace triggers within the
same space will be executed but other triggers won't.
* Add test on return old in before_replace.
Test verifies that other before_replace triggers will be executed,
but insertion won't take place and other triggers will be ignored.

Closes #3128
---
 test/box/before_replace.result   | 98 ++++++++++++++++++++++++++++++++++++++++
 test/box/before_replace.test.lua | 40 ++++++++++++++++
 2 files changed, 138 insertions(+)

diff --git a/test/box/before_replace.result b/test/box/before_replace.result
index 10f4699..4f47b9f 100644
--- a/test/box/before_replace.result
+++ b/test/box/before_replace.result
@@ -664,6 +664,104 @@ row.BODY.space_id == s.id
 ---
 - true
 ...
+-- gh-3128 before_replace with run_triggers
+s2 = box.schema.space.create("test2")
+---
+...
+_ = s2:create_index("prim")
+---
+...
+before_replace1 = function() s2:insert{1} s:run_triggers(false) end
+---
+...
+before_replace2 = function() s2:insert{2} end
+---
+...
+on_replace = function() s2:insert{3} end
+---
+...
+type(s:on_replace(on_replace))
+---
+- function
+...
+type(s:before_replace(before_replace1))
+---
+- function
+...
+type(s:before_replace(before_replace2))
+---
+- function
+...
+s:insert{1, 1}
+---
+...
+s2:select{}
+---
+- - [1]
+  - [2]
+...
+s:truncate()
+---
+...
+s2:truncate()
+---
+...
+s:on_replace(nil, on_replace)
+---
+...
+s:before_replace(nil, before_replace1)
+---
+...
+s:before_replace(nil, before_replace2)
+---
+...
+--
+-- gh-3128
+-- If at least one before trigger returns old
+-- insertion will be aborted, but other before triggers
+-- will be executed
+before_replace1 = function(old, new) s2:insert{1} return old end
+---
+...
+before_replace2 = function(old, new) s2:insert{2} end
+---
+...
+type(s:on_replace(on_replace))
+---
+- function
+...
+type(s:before_replace(before_replace1))
+---
+- function
+...
+type(s:before_replace(before_replace2))
+---
+- function
+...
+s:insert{1, 1}
+---
+...
+s:select{}
+---
+- []
+...
+s2:select{}
+---
+- - [1]
+  - [2]
+...
+s:on_replace(nil, on_replace)
+---
+...
+s:before_replace(nil, before_replace1)
+---
+...
+s:before_replace(nil, before_replace2)
+---
+...
+s2:drop()
+---
+...
 s:drop()
 ---
 ...
diff --git a/test/box/before_replace.test.lua b/test/box/before_replace.test.lua
index 01a386d..22733c1 100644
--- a/test/box/before_replace.test.lua
+++ b/test/box/before_replace.test.lua
@@ -223,4 +223,44 @@ state, row = fun(param, state)
 row.HEADER.type
 row.BODY.space_id == s.id
 
+-- gh-3128 before_replace with run_triggers
+s2 = box.schema.space.create("test2")
+_ = s2:create_index("prim")
+before_replace1 = function() s2:insert{1} s:run_triggers(false) end
+before_replace2 = function() s2:insert{2} end
+on_replace = function() s2:insert{3} end
+
+type(s:on_replace(on_replace))
+type(s:before_replace(before_replace1))
+type(s:before_replace(before_replace2))
+
+s:insert{1, 1}
+s2:select{}
+s:truncate()
+s2:truncate()
+
+s:on_replace(nil, on_replace)
+s:before_replace(nil, before_replace1)
+s:before_replace(nil, before_replace2)
+
+--
+-- gh-3128
+-- If at least one before trigger returns old
+-- insertion will be aborted, but other before triggers
+-- will be executed
+before_replace1 = function(old, new) s2:insert{1} return old end
+before_replace2 = function(old, new) s2:insert{2} end
+
+type(s:on_replace(on_replace))
+type(s:before_replace(before_replace1))
+type(s:before_replace(before_replace2))
+
+s:insert{1, 1}
+s:select{}
+s2:select{}
+
+s:on_replace(nil, on_replace)
+s:before_replace(nil, before_replace1)
+s:before_replace(nil, before_replace2)
+s2:drop()
 s:drop()
-- 
2.7.4




More information about the Tarantool-patches mailing list