comparison test/test_postgresql.py @ 4887:05c857e5dbed

New rdbms configuration option 'isolation_level' See discussion in http://issues.roundup-tracker.org/issue2550806
author Ralf Schlatterbeck <rsc@runtux.com>
date Sun, 06 Apr 2014 11:11:04 +0200
parents f6e76a03b502
children 63c79c0992ae
comparison
equal deleted inserted replaced
4886:a116de39e38c 4887:05c857e5dbed
19 19
20 from roundup.hyperdb import DatabaseError 20 from roundup.hyperdb import DatabaseError
21 21
22 from db_test_base import DBTest, ROTest, config, SchemaTest, ClassicInitTest 22 from db_test_base import DBTest, ROTest, config, SchemaTest, ClassicInitTest
23 from db_test_base import ConcurrentDBTest, HTMLItemTest, FilterCacheTest 23 from db_test_base import ConcurrentDBTest, HTMLItemTest, FilterCacheTest
24 from db_test_base import ClassicInitBase, setupTracker
24 25
25 from roundup.backends import get_backend, have_backend 26 from roundup.backends import get_backend, have_backend
26 27
27 class postgresqlOpener: 28 class postgresqlOpener:
28 if have_backend('postgresql'): 29 if have_backend('postgresql'):
63 ConcurrentDBTest.setUp(self) 64 ConcurrentDBTest.setUp(self)
64 65
65 def tearDown(self): 66 def tearDown(self):
66 ConcurrentDBTest.tearDown(self) 67 ConcurrentDBTest.tearDown(self)
67 postgresqlOpener.tearDown(self) 68 postgresqlOpener.tearDown(self)
69
70 class postgresqlJournalTest(postgresqlOpener, ClassicInitBase):
71 backend = 'postgresql'
72 def setUp(self):
73 postgresqlOpener.setUp(self)
74 ClassicInitBase.setUp(self)
75 self.tracker = setupTracker(self.dirname, self.backend)
76 db = self.tracker.open('admin')
77 self.id = db.issue.create(title='initial value')
78 db.commit()
79 db.close()
80
81 def tearDown(self):
82 self.db1.close()
83 self.db2.close()
84 ClassicInitBase.tearDown(self)
85 postgresqlOpener.tearDown(self)
86
87 def _test_journal(self, expected_journal):
88 id = self.id
89 db1 = self.db1 = self.tracker.open('admin')
90 db2 = self.db2 = self.tracker.open('admin')
91
92 t1 = db1.issue.get(id, 'title')
93 t2 = db2.issue.get(id, 'title')
94
95 db1.issue.set (id, title='t1')
96 db1.commit()
97 db1.close()
98
99 db2.issue.set (id, title='t2')
100 db2.commit()
101 db2.close()
102 self.db = self.tracker.open('admin')
103 journal = self.db.getjournal('issue', id)
104 for n, line in enumerate(journal):
105 self.assertEqual(line[4], expected_journal[n])
106
107 def testConcurrentReadCommitted(self):
108 expected_journal = [
109 {}, {'title': 'initial value'}, {'title': 'initial value'}
110 ]
111 self._test_journal(expected_journal)
112
113 def testConcurrentRepeatableRead(self):
114 self.tracker.config.RDBMS_ISOLATION_LEVEL='repeatable read'
115 exc = self.module.TransactionRollbackError
116 self.assertRaises(exc, self._test_journal, [])
68 117
69 class postgresqlHTMLItemTest(postgresqlOpener, HTMLItemTest): 118 class postgresqlHTMLItemTest(postgresqlOpener, HTMLItemTest):
70 backend = 'postgresql' 119 backend = 'postgresql'
71 def setUp(self): 120 def setUp(self):
72 postgresqlOpener.setUp(self) 121 postgresqlOpener.setUp(self)
130 suite.addTest(unittest.makeSuite(postgresqlROTest)) 179 suite.addTest(unittest.makeSuite(postgresqlROTest))
131 suite.addTest(unittest.makeSuite(postgresqlSchemaTest)) 180 suite.addTest(unittest.makeSuite(postgresqlSchemaTest))
132 suite.addTest(unittest.makeSuite(postgresqlClassicInitTest)) 181 suite.addTest(unittest.makeSuite(postgresqlClassicInitTest))
133 suite.addTest(unittest.makeSuite(postgresqlSessionTest)) 182 suite.addTest(unittest.makeSuite(postgresqlSessionTest))
134 suite.addTest(unittest.makeSuite(postgresqlConcurrencyTest)) 183 suite.addTest(unittest.makeSuite(postgresqlConcurrencyTest))
184 suite.addTest(unittest.makeSuite(postgresqlJournalTest))
135 suite.addTest(unittest.makeSuite(postgresqlHTMLItemTest)) 185 suite.addTest(unittest.makeSuite(postgresqlHTMLItemTest))
136 suite.addTest(unittest.makeSuite(postgresqlFilterCacheTest)) 186 suite.addTest(unittest.makeSuite(postgresqlFilterCacheTest))
137 return suite 187 return suite
138 188
139 # vim: set et sts=4 sw=4 : 189 # vim: set et sts=4 sw=4 :

Roundup Issue Tracker: http://roundup-tracker.org/