From 6d964bee2a4e4ee6ada8217a2df248fa0ba29f09 Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Thu, 17 Dec 2015 15:30:09 -0300
Subject: [PATCH 2/2] Add isolation spec for #13681

---
 src/test/isolation/expected/odoo-bug.out | 10 ++++++++++
 src/test/isolation/isolation_schedule    |  1 +
 src/test/isolation/specs/odoo-bug.spec   | 28 ++++++++++++++++++++++++++++
 3 files changed, 39 insertions(+)
 create mode 100644 src/test/isolation/expected/odoo-bug.out
 create mode 100644 src/test/isolation/specs/odoo-bug.spec

diff --git a/src/test/isolation/expected/odoo-bug.out b/src/test/isolation/expected/odoo-bug.out
new file mode 100644
index 0000000..c3cf4c1
--- /dev/null
+++ b/src/test/isolation/expected/odoo-bug.out
@@ -0,0 +1,10 @@
+Parsed test spec with 2 sessions
+
+starting permutation: s1b s1u1 s2b s2u s2c s1u2 s1c
+step s1b: BEGIN ISOLATION LEVEL REPEATABLE READ;
+step s1u1: UPDATE orders SET name = 'order of foo', user_id = 1 WHERE id = 1
+step s2b: BEGIN ISOLATION LEVEL REPEATABLE READ;
+step s2u: UPDATE users SET date = now() WHERE id = 1;
+step s2c: COMMIT;
+step s1u2: UPDATE orders SET name = 'order of foo (2)', user_id = 1 WHERE id = 1
+step s1c: COMMIT;
diff --git a/src/test/isolation/isolation_schedule b/src/test/isolation/isolation_schedule
index 60479c4..132a9c6 100644
--- a/src/test/isolation/isolation_schedule
+++ b/src/test/isolation/isolation_schedule
@@ -23,5 +23,6 @@ test: multixact-no-deadlock
 test: multixact-no-forget
 test: propagate-lock-delete
 test: tuplelock-conflict
+test: odoo-bug
 test: drop-index-concurrently-1
 test: timeouts
diff --git a/src/test/isolation/specs/odoo-bug.spec b/src/test/isolation/specs/odoo-bug.spec
new file mode 100644
index 0000000..8318b84
--- /dev/null
+++ b/src/test/isolation/specs/odoo-bug.spec
@@ -0,0 +1,28 @@
+setup
+{
+   DROP TABLE IF EXISTS users, orders;
+   CREATE TABLE users (id INTEGER PRIMARY KEY,
+                       name varchar, date timestamp);
+   CREATE TABLE orders (id INTEGER PRIMARY KEY, name varchar,
+                        user_id INTEGER REFERENCES users (id));
+   INSERT INTO users (id, name) VALUES (1, 'foo');
+   INSERT INTO orders (id, name) VALUES (1, 'first order');
+}
+
+teardown
+{
+   DROP TABLE users, orders;
+}
+
+session "s1"
+step "s1b"	 { BEGIN ISOLATION LEVEL REPEATABLE READ; }
+step "s1u1"  { UPDATE orders SET name = 'order of foo', user_id = 1 WHERE id = 1 }
+step "s1u2"  { UPDATE orders SET name = 'order of foo (2)', user_id = 1 WHERE id = 1}
+step "s1c"   { COMMIT; }
+
+session "s2"
+step "s2b"   { BEGIN ISOLATION LEVEL REPEATABLE READ; }
+step "s2u"   { UPDATE users SET date = now() WHERE id = 1; }
+step "s2c"   { COMMIT; }
+
+permutation "s1b" "s1u1" "s2b" "s2u" "s2c" "s1u2" "s1c"
-- 
2.1.4

