diff --git a/test/xlog/dup_key.result b/test/xlog/dup_key.result
new file mode 100644
index 0000000000000000000000000000000000000000..53ae732283903afc0a2c0bcf9c8ba0ef645bc89a
--- /dev/null
+++ b/test/xlog/dup_key.result
@@ -0,0 +1,54 @@
+space = box.schema.space.create('test')
+---
+...
+index = box.space.test:create_index('primary')
+---
+...
+box.space.test:insert{1, 'first tuple'}
+---
+- [1, 'first tuple']
+...
+box.space.test:insert{2, 'second tuple'}
+---
+- [2, 'second tuple']
+...
+.xlog exists
+space = box.schema.space.create('test')
+---
+...
+index = box.space.test:create_index('primary')
+---
+...
+box.space.test:insert{1, 'first tuple'}
+---
+- [1, 'first tuple']
+...
+box.space.test:delete{1}
+---
+- [1, 'first tuple']
+...
+box.space.test:insert{1, 'third tuple'}
+---
+- [1, 'third tuple']
+...
+box.space.test:insert{2, 'fourth tuple'}
+---
+- [2, 'fourth tuple']
+...
+.xlog exists
+check log line for 'Duplicate key'
+
+'Duplicate key' exists in server log
+
+box.space.test:get{1}
+---
+- [1, 'first tuple']
+...
+box.space.test:get{2}
+---
+- [2, 'second tuple']
+...
+box.space.test:len()
+---
+- 2
+...
diff --git a/test/xlog/dup_key.test.py b/test/xlog/dup_key.test.py
new file mode 100644
index 0000000000000000000000000000000000000000..0c2db2109685c1a7c19f8bf8cbd423947d89c2b6
--- /dev/null
+++ b/test/xlog/dup_key.test.py
@@ -0,0 +1,62 @@
+import os
+import yaml
+
+#print """
+#A test case for https://bugs.launchpad.net/tarantool/+bug/1052018
+#panic_on_wal_error doesn't work for duplicate key errors
+#"""
+
+server.stop()
+server.deploy()
+lsn = int(yaml.load(server.admin("box.info.server.lsn", silent=True))[0])
+filename = str(lsn).zfill(20) + ".xlog"
+wal_old = os.path.join(server.vardir, "old_" + filename)
+wal = os.path.join(server.vardir, filename)
+
+# Create wal#1
+server.admin("space = box.schema.space.create('test')")
+server.admin("index = box.space.test:create_index('primary')")
+server.admin("box.space.test:insert{1, 'first tuple'}")
+server.admin("box.space.test:insert{2, 'second tuple'}")
+server.stop()
+
+# Save wal #1
+if os.access(wal, os.F_OK):
+    print ".xlog exists"
+    os.rename(wal, wal_old)
+
+lsn += 4
+
+# Create another wal#1
+server.start()
+server.admin("space = box.schema.space.create('test')")
+server.admin("index = box.space.test:create_index('primary')")
+server.admin("box.space.test:insert{1, 'first tuple'}")
+server.admin("box.space.test:delete{1}")
+server.stop()
+
+# Create wal#2
+server.start()
+server.admin("box.space.test:insert{1, 'third tuple'}")
+server.admin("box.space.test:insert{2, 'fourth tuple'}")
+server.stop()
+
+if os.access(wal, os.F_OK):
+    print ".xlog exists"
+    # Replace wal#1 with saved copy
+    os.unlink(wal)
+    os.rename(wal_old, wal)
+
+
+server.start()
+line = 'Duplicate key'
+print "check log line for '%s'" % line
+print
+if server.logfile_pos.seek_once(line) >= 0:
+    print "'%s' exists in server log" % line
+print
+
+server.admin("box.space.test:get{1}")
+server.admin("box.space.test:get{2}")
+server.admin("box.space.test:len()")
+
diff --git a/test/xlog/empty.result b/test/xlog/empty.result
new file mode 100644
index 0000000000000000000000000000000000000000..15ddd85fb22deb972593b45bcbe14752e91d9011
--- /dev/null
+++ b/test/xlog/empty.result
@@ -0,0 +1,8 @@
+.xlog.inprogress exists
+_ = box.schema.space.create('test')
+---
+- error: Failed to write to disk
+...
+_ = box.schema.space.create('test')
+---
+...
diff --git a/test/xlog/empty.test.py b/test/xlog/empty.test.py
new file mode 100644
index 0000000000000000000000000000000000000000..ef5164f0f9bbff30a220ac522d969bc9d5380164
--- /dev/null
+++ b/test/xlog/empty.test.py
@@ -0,0 +1,28 @@
+import os
+import yaml
+from os.path import abspath
+
+#
+# This test used to pass:
+#
+# Empty xlog.inprogress must be deleted during recovery
+#
+# it doesn't pass any more since an xlog with missing header
+# can't be parsed by xdir_scan, thus we do nothing about it.
+# 
+server.stop()
+server.deploy()
+lsn = str(yaml.load(server.admin("box.info.server.lsn", silent=True))[0])
+filename = os.path.join(server.vardir, lsn.zfill(20) + ".xlog.inprogress")
+f = open(filename, "w+")
+f.close()
+server.start()
+server.stop()
+if os.access(filename, os.F_OK):
+    print ".xlog.inprogress exists"
+# the server has started but is crippled since it
+# can't override an existing file
+server.start()
+server.admin("_ = box.schema.space.create('test')")
+os.unlink(filename)
+server.admin("_ = box.schema.space.create('test')")
diff --git a/test/xlog/lsn_gap.result b/test/xlog/lsn_gap.result
new file mode 100644
index 0000000000000000000000000000000000000000..69d1de749e3474a4c68a5a5a9844d6dc6c305d9d
--- /dev/null
+++ b/test/xlog/lsn_gap.result
@@ -0,0 +1,32 @@
+space = box.schema.space.create('test')
+---
+...
+index = box.space.test:create_index('primary')
+---
+...
+box.space.test:insert{1, 'first tuple'}
+---
+- [1, 'first tuple']
+...
+box.space.test:insert{2, 'second tuple'}
+---
+- [2, 'second tuple']
+...
+box.space.test:insert{3, 'third tuple'}
+---
+- [3, 'third tuple']
+...
+box.space.test:insert{4, 'fourth tuple'}
+---
+- [4, 'fourth tuple']
+...
+check log line for 'ignoring missing WAL'
+
+'ignoring missing WAL' exists in server log
+
+box.space.test:select{}
+---
+- - [1, 'first tuple']
+  - [2, 'second tuple']
+  - [4, 'fourth tuple']
+...
diff --git a/test/xlog/lsn_gap.test.py b/test/xlog/lsn_gap.test.py
new file mode 100644
index 0000000000000000000000000000000000000000..3409ba3c0bb96ec3c3089bec0f6534c3a2976b5a
--- /dev/null
+++ b/test/xlog/lsn_gap.test.py
@@ -0,0 +1,38 @@
+import os
+import yaml
+#
+# gh-167: Replica can't find next xlog file if there is a gap in LSN
+#
+
+server.stop()
+server.deploy()
+
+# Create wal#1
+server.admin("space = box.schema.space.create('test')")
+server.admin("index = box.space.test:create_index('primary')")
+server.admin("box.space.test:insert{1, 'first tuple'}")
+server.admin("box.space.test:insert{2, 'second tuple'}")
+lsn = int(yaml.load(server.admin("box.info.server.lsn", silent=True))[0])
+wal = os.path.join(server.vardir, str(lsn).zfill(20) + ".xlog")
+server.stop()
+server.start()
+server.admin("box.space.test:insert{3, 'third tuple'}")
+server.stop()
+server.start()
+server.admin("box.space.test:insert{4, 'fourth tuple'}")
+server.stop()
+
+# Remove xlog with {3, 'third tuple'}
+os.unlink(wal)
+
+server.start()
+line="ignoring missing WAL"
+print "check log line for '%s'" % line
+print
+if server.logfile_pos.seek_once(line) >= 0:
+    print "'%s' exists in server log" % line
+print
+
+# missing tuple from removed xlog
+server.admin("box.space.test:select{}")
+
diff --git a/test/xlog/misc.result b/test/xlog/misc.result
new file mode 100644
index 0000000000000000000000000000000000000000..7b524dfb587444fe895c114391b9653e81b37f6a
--- /dev/null
+++ b/test/xlog/misc.result
@@ -0,0 +1,33 @@
+
+# Inprogress xlog must be renamed before second insert.
+
+space = box.schema.space.create('tweedledum', { id = 0 })
+---
+...
+.xlog.inprogress exists
+index = space:create_index('primary', { type = 'hash' })
+---
+...
+.xlog.inprogress has been successfully renamed
+
+# Inprogress xlog must be renamed during regular termination.
+
+box.space[0]:insert{3, 'third tuple'}
+---
+- [3, 'third tuple']
+...
+.xlog.inprogress exists
+.xlog.inprogress has been successfully renamed
+
+# An inprogress xlog file with one record must be renamed during recovery.
+
+box.space[0]:insert{4, 'fourth tuple'}
+---
+- [4, 'fourth tuple']
+...
+box.space[0]:insert{5, 'Unfinished record'}
+---
+- [5, 'Unfinished record']
+...
+.xlog exists
+.xlog.inprogress hash been successfully renamed
diff --git a/test/xlog/misc.test.py b/test/xlog/misc.test.py
new file mode 100644
index 0000000000000000000000000000000000000000..10293a6164faf6ad4f61027ffe4e85cccd68e31f
--- /dev/null
+++ b/test/xlog/misc.test.py
@@ -0,0 +1,117 @@
+import os
+import yaml
+
+from os.path import abspath
+
+# cleanup server.vardir
+server.stop()
+server.deploy()
+lsn = int(yaml.load(server.admin("box.info.server.lsn", silent=True))[0])
+server.stop()
+
+print """
+# Inprogress xlog must be renamed before second insert.
+"""
+filename = str(lsn).zfill(20) + ".xlog"
+wal_inprogress = os.path.join(server.vardir, filename + ".inprogress")
+wal = os.path.join(server.vardir, filename)
+
+server.start()
+
+server.admin("space = box.schema.space.create('tweedledum', { id = 0 })")
+if os.access(wal_inprogress, os.F_OK):
+  print ".xlog.inprogress exists"
+
+server.admin("index = space:create_index('primary', { type = 'hash' })")
+
+if os.access(wal, os.F_OK) and not os.access(wal_inprogress, os.F_OK):
+  print ".xlog.inprogress has been successfully renamed"
+server.stop()
+lsn += 2
+
+print """
+# Inprogress xlog must be renamed during regular termination.
+"""
+filename = str(lsn).zfill(20) + ".xlog"
+server.start()
+
+wal_inprogress = os.path.join(server.vardir, filename + ".inprogress")
+wal = os.path.join(server.vardir, filename)
+
+server.admin("box.space[0]:insert{3, 'third tuple'}")
+
+if os.access(wal_inprogress, os.F_OK):
+  print ".xlog.inprogress exists"
+
+server.stop()
+
+if os.access(wal, os.F_OK) and not os.access(wal_inprogress, os.F_OK):
+  print ".xlog.inprogress has been successfully renamed"
+lsn += 1
+
+print """
+# An inprogress xlog file with one record must be renamed during recovery.
+"""
+
+server.start()
+filename = str(lsn).zfill(20) + ".xlog"
+wal_inprogress = os.path.join(server.vardir, filename + ".inprogress")
+wal = os.path.join(server.vardir, filename)
+server.admin("box.space[0]:insert{4, 'fourth tuple'}")
+server.admin("box.space[0]:insert{5, 'Unfinished record'}")
+pid = int(yaml.load(server.admin("require('tarantool').pid()", silent=True))[0])
+from signal import SIGKILL
+if pid > 0:
+    os.kill(pid, SIGKILL)
+server.stop()
+
+if os.access(wal, os.F_OK):
+    print ".xlog exists"
+    # Remove last byte from xlog
+    f = open(wal, "a")
+    size = f.tell()
+    f.truncate(size - 1)
+    f.close()
+    os.rename(wal, wal_inprogress)
+
+server.start()
+
+if os.access(wal, os.F_OK) and not os.access(wal_inprogress, os.F_OK):
+  print ".xlog.inprogress hash been successfully renamed"
+server.stop()
+lsn += 1
+
+# print """
+# # Empty (header only, no records) inprogress xlog must be deleted
+# # during recovery.
+# """
+#
+# # If the previous test has failed, there is a dangling link
+# # and symlink fails.
+# try:
+#   os.symlink(abspath("box/just_header.xlog"), wal_inprogress)
+# except OSError as e:
+#   print e
+#
+# server.start()
+#
+# if not os.access(wal_inprogress, os.F_OK) and not os.access(wal, os.F_OK):
+#    print "00000000000000000006.xlog.inprogress has been successfully deleted"
+# server.stop()
+
+# print """
+# # Inprogress xlog with bad record must be deleted during recovery.
+# """
+#
+# # If the previous test has failed, there is a dangling link
+# # and symlink fails.
+# try:
+#   os.symlink(abspath("box/bad_record.xlog"), wal_inprogress)
+# except OSError as e:
+#   print e
+#
+# server.start()
+#
+# if not os.access(wal_inprogress, os.F_OK) and not os.access(wal, os.F_OK):
+#    print "00000000000000000006.xlog.inprogress has been successfully deleted"
+
diff --git a/test/xlog/missing.result b/test/xlog/missing.result
new file mode 100644
index 0000000000000000000000000000000000000000..900f4459d00e6946e0546be65ead17bab81d91f7
--- /dev/null
+++ b/test/xlog/missing.result
@@ -0,0 +1,38 @@
+space = box.schema.space.create('test')
+---
+...
+index = box.space.test:create_index('primary')
+---
+...
+box.space.test:insert{1, 'first tuple'}
+---
+- [1, 'first tuple']
+...
+box.space.test:insert{2, 'second tuple'}
+---
+- [2, 'second tuple']
+...
+box.space.test:insert{3, 'third tuple'}
+---
+- [3, 'third tuple']
+...
+box.space.test:delete{1}
+---
+- [1, 'first tuple']
+...
+box.space.test:delete{2}
+---
+- [2, 'second tuple']
+...
+box.space.test:delete{3}
+---
+- [3, 'third tuple']
+...
+check log line for 'ignoring missing WAL'
+
+'ignoring missing WAL' exists in server log
+
+box.space.test:select{}
+---
+- []
+...
diff --git a/test/xlog/missing.test.py b/test/xlog/missing.test.py
new file mode 100644
index 0000000000000000000000000000000000000000..8833d1a6d0c3d77a247d19dee895102b47d1143a
--- /dev/null
+++ b/test/xlog/missing.test.py
@@ -0,0 +1,43 @@
+import yaml
+import os 
+#
+# gh-716: infinite loop at start if missing xlog
+#
+
+server.stop()
+server.deploy()
+
+# Create wal#1
+server.admin("space = box.schema.space.create('test')")
+server.admin("index = box.space.test:create_index('primary')")
+server.stop()
+server.start()
+# these inserts will be in their own xlog, which then will
+# get "lost"
+lsn = int(yaml.load(server.admin("box.info.server.lsn", silent=True))[0])
+wal = os.path.join(server.vardir, str(lsn).zfill(20) + ".xlog")
+server.admin("box.space.test:insert{1, 'first tuple'}")
+server.admin("box.space.test:insert{2, 'second tuple'}")
+server.admin("box.space.test:insert{3, 'third tuple'}")
+server.stop()
+server.start()
+# put deletes in their own xlog
+server.admin("box.space.test:delete{1}")
+server.admin("box.space.test:delete{2}")
+server.admin("box.space.test:delete{3}")
+server.stop()
+
+# Remove xlog with inserts
+os.unlink(wal)
+# tarantool doesn't issue an LSN for deletes which delete nothing
+# this may lead to infinite recursion at start
+server.start()
+line="ignoring missing WAL"
+print "check log line for '%s'" % line
+print
+if server.logfile_pos.seek_once(line) >= 0:
+    print "'%s' exists in server log" % line
+print
+
+# missing tuples from removed xlog
+server.admin("box.space.test:select{}")
diff --git a/test/xlog/xlog.result b/test/xlog/xlog.result
deleted file mode 100644
index 0594df8747dd18a822847e8a50791e0748d47adb..0000000000000000000000000000000000000000
--- a/test/xlog/xlog.result
+++ /dev/null
@@ -1,157 +0,0 @@
-
-# Inprogress xlog must be renamed before second insert.
-
-space = box.schema.space.create('tweedledum', { id = 0 })
----
-...
-.xlog.inprogress exists
-index = space:create_index('primary', { type = 'hash' })
----
-...
-.xlog.inprogress has been successfully renamed
-
-# Inprogress xlog must be renamed during regular termination.
-
-box.space[0]:insert{3, 'third tuple'}
----
-- [3, 'third tuple']
-...
-.xlog.inprogress exists
-.xlog.inprogress has been successfully renamed
-
-# An inprogress xlog file with one record must be renamed during recovery.
-
-box.space[0]:insert{4, 'fourth tuple'}
----
-- [4, 'fourth tuple']
-...
-box.space[0]:insert{5, 'Unfinished record'}
----
-- [5, 'Unfinished record']
-...
-.xlog exists
-.xlog.inprogress hash been successfully renamed
-space = box.schema.space.create('test')
----
-...
-index = box.space.test:create_index('primary')
----
-...
-box.space.test:insert{1, 'first tuple'}
----
-- [1, 'first tuple']
-...
-box.space.test:insert{2, 'second tuple'}
----
-- [2, 'second tuple']
-...
-.xlog exists
-space = box.schema.space.create('test')
----
-...
-index = box.space.test:create_index('primary')
----
-...
-box.space.test:insert{1, 'first tuple'}
----
-- [1, 'first tuple']
-...
-box.space.test:delete{1}
----
-- [1, 'first tuple']
-...
-box.space.test:insert{1, 'third tuple'}
----
-- [1, 'third tuple']
-...
-box.space.test:insert{2, 'fourth tuple'}
----
-- [2, 'fourth tuple']
-...
-.xlog exists
-check log line for 'Duplicate key'
-
-'Duplicate key' exists in server log
-
-box.space.test:get{1}
----
-- [1, 'first tuple']
-...
-box.space.test:get{2}
----
-- [2, 'second tuple']
-...
-box.space.test:len()
----
-- 2
-...
-space = box.schema.space.create('test')
----
-...
-index = box.space.test:create_index('primary')
----
-...
-box.space.test:insert{1, 'first tuple'}
----
-- [1, 'first tuple']
-...
-box.space.test:insert{2, 'second tuple'}
----
-- [2, 'second tuple']
-...
-box.space.test:insert{3, 'third tuple'}
----
-- [3, 'third tuple']
-...
-box.space.test:insert{4, 'fourth tuple'}
----
-- [4, 'fourth tuple']
-...
-check log line for 'ignoring missing WAL'
-
-'ignoring missing WAL' exists in server log
-
-box.space.test:select{}
----
-- - [1, 'first tuple']
-  - [2, 'second tuple']
-  - [4, 'fourth tuple']
-...
-space = box.schema.space.create('test')
----
-...
-index = box.space.test:create_index('primary')
----
-...
-box.space.test:insert{1, 'first tuple'}
----
-- [1, 'first tuple']
-...
-box.space.test:insert{2, 'second tuple'}
----
-- [2, 'second tuple']
-...
-box.space.test:insert{3, 'third tuple'}
----
-- [3, 'third tuple']
-...
-box.space.test:delete{1}
----
-- [1, 'first tuple']
-...
-box.space.test:delete{2}
----
-- [2, 'second tuple']
-...
-box.space.test:delete{3}
----
-- [3, 'third tuple']
-...
-check log line for 'ignoring missing WAL'
-
-'ignoring missing WAL' exists in server log
-
-box.space.test:select{}
----
-- []
-...
diff --git a/test/xlog/xlog.test.py b/test/xlog/xlog.test.py
deleted file mode 100644
index c5782934e3523ffdc21bdc42a9c0faf69379ba82..0000000000000000000000000000000000000000
--- a/test/xlog/xlog.test.py
+++ /dev/null
@@ -1,274 +0,0 @@
-import os
-import shutil
-import yaml
-import re
-
-from os.path import abspath
-
-# cleanup server.vardir
-server.stop()
-server.deploy()
-lsn = int(yaml.load(server.admin("box.info.server.lsn", silent=True))[0])
-server.stop()
-
-print """
-# Inprogress xlog must be renamed before second insert.
-"""
-filename = str(lsn).zfill(20) + ".xlog"
-wal_inprogress = os.path.join(server.vardir, filename + ".inprogress")
-wal = os.path.join(server.vardir, filename)
-
-server.start()
-
-server.admin("space = box.schema.space.create('tweedledum', { id = 0 })")
-if os.access(wal_inprogress, os.F_OK):
-  print ".xlog.inprogress exists"
-
-server.admin("index = space:create_index('primary', { type = 'hash' })")
-
-if os.access(wal, os.F_OK) and not os.access(wal_inprogress, os.F_OK):
-  print ".xlog.inprogress has been successfully renamed"
-server.stop()
-lsn += 2
-
-print """
-# Inprogress xlog must be renamed during regular termination.
-"""
-filename = str(lsn).zfill(20) + ".xlog"
-server.start()
-
-wal_inprogress = os.path.join(server.vardir, filename + ".inprogress")
-wal = os.path.join(server.vardir, filename)
-
-server.admin("box.space[0]:insert{3, 'third tuple'}")
-
-if os.access(wal_inprogress, os.F_OK):
-  print ".xlog.inprogress exists"
-
-server.stop()
-
-if os.access(wal, os.F_OK) and not os.access(wal_inprogress, os.F_OK):
-  print ".xlog.inprogress has been successfully renamed"
-lsn += 1
-
-print """
-# An inprogress xlog file with one record must be renamed during recovery.
-"""
-
-server.start()
-filename = str(lsn).zfill(20) + ".xlog"
-wal_inprogress = os.path.join(server.vardir, filename + ".inprogress")
-wal = os.path.join(server.vardir, filename)
-server.admin("box.space[0]:insert{4, 'fourth tuple'}")
-server.admin("box.space[0]:insert{5, 'Unfinished record'}")
-pid = int(yaml.load(server.admin("require('tarantool').pid()", silent=True))[0])
-from signal import SIGKILL
-if pid > 0:
-    os.kill(pid, SIGKILL)
-server.stop()
-
-if os.access(wal, os.F_OK):
-    print ".xlog exists"
-    # Remove last byte from xlog
-    f = open(wal, "a")
-    size = f.tell()
-    f.truncate(size - 1)
-    f.close()
-    os.rename(wal, wal_inprogress)
-
-server.start()
-
-if os.access(wal, os.F_OK) and not os.access(wal_inprogress, os.F_OK):
-  print ".xlog.inprogress hash been successfully renamed"
-server.stop()
-lsn += 1
-
-# print """
-# # Empty (zero size) inprogress xlog must be deleted during recovery.
-# """
-#
-# wal_inprogress = os.path.join(server.vardir, "00000000000000000006.xlog.inprogress")
-# wal = os.path.join(server.vardir, "00000000000000000006.xlog")
-#
-# os.symlink(abspath("box/empty.xlog"), wal_inprogress)
-# server.start()
-#
-# if not os.access(wal_inprogress, os.F_OK) and not os.access(wal, os.F_OK):
-#    print "00000000000000000006.xlog.inprogress has been successfully deleted"
-# server.stop()
-
-# print """
-# # Empty (header only, no records) inprogress xlog must be deleted
-# # during recovery.
-# """
-#
-# # If the previous test has failed, there is a dangling link
-# # and symlink fails.
-# try:
-#   os.symlink(abspath("box/just_header.xlog"), wal_inprogress)
-# except OSError as e:
-#   print e
-#
-# server.start()
-#
-# if not os.access(wal_inprogress, os.F_OK) and not os.access(wal, os.F_OK):
-#    print "00000000000000000006.xlog.inprogress has been successfully deleted"
-# server.stop()
-
-# print """
-# # Inprogress xlog with bad record must be deleted during recovery.
-# """
-#
-# # If the previous test has failed, there is a dangling link
-# # and symlink fails.
-# try:
-#   os.symlink(abspath("box/bad_record.xlog"), wal_inprogress)
-# except OSError as e:
-#   print e
-#
-# server.start()
-#
-# if not os.access(wal_inprogress, os.F_OK) and not os.access(wal, os.F_OK):
-#    print "00000000000000000006.xlog.inprogress has been successfully deleted"
-
-#print """
-#A test case for https://bugs.launchpad.net/tarantool/+bug/1052018
-#panic_on_wal_error doesn't work for duplicate key errors
-#"""
-
-server.stop()
-server.deploy()
-lsn = int(yaml.load(server.admin("box.info.server.lsn", silent=True))[0])
-filename = str(lsn).zfill(20) + ".xlog"
-wal_old = os.path.join(server.vardir, "old_" + filename)
-wal = os.path.join(server.vardir, filename)
-
-# Create wal#1
-server.admin("space = box.schema.space.create('test')")
-server.admin("index = box.space.test:create_index('primary')")
-server.admin("box.space.test:insert{1, 'first tuple'}")
-server.admin("box.space.test:insert{2, 'second tuple'}")
-server.stop()
-
-# Save wal #1
-if os.access(wal, os.F_OK):
-    print ".xlog exists"
-    os.rename(wal, wal_old)
-
-lsn += 4
-
-# Create another wal#1
-server.start()
-server.admin("space = box.schema.space.create('test')")
-server.admin("index = box.space.test:create_index('primary')")
-server.admin("box.space.test:insert{1, 'first tuple'}")
-server.admin("box.space.test:delete{1}")
-server.stop()
-
-# Create wal#2
-server.start()
-server.admin("box.space.test:insert{1, 'third tuple'}")
-server.admin("box.space.test:insert{2, 'fourth tuple'}")
-server.stop()
-
-if os.access(wal, os.F_OK):
-    print ".xlog exists"
-    # Replace wal#1 with saved copy
-    os.unlink(wal)
-    os.rename(wal_old, wal)
-
-
-server.start()
-line = 'Duplicate key'
-print "check log line for '%s'" % line
-print
-if server.logfile_pos.seek_once(line) >= 0:
-    print "'%s' exists in server log" % line
-print
-
-server.admin("box.space.test:get{1}")
-server.admin("box.space.test:get{2}")
-server.admin("box.space.test:len()")
-
-
-#
-# gh-167: Replica can't find next xlog file if there is a gap in LSN
-#
-
-server.stop()
-server.deploy()
-
-# Create wal#1
-server.admin("space = box.schema.space.create('test')")
-server.admin("index = box.space.test:create_index('primary')")
-server.admin("box.space.test:insert{1, 'first tuple'}")
-server.admin("box.space.test:insert{2, 'second tuple'}")
-lsn = int(yaml.load(server.admin("box.info.server.lsn", silent=True))[0])
-wal = os.path.join(server.vardir, str(lsn).zfill(20) + ".xlog")
-server.stop()
-server.start()
-server.admin("box.space.test:insert{3, 'third tuple'}")
-server.stop()
-server.start()
-server.admin("box.space.test:insert{4, 'fourth tuple'}")
-server.stop()
-
-# Remove xlog with {3, 'third tuple'}
-os.unlink(wal)
-
-server.start()
-line="ignoring missing WAL"
-print "check log line for '%s'" % line
-print
-if server.logfile_pos.seek_once(line) >= 0:
-    print "'%s' exists in server log" % line
-print
-
-# missing tuple from removed xlog
-server.admin("box.space.test:select{}")
-
-#
-# gh-716: infinite loop at start if missing xlog
-#
-
-server.stop()
-server.deploy()
-
-# Create wal#1
-server.admin("space = box.schema.space.create('test')")
-server.admin("index = box.space.test:create_index('primary')")
-server.stop()
-server.start()
-# these inserts will be in their own xlog, which then will
-# get "lost"
-lsn = int(yaml.load(server.admin("box.info.server.lsn", silent=True))[0])
-wal = os.path.join(server.vardir, str(lsn).zfill(20) + ".xlog")
-server.admin("box.space.test:insert{1, 'first tuple'}")
-server.admin("box.space.test:insert{2, 'second tuple'}")
-server.admin("box.space.test:insert{3, 'third tuple'}")
-server.stop()
-server.start()
-# put deletes in their own xlog
-server.admin("box.space.test:delete{1}")
-server.admin("box.space.test:delete{2}")
-server.admin("box.space.test:delete{3}")
-server.stop()
-
-# Remove xlog with inserts
-os.unlink(wal)
-# tarantool doesn't issue an LSN for deletes which delete nothing
-# this may lead to infinite recursion at start
-server.start()
-line="ignoring missing WAL"
-print "check log line for '%s'" % line
-print
-if server.logfile_pos.seek_once(line) >= 0:
-    print "'%s' exists in server log" % line
-print
-
-# missing tuples from removed xlog
-server.admin("box.space.test:select{}")
-
-# cleanup
-server.stop()
-server.deploy()