diff --git a/test/vinyl/ddl.result b/test/vinyl/ddl.result
index 67a6eecad48ff8df4b97d30b22b4c5bfa6087fe0..ca95542ab6c2ce22495c84ebd0d15c62682db9b4 100644
--- a/test/vinyl/ddl.result
+++ b/test/vinyl/ddl.result
@@ -469,3 +469,70 @@ test_run:cmd("setopt delimiter ''");
 s:drop()
 ---
 ...
+-- gh-2342 cursors after death of index
+create_iterator = require('utils').create_iterator
+---
+...
+s = box.schema.space.create('test', { engine = 'vinyl' })
+---
+...
+pk = s:create_index('primary', { parts = { 1, 'uint' } })
+---
+...
+sk = s:create_index('sec', { parts = { 2, 'uint' } })
+---
+...
+s:replace{1, 2, 3}
+---
+- [1, 2, 3]
+...
+s:replace{4, 5, 6}
+---
+- [4, 5, 6]
+...
+s:replace{7, 8, 9}
+---
+- [7, 8, 9]
+...
+itr = create_iterator(s, {})
+---
+...
+f, ctx, state = s.index.sec:pairs({5}, { iterator='LE' })
+---
+...
+itr.next()
+---
+- [1, 2, 3]
+...
+f(ctx, state)
+---
+- <iterator state>
+- [4, 5, 6]
+...
+s:drop()
+---
+...
+itr.next()
+---
+- null
+...
+f(ctx, state)
+---
+- null
+...
+f = nil
+---
+...
+ctx = nil
+---
+...
+state = nil
+---
+...
+itr = nil
+---
+...
+collectgarbage('collect')
+---
+- 0
+...
diff --git a/test/vinyl/ddl.test.lua b/test/vinyl/ddl.test.lua
index f3d30e38be225df2394e9aeae0835dc05f299119..747b9a8a31644d7314c9faf43dab366befcb2441 100644
--- a/test/vinyl/ddl.test.lua
+++ b/test/vinyl/ddl.test.lua
@@ -196,3 +196,25 @@ end ;
 test_run:cmd("setopt delimiter ''");
 
 s:drop()
+
+-- gh-2342 cursors after death of index
+create_iterator = require('utils').create_iterator
+s = box.schema.space.create('test', { engine = 'vinyl' })
+pk = s:create_index('primary', { parts = { 1, 'uint' } })
+sk = s:create_index('sec', { parts = { 2, 'uint' } })
+s:replace{1, 2, 3}
+s:replace{4, 5, 6}
+s:replace{7, 8, 9}
+itr = create_iterator(s, {})
+f, ctx, state = s.index.sec:pairs({5}, { iterator='LE' })
+itr.next()
+f(ctx, state)
+s:drop()
+itr.next()
+f(ctx, state)
+f = nil
+ctx = nil
+state = nil
+itr = nil
+collectgarbage('collect')
+