diff --git a/src/lua/init.cc b/src/lua/init.cc
index 124bf36fc5c96d5f5ae74c49dd4b69b8eb3c2942..be29aa67d7ea03f62fab6e17fc81afa2d782ddb0 100644
--- a/src/lua/init.cc
+++ b/src/lua/init.cc
@@ -918,6 +918,8 @@ lbox_fiber_testcancel(struct lua_State *L)
 static const struct luaL_reg lbox_fiber_meta [] = {
 	{"id", lbox_fiber_id},
 	{"name", lbox_fiber_name},
+	{"cancel", lbox_fiber_cancel},
+	{"resume", lbox_fiber_resume},
 	{"__gc", lbox_fiber_gc},
 	{NULL, NULL}
 };
diff --git a/test/box/fiber.result b/test/box/fiber.result
index a5864c180bb97fc339f2dd8c953603a2944739cc..094c0e0ac3e18439787970b61b9147c80255110b 100644
--- a/test/box/fiber.result
+++ b/test/box/fiber.result
@@ -307,3 +307,26 @@ lua #result
 ---
  - 300
 ...
+lua function testfun() while true do box.fiber.sleep(10) end end
+---
+...
+lua f = box.fiber.wrap(testfun)
+---
+...
+lua f:cancel()
+---
+...
+lua f:resume()
+---
+error: 'fiber.resume(): the fiber is dead'
+...
+lua fib_id = box.fiber.wrap(testfun):id()
+---
+...
+lua box.fiber.find(fib_id):cancel()
+---
+...
+lua box.fiber.find(fib_id)
+---
+ - nil
+...
diff --git a/test/box/fiber.test b/test/box/fiber.test
index 02b8b4b10cf625527a09a9ff94762a6f3da5b828..fdbcd90d4999096dad6c2d51d3a3e4ee2644ee8c 100644
--- a/test/box/fiber.test
+++ b/test/box/fiber.test
@@ -100,3 +100,10 @@ for i in xrange(1, 10):
     exec admin "lua while #result < 300 do box.fiber.sleep(0.01) end"
 exec admin "lua #result"
 
+exec admin "lua function testfun() while true do box.fiber.sleep(10) end end"
+exec admin "lua f = box.fiber.wrap(testfun)"
+exec admin "lua f:cancel()"
+exec admin "lua f:resume()"
+exec admin "lua fib_id = box.fiber.wrap(testfun):id()"
+exec admin "lua box.fiber.find(fib_id):cancel()"
+exec admin "lua box.fiber.find(fib_id)"