diff --git a/test/module/net_sql.common.lua b/test/module/net_sql.common.lua
deleted file mode 100644
index 715defa4329f047bde96bf188d89845fb69d2c5f..0000000000000000000000000000000000000000
--- a/test/module/net_sql.common.lua
+++ /dev/null
@@ -1,5 +0,0 @@
-package.path = "../../src/module/sql/?.lua;"..package.path
-require("sql")
-if type(box.net.sql) ~= "table" then
-	error("net.sql load failed")
-end
diff --git a/test/module/net_sql.common.result b/test/module/net_sql.common.result
index 2d077342608b7be479ad3ca5c7a9e20d95954ee0..2ac6a13cf1b9e68753def97a8267fcca25f26b3d 100644
--- a/test/module/net_sql.common.result
+++ b/test/module/net_sql.common.result
@@ -1,8 +1,13 @@
-lua type(box.net.sql)
+package.path  = "../../src/module/sql/?.lua"
 ---
- - table
 ...
-lua c = box.net.sql.connect('abcd')
+package.cpath  = "?.so"
+---
+...
+require("sql")
+---
+- true
+...
+if type(box.net.sql) ~= "table" then error("net.sql load failed") end
 ---
-error: '../../src/module/sql/sql.lua:29: Unknown driver ''abcd'''
 ...
diff --git a/test/module/net_sql.common.test b/test/module/net_sql.common.test
deleted file mode 100644
index 88a3352232de1240c67852a4d4a59ef9baf85a75..0000000000000000000000000000000000000000
--- a/test/module/net_sql.common.test
+++ /dev/null
@@ -1,6 +0,0 @@
-server.stop()
-server.deploy(init_lua="module/net_sql.common.lua")
-
-admin("type(box.net.sql)")
-admin("c = box.net.sql.connect('abcd')")
-
diff --git a/test/module/net_sql.common.test.lua b/test/module/net_sql.common.test.lua
new file mode 100644
index 0000000000000000000000000000000000000000..6354cdaf68e787a13df9444973e272d460cbc7d0
--- /dev/null
+++ b/test/module/net_sql.common.test.lua
@@ -0,0 +1,6 @@
+package.path  = "../../src/module/sql/?.lua"
+package.cpath  = "?.so"
+
+require("sql")
+if type(box.net.sql) ~= "table" then error("net.sql load failed") end
+
diff --git a/test/module/net_sql.mysql.lua b/test/module/net_sql.mysql.lua
deleted file mode 100644
index d3ff697f2492ed4360d0aef96ffcf1df9c45f27d..0000000000000000000000000000000000000000
--- a/test/module/net_sql.mysql.lua
+++ /dev/null
@@ -1,6 +0,0 @@
-package.path  = "../../src/module/sql/?.lua;"..package.path
-require("sql")
-if type(box.net.sql) ~= "table" then
-	error("net.sql load failed")
-end
-require("box.net.mysql")
diff --git a/test/module/net_sql.mysql.result b/test/module/net_sql.mysql.result
index f32ae3286259a4eb6ff744cd77ee5cdac6d6ba64..edd89868284bfd2c0083c8179451840f567d244b 100644
--- a/test/module/net_sql.mysql.result
+++ b/test/module/net_sql.mysql.result
@@ -1,6 +1,31 @@
+package.path  = "../../src/module/sql/?.lua"
+---
+...
+package.cpath  = "?.so"
+---
+...
+require("sql")
+---
+- true
+...
+if type(box.net.sql) ~= "table" then error("net.sql load failed") end
+---
+...
+os.execute("mkdir -p box/net/")
+---
+- 0
+...
+os.execute("cp ../../src/module/mysql/mysql.so box/net/")
+---
+- 0
+...
+require("box.net.mysql")
+---
+- true
+...
 c = box.net.sql.connect('abcd')
 ---
-- error: '[string "-- sql.lua (internal file)..."]:29: Unknown driver ''abcd'''
+- error: '../../src/module/sql/sql.lua:29: Unknown driver ''abcd'''
 ...
 function dump(v) return box.cjson.encode(v) end
 ---
@@ -20,9 +45,9 @@ for k, v in pairs(c) do print(k, ': ', type(v)) end
 ...
 c:execute('SEL ECT 1')
 ---
-- error: '[string "-- sql.lua (internal file)..."]:105: You have an error in your
-    SQL syntax; check the manual that corresponds to your MySQL server version for
-    the right syntax to use near ''SEL ECT 1'' at line 1'
+- error: '../../src/module/sql/sql.lua:105: You have an error in your SQL syntax;
+    check the manual that corresponds to your MySQL server version for the right syntax
+    to use near ''SEL ECT 1'' at line 1'
 ...
 dump({c:execute('SELECT ? AS bool1, ? AS bool2, ? AS nil, ? AS num, ? AS str', true, false, nil, 123, 'abc')})
 ---
@@ -72,3 +97,7 @@ c:commit()
 ---
 - 0
 ...
+os.execute("rm -rf box/net/")
+---
+- 0
+...
diff --git a/test/module/net_sql.mysql.test b/test/module/net_sql.mysql.test
deleted file mode 100644
index 36a5631edf500cd1a7af769d62d4c412935819da..0000000000000000000000000000000000000000
--- a/test/module/net_sql.mysql.test
+++ /dev/null
@@ -1,40 +0,0 @@
-# encoding: tarantool
-import os
-import shutil
-
-module_path = os.path.join(vardir, "box/net")
-module_path_so = module_path + "/mysql.so"
-os.makedirs(module_path)
-shutil.copy("../src/module/mysql/mysql.so", module_path_so)
-
-server.stop()
-server.deploy(init_lua="module/net_sql.mysql.lua")
-
-exec admin "lua c = box.net.sql.connect('abcd')"
-exec admin "lua dump = function(v) return box.cjson.encode(v) end"
-
-exec admin "lua connect = {}"
-exec admin "lua for tk in string.gmatch(os.getenv('MYSQL'), '[^:]+') do table.insert(connect, tk) end"
-
-# mysql
-exec admin "lua c = box.net.sql.connect('mysql', unpack(connect))"
-exec admin "lua for k, v in pairs(c) do print(k, ': ', type(v)) end"
-exec admin "lua c:execute('SEL ECT 1')"
-exec admin "lua dump({c:execute('SELECT ? AS bool1, ? AS bool2, ? AS nil, ? AS num, ? AS str', true, false, nil, 123, 'abc')})"
-
-exec admin "lua dump({c:execute('SELECT * FROM (SELECT ?) t WHERE 1 = 0', 2)})"
-exec admin "lua dump({c:execute('CREATE PROCEDURE p1() BEGIN SELECT 1 AS One; SELECT 2 AS Two, 3 AS Three; END')})"
-exec admin "lua dump({c:execute('CALL p1')})"
-exec admin "lua dump({c:execute('DROP PROCEDURE p1')})"
-exec admin "lua dump({c:execute('SELECT 1 AS one UNION ALL SELECT 2')})"
-exec admin "lua dump({c:execute('SELECT 1 AS one UNION ALL SELECT 2; SELECT ? AS two', 'abc')})"
-
-exec admin "lua c:quote('test \"abc\" test')"
-
-exec admin "lua c:begin_work()"
-exec admin "lua c:rollback()"
-exec admin "lua c:begin_work()"
-exec admin "lua c:commit()"
-
-os.unlink(module_path_so)
-os.removedirs(module_path)
diff --git a/test/box/net_sql.mysql.test.lua b/test/module/net_sql.mysql.test.lua
similarity index 74%
rename from test/box/net_sql.mysql.test.lua
rename to test/module/net_sql.mysql.test.lua
index f5191cfa7160e6450d2f21d401af8ec4db398bb7..d33ff1b300dacb19b2ebd367d34f76fc48746585 100644
--- a/test/box/net_sql.mysql.test.lua
+++ b/test/module/net_sql.mysql.test.lua
@@ -1,3 +1,14 @@
+package.path  = "../../src/module/sql/?.lua"
+package.cpath  = "?.so"
+
+require("sql")
+if type(box.net.sql) ~= "table" then error("net.sql load failed") end
+
+os.execute("mkdir -p box/net/")
+os.execute("cp ../../src/module/mysql/mysql.so box/net/")
+
+require("box.net.mysql")
+
 c = box.net.sql.connect('abcd')
 function dump(v) return box.cjson.encode(v) end
 
@@ -24,3 +35,5 @@ c:begin_work()
 c:rollback()
 c:begin_work()
 c:commit()
+
+os.execute("rm -rf box/net/")
diff --git a/test/module/net_sql.pg.lua b/test/module/net_sql.pg.lua
deleted file mode 100644
index 6711d955d3d5ee4d9146eaf87c16ae3d5a205773..0000000000000000000000000000000000000000
--- a/test/module/net_sql.pg.lua
+++ /dev/null
@@ -1,6 +0,0 @@
-package.path  = "../../src/module/sql/?.lua;"..package.path
-require("sql")
-if type(box.net.sql) ~= "table" then
-	error("net.sql load failed")
-end
-require("box.net.pg")
diff --git a/test/module/net_sql.pg.result b/test/module/net_sql.pg.result
index 454b897926e919f9e71f693389c2b88d95dc95e4..d503dd6a9238eef3b7440b97c3f56e5417349a43 100644
--- a/test/module/net_sql.pg.result
+++ b/test/module/net_sql.pg.result
@@ -1,10 +1,31 @@
-c = box.net.sql.connect('abcd')
+package.path  = "../../src/module/sql/?.lua"
+---
+...
+package.cpath  = "?.so"
 ---
-error: '../../src/module/sql/sql.lua:29: Unknown driver ''abcd'''
 ...
-c = box.net.sql.connect('pg')
+require("sql")
+---
+- true
+...
+if type(box.net.sql) ~= "table" then error("net.sql load failed") end
 ---
-error: '../../src/module/sql/sql.lua:64: Usage: box.net.sql.connect(''pg'', host, port, user, password, db, ...)'
+...
+os.execute("mkdir -p box/net/")
+---
+- 0
+...
+os.execute("cp ../../src/module/pg/pg.so box/net/")
+---
+- 0
+...
+require("box.net.pg")
+---
+- true
+...
+c = box.net.sql.connect('abcd')
+---
+- error: '../../src/module/sql/sql.lua:29: Unknown driver ''abcd'''
 ...
 dump = function(v) return box.cjson.encode(v) end
 ---
@@ -73,7 +94,7 @@ dump({c:select('SELECT * FROM (VALUES (1,2), (2,3)) t')})
 ...
 dump({c:single('SELECT * FROM (VALUES (1,2), (2,3)) t')})
 ---
-error: '../../src/module/sql/sql.lua:156: SQL request returned multiply rows'
+- error: '../../src/module/sql/sql.lua:156: SQL request returned multiply rows'
 ...
 dump({c:single('SELECT * FROM (VALUES (1,2)) t')})
 ---
@@ -85,14 +106,12 @@ dump({c:perform('SELECT * FROM (VALUES (1,2), (2,3)) t')})
 ...
 c:execute('SELEC T')
 ---
-error: '../../src/module/sql/sql.lua:105: ERROR:  syntax error at or near "SELEC"
-LINE 1: SELEC T
-        ^
-'
+- error: "../../src/module/sql/sql.lua:105: ERROR:  syntax error at or near \"SELEC\"\nLINE
+    1: SELEC T\n        ^\n"
 ...
 c = box.net.sql.connect('abcd')
 ---
-error: '../../src/module/sql/sql.lua:29: Unknown driver ''abcd'''
+- error: '../../src/module/sql/sql.lua:29: Unknown driver ''abcd'''
 ...
 c:quote('abc\"cde\"def')
 ---
@@ -118,3 +137,7 @@ c:txn(function(dbi) dbi:single('SELECT 1') end)
 ---
 - true
 ...
+os.execute("rm -rf box/net/")
+---
+- 0
+...
diff --git a/test/module/net_sql.pg.test b/test/module/net_sql.pg.test
deleted file mode 100644
index 3d1144824fec57ba49594828de32fbbbf7b650fb..0000000000000000000000000000000000000000
--- a/test/module/net_sql.pg.test
+++ /dev/null
@@ -1,55 +0,0 @@
-# encoding: tarantool
-import os
-import shutil
-
-module_path = os.path.join(vardir, "box/net")
-module_path_so = module_path + "/pg.so"
-os.makedirs(module_path)
-shutil.copy("../src/module/pg/pg.so", module_path_so)
-
-server.stop()
-server.deploy(init_lua="module/net_sql.pg.lua")
-
-exec admin "lua c = box.net.sql.connect('abcd')"
-exec admin "lua c = box.net.sql.connect('pg')"
-
-exec admin "lua dump = function(v) return box.cjson.encode(v) end"
-
-exec admin "lua connect = {}"
-exec admin "lua for tk in string.gmatch(os.getenv('PG'), '[^:]+') do table.insert(connect, tk) end"
-
-# postgresql
-exec admin "lua c = box.net.sql.connect('pg', unpack(connect))"
-exec admin "lua dump({c:execute('SELECT 123::text AS bla, 345')})"
-exec admin "lua dump({c:execute('SELECT -1 AS neg, NULL AS abc')})"
-exec admin "lua dump({c:execute('SELECT -1.1 AS neg, 1.2 AS pos')})"
-exec admin "lua dump({c:execute('SELECT ARRAY[1,2] AS neg, 1.2 AS pos')})"
-exec admin "lua dump({c:execute('SELECT ? AS val', 'abc')})"
-exec admin "lua dump({c:execute('SELECT ? AS val', 123)})"
-exec admin "lua dump({c:execute('SELECT ? AS val', true)})"
-exec admin "lua dump({c:execute('SELECT ? AS val', false)})"
-exec admin "lua dump({c:execute('SELECT ? AS val, ? AS num, ? AS str', false, 123, 'abc')})"
-exec admin "lua dump({c:execute('DROP TABLE IF EXISTS unknown_table')})"
-exec admin "lua dump({c:execute('SELECT * FROM (VALUES (1,2), (2,3)) t')})"
-exec admin "lua c:ping()"
-exec admin "lua dump({c:select('SELECT * FROM (VALUES (1,2), (2,3)) t')})"
-exec admin "lua dump({c:single('SELECT * FROM (VALUES (1,2), (2,3)) t')})"
-exec admin "lua dump({c:single('SELECT * FROM (VALUES (1,2)) t')})"
-exec admin "lua dump({c:perform('SELECT * FROM (VALUES (1,2), (2,3)) t')})"
-exec admin "lua c:execute('SELEC T')"
-
-exec admin "lua c = box.net.sql.connect('abcd')"
-
-
-exec admin "lua c:quote('abc\"cde\"def')"
-
-
-exec admin "lua c:begin_work()"
-exec admin "lua c:rollback()"
-exec admin "lua c:begin_work()"
-exec admin "lua c:commit()"
-
-exec admin "lua c:txn(function(dbi) dbi:single('SELECT 1') end)"
-
-os.unlink(module_path_so)
-os.removedirs(module_path)
diff --git a/test/box/net_sql.pg.test.lua b/test/module/net_sql.pg.test.lua
similarity index 80%
rename from test/box/net_sql.pg.test.lua
rename to test/module/net_sql.pg.test.lua
index 689638583630b4676ba400a4d2bf5019673fdf27..d888808e60ac753d63899849405402c6b69c0376 100644
--- a/test/box/net_sql.pg.test.lua
+++ b/test/module/net_sql.pg.test.lua
@@ -1,3 +1,14 @@
+package.path  = "../../src/module/sql/?.lua"
+package.cpath  = "?.so"
+
+require("sql")
+if type(box.net.sql) ~= "table" then error("net.sql load failed") end
+
+os.execute("mkdir -p box/net/")
+os.execute("cp ../../src/module/pg/pg.so box/net/")
+
+require("box.net.pg")
+
 c = box.net.sql.connect('abcd')
 dump = function(v) return box.cjson.encode(v) end
 
@@ -34,3 +45,5 @@ c:begin_work()
 c:commit()
 
 c:txn(function(dbi) dbi:single('SELECT 1') end)
+
+os.execute("rm -rf box/net/")
diff --git a/test/module/sophia.lua b/test/module/sophia.lua
deleted file mode 100644
index 9ffd592643f39d9e91b7fa58012c76d168681250..0000000000000000000000000000000000000000
--- a/test/module/sophia.lua
+++ /dev/null
@@ -1 +0,0 @@
-require("box.sophia")
diff --git a/test/module/sophia.result b/test/module/sophia.result
index e3a5165d9fca1b0aecf861c200b19fe9149ed583..57d016b172c0ff7a9ca0e0a690a28e581461c71d 100644
--- a/test/module/sophia.result
+++ b/test/module/sophia.result
@@ -1,101 +1,146 @@
-lua env = box.sophia.create()
+package.cpath  = "?.so"
 ---
 ...
-lua flags = bit.bor(box.sophia.SPO_RDWR, box.sophia.SPO_CREAT)
+os.execute("mkdir -p box")
 ---
+- 0
 ...
-lua env:ctl(box.sophia.SPDIR, flags, "./sophia")
+os.execute("cp ../../src/module/sophia/sophia.so box/")
 ---
- - 0
+- 0
 ...
-lua env:open()
+sophia = require("box.sophia")
 ---
- - 0
 ...
-lua for key=1, 10 do print(env:set(tostring(key), tostring(key))) end
+env = sophia.create()
 ---
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
 ...
-lua for key=1, 10 do print(env:get(tostring(key))) end
+flags = bit.bor(sophia.SPO_RDWR, sophia.SPO_CREAT)
 ---
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
 ...
-lua env:close()
+env:ctl(sophia.SPDIR, flags, "./sophia")
 ---
- - 0
+- 0
 ...
-lua env = box.sophia.create()
+env:open()
 ---
+- 0
 ...
-lua flags = bit.bor(box.sophia.SPO_RDWR)
+t = {}
 ---
 ...
-lua env:ctl(box.sophia.SPDIR, flags, "./sophia")
+for key=1, 10 do table.insert(t, env:set(tostring(key), tostring(key))) end
 ---
- - 0
 ...
-lua env:open()
+t
 ---
- - 0
+- - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
 ...
-lua for key=1, 10 do print(env:get(tostring(key))) end
+t = {}
 ---
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
 ...
-lua for key=1, 10 do print(env:delete(tostring(key))) end
+for key=1, 10 do table.insert(t, env:get(tostring(key))) end
 ---
-0
-0
-0
-0
-0
-0
-0
-0
-0
-0
 ...
-lua for key=1, 10 do print(env:get(tostring(key))) end
+t
 ---
-nil
-nil
-nil
-nil
-nil
-nil
-nil
-nil
-nil
-nil
+- - '1'
+  - '2'
+  - '3'
+  - '4'
+  - '5'
+  - '6'
+  - '7'
+  - '8'
+  - '9'
+  - '10'
 ...
-lua env:close()
+t = {}
 ---
- - 0
+...
+env:close()
+---
+- 0
+...
+env = sophia.create()
+---
+...
+flags = bit.bor(sophia.SPO_RDWR)
+---
+...
+env:ctl(sophia.SPDIR, flags, "./sophia")
+---
+- 0
+...
+env:open()
+---
+- 0
+...
+t = {}
+---
+...
+for key=1, 10 do table.insert(t, env:get(tostring(key))) end
+---
+...
+t
+---
+- - '1'
+  - '2'
+  - '3'
+  - '4'
+  - '5'
+  - '6'
+  - '7'
+  - '8'
+  - '9'
+  - '10'
+...
+t = {}
+---
+...
+for key=1, 10 do table.insert(t, env:delete(tostring(key))) end
+---
+...
+t
+---
+- - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+  - 0
+...
+t = {}
+---
+...
+for key=1, 10 do table.insert(t, env:get(tostring(key))) end
+---
+...
+t
+---
+- []
+...
+t = {}
+---
+...
+env:close()
+---
+- 0
+...
+os.execute("rm -rf box/")
+---
+- 0
 ...
diff --git a/test/module/sophia.test.lua b/test/module/sophia.test.lua
new file mode 100644
index 0000000000000000000000000000000000000000..922167d38608914df73c64e55714c8aee898f2e2
--- /dev/null
+++ b/test/module/sophia.test.lua
@@ -0,0 +1,37 @@
+package.cpath  = "?.so"
+
+os.execute("mkdir -p box")
+os.execute("cp ../../src/module/sophia/sophia.so box/")
+
+sophia = require("box.sophia")
+
+env = sophia.create()
+flags = bit.bor(sophia.SPO_RDWR, sophia.SPO_CREAT)
+env:ctl(sophia.SPDIR, flags, "./sophia")
+env:open()
+t = {}
+for key=1, 10 do table.insert(t, env:set(tostring(key), tostring(key))) end
+t
+t = {}
+for key=1, 10 do table.insert(t, env:get(tostring(key))) end
+t
+t = {}
+env:close()
+
+env = sophia.create()
+flags = bit.bor(sophia.SPO_RDWR)
+env:ctl(sophia.SPDIR, flags, "./sophia")
+env:open()
+t = {}
+for key=1, 10 do table.insert(t, env:get(tostring(key))) end
+t
+t = {}
+for key=1, 10 do table.insert(t, env:delete(tostring(key))) end
+t
+t = {}
+for key=1, 10 do table.insert(t, env:get(tostring(key))) end
+t
+t = {}
+env:close()
+
+os.execute("rm -rf box/")
diff --git a/test/module/tarantool.cfg b/test/module/tarantool.cfg
index 69674c64b7d329793e659c8864ed222f23a9eccf..7afb21ed0571ef7cc3bb89cf5617c1001284116b 100644
--- a/test/module/tarantool.cfg
+++ b/test/module/tarantool.cfg
@@ -23,8 +23,6 @@ logger="cat - >> tarantool.log"
 #
 # Read only and read-write port.
 primary_port = 33013
-# Read-only port.
-secondary_port = 33014
 #
 # The port for administrative commands.
 #
@@ -34,12 +32,3 @@ admin_port = 33015
 # When the limit is reached, Tarantool closes
 # the WAL and starts a new one.
 rows_per_wal = 50
-
-# Define a simple space with 1 HASH-based
-# primary key.
-space[0].enabled = 1
-space[0].index[0].type = "HASH"
-space[0].index[0].unique = 1
-space[0].index[0].key_field[0].fieldno = 0
-space[0].index[0].key_field[0].type = "NUM"
-