From 3bd371ae3b43807b311b3876b7f5b1a2036fa394 Mon Sep 17 00:00:00 2001 From: John Kristensen Date: Thu, 20 Aug 2015 14:44:49 +1000 Subject: [PATCH 1/5] Update tests to work with py.test py.test searches for any class that looks like a TestCase in the test directory and tries to run them as tests. Some of the classes that inherit TestCase are not meant to be run and are only intended to be "helper classes". Only the tests of the classes that inherit the "helper classes" should be run. If we convert these "helper classes" to be "mixins" py.test should not pick them up. --- test/db_test_base.py | 5 +++-- test/session_common.py | 3 ++- test/test_anydbm.py | 18 ++++++++++++------ test/test_indexer.py | 12 ++++++++---- test/test_jinja2.py | 13 ++++++++----- test/test_mailgw.py | 8 +++++--- test/test_memorydb.py | 12 ++++++++---- test/test_mysql.py | 24 ++++++++++++++++-------- test/test_postgresql.py | 32 +++++++++++++++++++++++--------- test/test_security.py | 3 ++- test/test_sqlite.py | 21 ++++++++++++++------- test/test_tsearch2.py | 16 +++++++++++----- test/test_xmlrpc.py | 28 +++++++++++++++++++++++----- 13 files changed, 135 insertions(+), 60 deletions(-) diff --git a/test/db_test_base.py b/test/db_test_base.py index 04f534d8be..e91f0366bc 100644 --- a/test/db_test_base.py +++ b/test/db_test_base.py @@ -121,7 +121,8 @@ def setupSchema(db, create, module): # nosy tests require this db.security.addPermissionToRole('User', 'View', 'msg') -class MyTestCase(unittest.TestCase): + +class MyTestCase(object): def tearDown(self): if hasattr(self, 'db'): self.db.close() @@ -2463,7 +2464,7 @@ class FilterCacheTest(commonDBTest): ae (result, ['4', '5', '6', '7', '8', '1', '2', '3']) -class ClassicInitBase(unittest.TestCase): +class ClassicInitBase(object): count = 0 db = None diff --git a/test/session_common.py b/test/session_common.py index c9223ffbdc..c3f2094f78 100644 --- a/test/session_common.py +++ b/test/session_common.py @@ -2,7 +2,8 @@ import os, shutil, unittest from db_test_base import config -class SessionTest(unittest.TestCase): + +class SessionTest(object): def setUp(self): # remove previous test, ignore errors if os.path.exists(config.DATABASE): diff --git a/test/test_anydbm.py b/test/test_anydbm.py index 22f0611da8..b817f170a2 100644 --- a/test/test_anydbm.py +++ b/test/test_anydbm.py @@ -27,23 +27,29 @@ class anydbmOpener: def nuke_database(self): shutil.rmtree(config.DATABASE) -class anydbmDBTest(anydbmOpener, DBTest): + +class anydbmDBTest(anydbmOpener, DBTest, unittest.TestCase): pass -class anydbmROTest(anydbmOpener, ROTest): + +class anydbmROTest(anydbmOpener, ROTest, unittest.TestCase): pass -class anydbmSchemaTest(anydbmOpener, SchemaTest): + +class anydbmSchemaTest(anydbmOpener, SchemaTest, unittest.TestCase): pass -class anydbmClassicInitTest(ClassicInitTest): + +class anydbmClassicInitTest(ClassicInitTest, unittest.TestCase): backend = 'anydbm' -class anydbmHTMLItemTest(HTMLItemTest): + +class anydbmHTMLItemTest(HTMLItemTest, unittest.TestCase): backend = 'anydbm' + from session_common import DBMTest -class anydbmSessionTest(anydbmOpener, DBMTest): +class anydbmSessionTest(anydbmOpener, DBMTest, unittest.TestCase): pass def test_suite(): diff --git a/test/test_indexer.py b/test/test_indexer.py index 2a8d279e72..86964c818d 100644 --- a/test/test_indexer.py +++ b/test/test_indexer.py @@ -149,7 +149,8 @@ class XapianIndexerTest(IndexerTest): def tearDown(self): shutil.rmtree('test-index') -class RDBMSIndexerTest(IndexerTest): + +class RDBMSIndexerTest(object): def setUp(self): # remove previous test, ignore errors if os.path.exists(config.DATABASE): @@ -162,7 +163,8 @@ class RDBMSIndexerTest(IndexerTest): if os.path.exists(config.DATABASE): shutil.rmtree(config.DATABASE) -class postgresqlIndexerTest(postgresqlOpener, RDBMSIndexerTest): + +class postgresqlIndexerTest(postgresqlOpener, RDBMSIndexerTest, IndexerTest): def setUp(self): postgresqlOpener.setUp(self) RDBMSIndexerTest.setUp(self) @@ -170,7 +172,8 @@ class postgresqlIndexerTest(postgresqlOpener, RDBMSIndexerTest): RDBMSIndexerTest.tearDown(self) postgresqlOpener.tearDown(self) -class mysqlIndexerTest(mysqlOpener, RDBMSIndexerTest): + +class mysqlIndexerTest(mysqlOpener, RDBMSIndexerTest, IndexerTest): def setUp(self): mysqlOpener.setUp(self) RDBMSIndexerTest.setUp(self) @@ -178,7 +181,8 @@ class mysqlIndexerTest(mysqlOpener, RDBMSIndexerTest): RDBMSIndexerTest.tearDown(self) mysqlOpener.tearDown(self) -class sqliteIndexerTest(sqliteOpener, RDBMSIndexerTest): + +class sqliteIndexerTest(sqliteOpener, RDBMSIndexerTest, IndexerTest): pass def test_suite(): diff --git a/test/test_jinja2.py b/test/test_jinja2.py index 44acc5216d..e690efe45a 100644 --- a/test/test_jinja2.py +++ b/test/test_jinja2.py @@ -17,7 +17,8 @@ class TestCase_Zero(unittest.TestCase): def test_zero(self): self.assertEqual(True, True) -class TestCase(unittest.TestCase): + +class Jinja2Test(object): backend = None # can be used to create tests per backend, see test_xmlrpc @@ -29,6 +30,11 @@ class TestCase(unittest.TestCase): def test_zero(self): pass + +class anydbmJinja2Test(Jinja2Test, unittest.TestCase): + backend = 'anydbm' + + def test_suite(): suite = unittest.TestSuite() @@ -37,10 +43,7 @@ def test_suite(): # only using one database backend for now, not sure if doing all # backends will keep the test focussed enough to be useful for the used # computing time. Would be okay to change in the future. - l = 'anydbm' - dct = dict(backend = l) - subcls = type(TestCase)('TestCase_%s'%l, (TestCase,), dct) - suite.addTest(unittest.makeSuite(subcls)) + suite.addTest(unittest.makeSuite(anydbmJinja2Test)) return suite diff --git a/test/test_mailgw.py b/test/test_mailgw.py index 50f73fa8e1..65fa076e27 100644 --- a/test/test_mailgw.py +++ b/test/test_mailgw.py @@ -141,7 +141,8 @@ class DiffHelper: from roundup.hyperdb import String -class MailgwTestAbstractBase(unittest.TestCase, DiffHelper): + +class MailgwTestAbstractBase(DiffHelper): count = 0 schema = 'classic' def setUp(self): @@ -233,7 +234,7 @@ Subject: [issue] Testing... self.assertEqual(self.db.issue.get(nodeid, 'tx_Source'), 'email') -class MailgwTestCase(MailgwTestAbstractBase): +class MailgwTestCase(MailgwTestAbstractBase, unittest.TestCase): def testMessageWithFromInIt(self): nodeid = self._handle_mail('''Content-Type: text/plain; @@ -3261,7 +3262,8 @@ Stack trace: fileid = self.db.msg.get(msgid, 'files')[0] self.assertEqual(self.db.file.get(fileid, 'type'), 'message/rfc822') -class MailgwPGPTestCase(MailgwTestAbstractBase): + +class MailgwPGPTestCase(MailgwTestAbstractBase, unittest.TestCase): pgphome = gpgmelib.pgphome def setUp(self): MailgwTestAbstractBase.setUp(self) diff --git a/test/test_memorydb.py b/test/test_memorydb.py index c96a9b4690..01da141f6f 100644 --- a/test/test_memorydb.py +++ b/test/test_memorydb.py @@ -33,19 +33,23 @@ class memorydbOpener: self.db = self.module.Database(config, 'admin') setupSchema(self.db, 0, self.module) -class memorydbDBTest(memorydbOpener, DBTest): + +class memorydbDBTest(memorydbOpener, DBTest, unittest.TestCase): pass -class memorydbROTest(memorydbOpener, ROTest): + +class memorydbROTest(memorydbOpener, ROTest, unittest.TestCase): def setUp(self): self.db = self.module.Database(config) setupSchema(self.db, 0, self.module) -class memorydbSchemaTest(memorydbOpener, SchemaTest): + +class memorydbSchemaTest(memorydbOpener, SchemaTest, unittest.TestCase): pass + from session_common import DBMTest -class memorydbSessionTest(memorydbOpener, DBMTest): +class memorydbSessionTest(memorydbOpener, DBMTest, unittest.TestCase): def setUp(self): self.db = self.module.Database(config, 'admin') setupSchema(self.db, 1, self.module) diff --git a/test/test_mysql.py b/test/test_mysql.py index 888bf8d521..8d6b644a36 100644 --- a/test/test_mysql.py +++ b/test/test_mysql.py @@ -38,22 +38,26 @@ class mysqlOpener: def nuke_database(self): self.module.db_nuke(config) -class mysqlDBTest(mysqlOpener, DBTest): + +class mysqlDBTest(mysqlOpener, DBTest, unittest.TestCase): def setUp(self): mysqlOpener.setUp(self) DBTest.setUp(self) -class mysqlROTest(mysqlOpener, ROTest): + +class mysqlROTest(mysqlOpener, ROTest, unittest.TestCase): def setUp(self): mysqlOpener.setUp(self) ROTest.setUp(self) -class mysqlSchemaTest(mysqlOpener, SchemaTest): + +class mysqlSchemaTest(mysqlOpener, SchemaTest, unittest.TestCase): def setUp(self): mysqlOpener.setUp(self) SchemaTest.setUp(self) -class mysqlClassicInitTest(mysqlOpener, ClassicInitTest): + +class mysqlClassicInitTest(mysqlOpener, ClassicInitTest, unittest.TestCase): backend = 'mysql' def setUp(self): mysqlOpener.setUp(self) @@ -62,7 +66,8 @@ class mysqlClassicInitTest(mysqlOpener, ClassicInitTest): ClassicInitTest.tearDown(self) self.nuke_database() -class mysqlConcurrencyTest(mysqlOpener, ConcurrentDBTest): + +class mysqlConcurrencyTest(mysqlOpener, ConcurrentDBTest, unittest.TestCase): backend = 'mysql' def setUp(self): mysqlOpener.setUp(self) @@ -71,7 +76,8 @@ class mysqlConcurrencyTest(mysqlOpener, ConcurrentDBTest): ConcurrentDBTest.tearDown(self) self.nuke_database() -class mysqlHTMLItemTest(mysqlOpener, HTMLItemTest): + +class mysqlHTMLItemTest(mysqlOpener, HTMLItemTest, unittest.TestCase): backend = 'mysql' def setUp(self): mysqlOpener.setUp(self) @@ -80,7 +86,8 @@ class mysqlHTMLItemTest(mysqlOpener, HTMLItemTest): HTMLItemTest.tearDown(self) self.nuke_database() -class mysqlFilterCacheTest(mysqlOpener, FilterCacheTest): + +class mysqlFilterCacheTest(mysqlOpener, FilterCacheTest, unittest.TestCase): backend = 'mysql' def setUp(self): mysqlOpener.setUp(self) @@ -89,8 +96,9 @@ class mysqlFilterCacheTest(mysqlOpener, FilterCacheTest): FilterCacheTest.tearDown(self) self.nuke_database() + from session_common import RDBMSTest -class mysqlSessionTest(mysqlOpener, RDBMSTest): +class mysqlSessionTest(mysqlOpener, RDBMSTest, unittest.TestCase): def setUp(self): mysqlOpener.setUp(self) RDBMSTest.setUp(self) diff --git a/test/test_postgresql.py b/test/test_postgresql.py index 696b1268d9..2b4120a68c 100644 --- a/test/test_postgresql.py +++ b/test/test_postgresql.py @@ -39,7 +39,8 @@ class postgresqlOpener: # clear out the database - easiest way is to nuke and re-create it self.module.db_nuke(config) -class postgresqlDBTest(postgresqlOpener, DBTest): + +class postgresqlDBTest(postgresqlOpener, DBTest, unittest.TestCase): def setUp(self): postgresqlOpener.setUp(self) DBTest.setUp(self) @@ -48,7 +49,8 @@ class postgresqlDBTest(postgresqlOpener, DBTest): DBTest.tearDown(self) postgresqlOpener.tearDown(self) -class postgresqlROTest(postgresqlOpener, ROTest): + +class postgresqlROTest(postgresqlOpener, ROTest, unittest.TestCase): def setUp(self): postgresqlOpener.setUp(self) ROTest.setUp(self) @@ -57,7 +59,9 @@ class postgresqlROTest(postgresqlOpener, ROTest): ROTest.tearDown(self) postgresqlOpener.tearDown(self) -class postgresqlConcurrencyTest(postgresqlOpener, ConcurrentDBTest): + +class postgresqlConcurrencyTest(postgresqlOpener, ConcurrentDBTest, + unittest.TestCase): backend = 'postgresql' def setUp(self): postgresqlOpener.setUp(self) @@ -67,7 +71,9 @@ class postgresqlConcurrencyTest(postgresqlOpener, ConcurrentDBTest): ConcurrentDBTest.tearDown(self) postgresqlOpener.tearDown(self) -class postgresqlJournalTest(postgresqlOpener, ClassicInitBase): + +class postgresqlJournalTest(postgresqlOpener, ClassicInitBase, + unittest.TestCase): backend = 'postgresql' def setUp(self): postgresqlOpener.setUp(self) @@ -115,7 +121,9 @@ class postgresqlJournalTest(postgresqlOpener, ClassicInitBase): exc = self.module.TransactionRollbackError self.assertRaises(exc, self._test_journal, []) -class postgresqlHTMLItemTest(postgresqlOpener, HTMLItemTest): + +class postgresqlHTMLItemTest(postgresqlOpener, HTMLItemTest, + unittest.TestCase): backend = 'postgresql' def setUp(self): postgresqlOpener.setUp(self) @@ -125,7 +133,9 @@ class postgresqlHTMLItemTest(postgresqlOpener, HTMLItemTest): HTMLItemTest.tearDown(self) postgresqlOpener.tearDown(self) -class postgresqlFilterCacheTest(postgresqlOpener, FilterCacheTest): + +class postgresqlFilterCacheTest(postgresqlOpener, FilterCacheTest, + unittest.TestCase): backend = 'postgresql' def setUp(self): postgresqlOpener.setUp(self) @@ -135,7 +145,8 @@ class postgresqlFilterCacheTest(postgresqlOpener, FilterCacheTest): FilterCacheTest.tearDown(self) postgresqlOpener.tearDown(self) -class postgresqlSchemaTest(postgresqlOpener, SchemaTest): + +class postgresqlSchemaTest(postgresqlOpener, SchemaTest, unittest.TestCase): def setUp(self): postgresqlOpener.setUp(self) SchemaTest.setUp(self) @@ -144,7 +155,9 @@ class postgresqlSchemaTest(postgresqlOpener, SchemaTest): SchemaTest.tearDown(self) postgresqlOpener.tearDown(self) -class postgresqlClassicInitTest(postgresqlOpener, ClassicInitTest): + +class postgresqlClassicInitTest(postgresqlOpener, ClassicInitTest, + unittest.TestCase): backend = 'postgresql' def setUp(self): postgresqlOpener.setUp(self) @@ -154,8 +167,9 @@ class postgresqlClassicInitTest(postgresqlOpener, ClassicInitTest): ClassicInitTest.tearDown(self) postgresqlOpener.tearDown(self) + from session_common import RDBMSTest -class postgresqlSessionTest(postgresqlOpener, RDBMSTest): +class postgresqlSessionTest(postgresqlOpener, RDBMSTest, unittest.TestCase): def setUp(self): postgresqlOpener.setUp(self) RDBMSTest.setUp(self) diff --git a/test/test_security.py b/test/test_security.py index ed6d5d3932..719d834d43 100644 --- a/test/test_security.py +++ b/test/test_security.py @@ -24,7 +24,8 @@ from roundup import backends import roundup.password from db_test_base import setupSchema, MyTestCase, config -class PermissionTest(MyTestCase): + +class PermissionTest(MyTestCase, unittest.TestCase): def setUp(self): backend = backends.get_backend('anydbm') # remove previous test, ignore errors diff --git a/test/test_sqlite.py b/test/test_sqlite.py index 3ca83e33da..f4a07a91bc 100644 --- a/test/test_sqlite.py +++ b/test/test_sqlite.py @@ -28,26 +28,33 @@ class sqliteOpener: def nuke_database(self): shutil.rmtree(config.DATABASE) -class sqliteDBTest(sqliteOpener, DBTest): + +class sqliteDBTest(sqliteOpener, DBTest, unittest.TestCase): pass -class sqliteROTest(sqliteOpener, ROTest): + +class sqliteROTest(sqliteOpener, ROTest, unittest.TestCase): pass -class sqliteSchemaTest(sqliteOpener, SchemaTest): + +class sqliteSchemaTest(sqliteOpener, SchemaTest, unittest.TestCase): pass -class sqliteClassicInitTest(ClassicInitTest): + +class sqliteClassicInitTest(ClassicInitTest, unittest.TestCase): backend = 'sqlite' -class sqliteConcurrencyTest(ConcurrentDBTest): + +class sqliteConcurrencyTest(ConcurrentDBTest, unittest.TestCase): backend = 'sqlite' -class sqliteFilterCacheTest(sqliteOpener, FilterCacheTest): + +class sqliteFilterCacheTest(sqliteOpener, FilterCacheTest, unittest.TestCase): backend = 'sqlite' + from session_common import RDBMSTest -class sqliteSessionTest(sqliteOpener, RDBMSTest): +class sqliteSessionTest(sqliteOpener, RDBMSTest, unittest.TestCase): pass def test_suite(): diff --git a/test/test_tsearch2.py b/test/test_tsearch2.py index 5b16f6380a..a183aaf273 100644 --- a/test/test_tsearch2.py +++ b/test/test_tsearch2.py @@ -37,7 +37,8 @@ class tsearch2Opener: # clear out the database - easiest way is to nuke and re-create it self.module.db_nuke(config) -class tsearch2DBTest(tsearch2Opener, DBTest): + +class tsearch2DBTest(tsearch2Opener, DBTest, unittest.TestCase): def setUp(self): tsearch2Opener.setUp(self) DBTest.setUp(self) @@ -63,7 +64,8 @@ class tsearch2DBTest(tsearch2Opener, DBTest): # checking rollbacks/commits. pass -class tsearch2ROTest(tsearch2Opener, ROTest): + +class tsearch2ROTest(tsearch2Opener, ROTest, unittest.TestCase): def setUp(self): tsearch2Opener.setUp(self) ROTest.setUp(self) @@ -72,7 +74,8 @@ class tsearch2ROTest(tsearch2Opener, ROTest): ROTest.tearDown(self) tsearch2Opener.tearDown(self) -class tsearch2SchemaTest(tsearch2Opener, SchemaTest): + +class tsearch2SchemaTest(tsearch2Opener, SchemaTest, unittest.TestCase): def setUp(self): tsearch2Opener.setUp(self) SchemaTest.setUp(self) @@ -81,7 +84,9 @@ class tsearch2SchemaTest(tsearch2Opener, SchemaTest): SchemaTest.tearDown(self) tsearch2Opener.tearDown(self) -class tsearch2ClassicInitTest(tsearch2Opener, ClassicInitTest): + +class tsearch2ClassicInitTest(tsearch2Opener, ClassicInitTest, + unittest.TestCase): backend = 'tsearch2' def setUp(self): tsearch2Opener.setUp(self) @@ -91,8 +96,9 @@ class tsearch2ClassicInitTest(tsearch2Opener, ClassicInitTest): ClassicInitTest.tearDown(self) tsearch2Opener.tearDown(self) + from session_common import RDBMSTest -class tsearch2SessionTest(tsearch2Opener, RDBMSTest): +class tsearch2SessionTest(tsearch2Opener, RDBMSTest, unittest.TestCase): def setUp(self): tsearch2Opener.setUp(self) RDBMSTest.setUp(self) diff --git a/test/test_xmlrpc.py b/test/test_xmlrpc.py index 2f2d734cf4..af96573e32 100644 --- a/test/test_xmlrpc.py +++ b/test/test_xmlrpc.py @@ -18,7 +18,8 @@ import db_test_base NEEDS_INSTANCE = 1 -class TestCase(unittest.TestCase): + +class XmlrpcTest(object): backend = None @@ -247,12 +248,29 @@ class TestCase(unittest.TestCase): for n, r in enumerate(result): self.assertEqual(r, results[n]) + +class anydbmXmlrpcTest(XmlrpcTest, unittest.TestCase): + backend = 'anydbm' + + +class mysqlXmlrpcTest(XmlrpcTest, unittest.TestCase): + backend = 'mysql' + + +class sqliteXmlrpcTest(XmlrpcTest, unittest.TestCase): + backend = 'sqlite' + + +class postgresqlXmlrpcTest(XmlrpcTest, unittest.TestCase): + backend = 'postgresql' + + def test_suite(): suite = unittest.TestSuite() - for l in list_backends(): - dct = dict(backend = l) - subcls = type(TestCase)('TestCase_%s'%l, (TestCase,), dct) - suite.addTest(unittest.makeSuite(subcls)) + suite.addTest(unittest.makeSuite(anydbmXmlrpcTest)) + suite.addTest(unittest.makeSuite(mysqlXmlrpcTest)) + suite.addTest(unittest.makeSuite(sqilteXmlrpcTest)) + suite.addTest(unittest.makeSuite(postgresqlXmlrpcTest)) return suite if __name__ == '__main__': -- 2.5.0