diff --git a/src/box/tree_index.cc b/src/box/tree_index.cc
index ef2c2576560908b6922a47b32722808d689f804d..cc45bdf8bad326cf499d32b4e50cbc35ceddc8b0 100644
--- a/src/box/tree_index.cc
+++ b/src/box/tree_index.cc
@@ -189,9 +189,7 @@ tree_iterator_bwd_skip_one_check_next_equality(struct iterator *iterator)
 static void *
 extent_alloc()
 {
-#ifndef NDEBUG
-	ERROR_INJECT(ERRINJ_TREE_ALLOC, return 0);
-#endif
+	ERROR_INJECT(ERRINJ_INDEX_ALLOC, return 0);
 	return mempool_alloc(&tree_extent_pool);
 }
 
diff --git a/src/errinj.h b/src/errinj.h
index ef38719065ef624e806eb107941129159df9a574..11f6f81abd919f6f7712a1efe91e03b1f8b14d5a 100644
--- a/src/errinj.h
+++ b/src/errinj.h
@@ -43,8 +43,7 @@ struct errinj {
 	_(ERRINJ_TESTING, false) \
 	_(ERRINJ_WAL_IO, false) \
 	_(ERRINJ_WAL_ROTATE, false) \
-	_(ERRINJ_INDEX_ALLOC, false) \
-	_(ERRINJ_TREE_ALLOC, false)
+	_(ERRINJ_INDEX_ALLOC, false)
 
 ENUM0(errinj_enum, ERRINJ_LIST);
 extern struct errinj errinjs[];
diff --git a/src/lib/salad/bps_tree.h b/src/lib/salad/bps_tree.h
index 824769a4c6a646b46c7bc7a1bb0b0b8e4db5dc51..b87ae2a363a1ec72b593587c58a35c7c4274ae7e 100644
--- a/src/lib/salad/bps_tree.h
+++ b/src/lib/salad/bps_tree.h
@@ -243,19 +243,13 @@
  * use linear search. To turn on the linear search
  * #define BPS_BLOCK_LINEAR_SEARCH
  */
-#ifdef BPS_BLOCK_LINEAR_SEARCH
-#pragma message("Btree: using linear search")
-#endif
 
 /**
  * A switch that enables collection of executions of different
  * branches of code. Used only for debug purposes, I hope you
- * will not use it.
+ * will not use it. Nevertheless, to turn it on,
+ * #define BPS_TREE_DEBUG_BRANCH_VISIT
  */
-#ifdef BPS_TREE_DEBUG_BRANCH_VISIT
-#pragma message("Btree: debugging: collecting branch visits")
-#endif
-
 
 /* }}} */
 
diff --git a/test/box/errinj.result b/test/box/errinj.result
index e0456e8f33fbb8e183bb74ea70bc510fae2a596d..1cf394bdc384549af0be9791caebee85f6c7f0ff 100644
--- a/test/box/errinj.result
+++ b/test/box/errinj.result
@@ -9,15 +9,13 @@ space:create_index('primary', { type = 'hash' })
 ...
 errinj.info()
 ---
-- ERRINJ_WAL_IO:
+- ERRINJ_INDEX_ALLOC:
     state: false
-  ERRINJ_TESTING:
-    state: false
-  ERRINJ_INDEX_ALLOC:
+  ERRINJ_WAL_IO:
     state: false
   ERRINJ_WAL_ROTATE:
     state: false
-  ERRINJ_TREE_ALLOC:
+  ERRINJ_TESTING:
     state: false
 ...
 errinj.set("some-injection", true)
diff --git a/test/box/errinj_index.result b/test/box/errinj_index.result
index 6233799f527c6b18291b71f28d61883228983494..a13929773801ed7f204bb5168778b42bcb5c000f 100644
--- a/test/box/errinj_index.result
+++ b/test/box/errinj_index.result
@@ -1,13 +1,13 @@
 errinj = require('errinj')
 ---
 ...
+-- Check a failed realloc in tree index.
 s = box.schema.create_space('tweedledum')
 ---
 ...
-s:create_index('primary')
+s:create_index('primary', {type = 'tree'} )
 ---
 ...
--- Check a failed realloc in tree.
 for i = 1,10 do s:insert{i, i, 'test' .. i} end
 ---
 ...
@@ -49,7 +49,7 @@ res
   - [9, 9, 'test9']
   - [10, 10, 'test10']
 ...
-errinj.set("ERRINJ_TREE_ALLOC", true)
+errinj.set("ERRINJ_INDEX_ALLOC", true)
 ---
 - ok
 ...
@@ -195,7 +195,257 @@ check_iter_and_size()
 ---
 - ok
 ...
-errinj.set("ERRINJ_TREE_ALLOC", false)
+errinj.set("ERRINJ_INDEX_ALLOC", false)
+---
+- ok
+...
+for i = 4501,5500 do s:insert{i, i} end
+---
+...
+res = {}
+---
+...
+for i = 1,10 do table.insert(res, (s:get{i})) end
+---
+...
+res
+---
+- - [4, 4, 'test4']
+  - [5, 5, 'test5']
+  - [6, 6, 'test6']
+  - [7, 7, 'test7']
+  - [8, 8, 'test8']
+  - [9, 9, 'test9']
+  - [10, 10, 'test10']
+...
+s:delete{8}
+---
+- [8, 8, 'test8']
+...
+res = {}
+---
+...
+for i = 1,10 do table.insert(res, (s:get{i})) end
+---
+...
+res
+---
+- - [4, 4, 'test4']
+  - [5, 5, 'test5']
+  - [6, 6, 'test6']
+  - [7, 7, 'test7']
+  - [9, 9, 'test9']
+  - [10, 10, 'test10']
+...
+res = {}
+---
+...
+for i = 5001,5010 do table.insert(res, (s:get{i})) end
+---
+...
+res
+---
+- - [5001, 5001]
+  - [5002, 5002]
+  - [5003, 5003]
+  - [5004, 5004]
+  - [5005, 5005]
+  - [5006, 5006]
+  - [5007, 5007]
+  - [5008, 5008]
+  - [5009, 5009]
+  - [5010, 5010]
+...
+s:drop()
+---
+...
+-----------------------------------
+-- Check a failed realloc in hash index.
+s = box.schema.create_space('tweedledum')
+---
+...
+s:create_index('primary', {type = 'hash'} )
+---
+...
+for i = 1,10 do s:insert{i, i, 'test' .. i} end
+---
+...
+res = {}
+---
+...
+for i = 1,10 do table.insert(res, s:get{i}) end
+---
+...
+res
+---
+- - [1, 1, 'test1']
+  - [2, 2, 'test2']
+  - [3, 3, 'test3']
+  - [4, 4, 'test4']
+  - [5, 5, 'test5']
+  - [6, 6, 'test6']
+  - [7, 7, 'test7']
+  - [8, 8, 'test8']
+  - [9, 9, 'test9']
+  - [10, 10, 'test10']
+...
+res = {}
+---
+...
+for _, t in s.index[0]:pairs() do table.insert(res, t) end
+---
+...
+res
+---
+- - [1, 1, 'test1']
+  - [2, 2, 'test2']
+  - [3, 3, 'test3']
+  - [4, 4, 'test4']
+  - [5, 5, 'test5']
+  - [6, 6, 'test6']
+  - [7, 7, 'test7']
+  - [8, 8, 'test8']
+  - [9, 9, 'test9']
+  - [10, 10, 'test10']
+...
+errinj.set("ERRINJ_INDEX_ALLOC", true)
+---
+- ok
+...
+res = {}
+---
+...
+for i = 1,10 do table.insert(res, s:get{i}) end
+---
+...
+res
+---
+- - [1, 1, 'test1']
+  - [2, 2, 'test2']
+  - [3, 3, 'test3']
+  - [4, 4, 'test4']
+  - [5, 5, 'test5']
+  - [6, 6, 'test6']
+  - [7, 7, 'test7']
+  - [8, 8, 'test8']
+  - [9, 9, 'test9']
+  - [10, 10, 'test10']
+...
+res = {}
+---
+...
+for _, t in s.index[0]:pairs() do table.insert(res, t) end
+---
+...
+res
+---
+- - [1, 1, 'test1']
+  - [2, 2, 'test2']
+  - [3, 3, 'test3']
+  - [4, 4, 'test4']
+  - [5, 5, 'test5']
+  - [6, 6, 'test6']
+  - [7, 7, 'test7']
+  - [8, 8, 'test8']
+  - [9, 9, 'test9']
+  - [10, 10, 'test10']
+...
+for i = 501,2500 do s:insert{i, i} end
+---
+- error: Failed to allocate 23 bytes in hash for key
+...
+s:delete{1}
+---
+- [1, 1, 'test1']
+...
+res = {}
+---
+...
+for i = 1,10 do table.insert(res, (s:get{i})) end
+---
+...
+res
+---
+- - [2, 2, 'test2']
+  - [3, 3, 'test3']
+  - [4, 4, 'test4']
+  - [5, 5, 'test5']
+  - [6, 6, 'test6']
+  - [7, 7, 'test7']
+  - [8, 8, 'test8']
+  - [9, 9, 'test9']
+  - [10, 10, 'test10']
+...
+res = {}
+---
+...
+for i = 501,510 do table.insert(res, (s:get{i})) end
+---
+...
+res
+---
+- []
+...
+res = {}
+---
+...
+for i = 2001,2010 do table.insert(res, (s:get{i})) end
+---
+...
+res
+---
+- []
+...
+--since every insertion is rejected, count must be (10 - number of deletions)
+function check_iter_and_size(size_must_be) local count = 0 for _, t in s.index[0]:pairs() do count = count + 1 end print (count) return count ~= size_must_be and "fail 1" or "ok" end
+---
+...
+check_iter_and_size(9)
+---
+- ok
+...
+for i = 2501,3500 do s:insert{i, i} end
+---
+- error: Failed to allocate 23 bytes in hash for key
+...
+s:delete{2}
+---
+- [2, 2, 'test2']
+...
+check_iter_and_size(8)
+---
+- ok
+...
+res = {}
+---
+...
+for i = 1,10 do table.insert(res, (s:get{i})) end
+---
+...
+res
+---
+- - [3, 3, 'test3']
+  - [4, 4, 'test4']
+  - [5, 5, 'test5']
+  - [6, 6, 'test6']
+  - [7, 7, 'test7']
+  - [8, 8, 'test8']
+  - [9, 9, 'test9']
+  - [10, 10, 'test10']
+...
+for i = 3501,4500 do s:insert{i, i} end
+---
+- error: Failed to allocate 23 bytes in hash for key
+...
+s:delete{3}
+---
+- [3, 3, 'test3']
+...
+check_iter_and_size(7)
+---
+- ok
+...
+errinj.set("ERRINJ_INDEX_ALLOC", false)
 ---
 - ok
 ...
diff --git a/test/box/errinj_index.test.lua b/test/box/errinj_index.test.lua
index cd4155ec151d79dcbdabb1d5641866eaa5da69f4..cf4baaf4c3af3584082ffae0e21f2e41511edce4 100644
--- a/test/box/errinj_index.test.lua
+++ b/test/box/errinj_index.test.lua
@@ -1,9 +1,9 @@
 errinj = require('errinj')
 
-s = box.schema.create_space('tweedledum')
-s:create_index('primary')
+-- Check a failed realloc in tree index.
 
--- Check a failed realloc in tree.
+s = box.schema.create_space('tweedledum')
+s:create_index('primary', {type = 'tree'} )
 
 for i = 1,10 do s:insert{i, i, 'test' .. i} end
 res = {}
@@ -13,7 +13,7 @@ res = {}
 for _, t in s.index[0]:pairs() do table.insert(res, t) end
 res
 
-errinj.set("ERRINJ_TREE_ALLOC", true)
+errinj.set("ERRINJ_INDEX_ALLOC", true)
 
 res = {}
 for i = 1,10 do table.insert(res, s:get{i}) end
@@ -50,7 +50,74 @@ for i = 3501,4500 do s:insert{i, i} end
 s:delete{3}
 check_iter_and_size()
 
-errinj.set("ERRINJ_TREE_ALLOC", false)
+errinj.set("ERRINJ_INDEX_ALLOC", false)
+
+for i = 4501,5500 do s:insert{i, i} end
+res = {}
+for i = 1,10 do table.insert(res, (s:get{i})) end
+res
+s:delete{8}
+res = {}
+for i = 1,10 do table.insert(res, (s:get{i})) end
+res
+res = {}
+for i = 5001,5010 do table.insert(res, (s:get{i})) end
+res
+s:drop()
+
+-----------------------------------
+
+-- Check a failed realloc in hash index.
+
+s = box.schema.create_space('tweedledum')
+s:create_index('primary', {type = 'hash'} )
+
+for i = 1,10 do s:insert{i, i, 'test' .. i} end
+res = {}
+for i = 1,10 do table.insert(res, s:get{i}) end
+res
+res = {}
+for _, t in s.index[0]:pairs() do table.insert(res, t) end
+res
+
+errinj.set("ERRINJ_INDEX_ALLOC", true)
+
+res = {}
+for i = 1,10 do table.insert(res, s:get{i}) end
+res
+res = {}
+for _, t in s.index[0]:pairs() do table.insert(res, t) end
+res
+
+for i = 501,2500 do s:insert{i, i} end
+s:delete{1}
+
+res = {}
+for i = 1,10 do table.insert(res, (s:get{i})) end
+res
+res = {}
+for i = 501,510 do table.insert(res, (s:get{i})) end
+res
+res = {}
+for i = 2001,2010 do table.insert(res, (s:get{i})) end
+res
+
+--since every insertion is rejected, count must be (10 - number of deletions)
+function check_iter_and_size(size_must_be) local count = 0 for _, t in s.index[0]:pairs() do count = count + 1 end print (count) return count ~= size_must_be and "fail 1" or "ok" end
+check_iter_and_size(9)
+
+for i = 2501,3500 do s:insert{i, i} end
+s:delete{2}
+check_iter_and_size(8)
+res = {}
+for i = 1,10 do table.insert(res, (s:get{i})) end
+res
+
+for i = 3501,4500 do s:insert{i, i} end
+s:delete{3}
+check_iter_and_size(7)
+
+errinj.set("ERRINJ_INDEX_ALLOC", false)
 
 for i = 4501,5500 do s:insert{i, i} end
 res = {}