Mercurial > p > roundup > code
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 : |
