def setUp(self):
        db_configs = []
        for engine in _get_installed_database_engines():
            config = TestDatabaseConfiguration(protocol=engine)
            db_configs.append(config)

        self.test_db = 'OpusDatabaseTestDatabase'
        test_table = 'test_table'

        self.dbs = []
        for config in db_configs:
            try:
                server = DatabaseServer(config)
                if server.has_database(self.test_db):
                    server.drop_database(self.test_db)
                server.create_database(self.test_db)
                self.assertTrue(
                    server.has_database(database_name=self.test_db))
                db = OpusDatabase(database_server_configuration=config,
                                  database_name=self.test_db)
                self.assertFalse(db.table_exists(test_table))
                self.dbs.append((db, server))
            except:
                import traceback
                traceback.print_exc()

                logger.log_warning('Could not start server for protocol %s' %
                                   config.protocol)
    def setUp(self):
        db_configs = []
        for engine in _get_installed_database_engines():
            config = TestDatabaseConfiguration(protocol=engine)
            db_configs.append(config)

        self.test_db = "OpusDatabaseTestDatabase"
        test_table = "test_table"

        self.dbs = []
        for config in db_configs:
            try:
                server = DatabaseServer(config)
                if server.has_database(self.test_db):
                    server.drop_database(self.test_db)
                server.create_database(self.test_db)
                self.assertTrue(server.has_database(database_name=self.test_db))
                db = OpusDatabase(database_server_configuration=config, database_name=self.test_db)
                self.assertFalse(db.table_exists(test_table))
                self.dbs.append((db, server))
            except:
                import traceback

                traceback.print_exc()

                logger.log_warning("Could not start server for protocol %s" % config.protocol)
def get_testable_engines():
    engines = []
    for engine in _get_installed_database_engines():
        try:
            TestDatabaseConfiguration(protocol = engine)
        except:
            pass
        else:
            engines.append(engine)
    return engines
                 ).communicate()        

    def _two_caches_are_identical(self, cache_a, cache_b, table_names=None):
        """ Check to see if two caches contains identical datasets 
        even though their data types can be different
        """
        if table_names is None:
            table_names = os.listdir(cache_a)
        for table_name in table_names:
            field_names_a = glob(os.path.join(cache_a, table_name) + '/*')
            field_names_b = glob(os.path.join(cache_b, table_name) + '/*')
            self.assertEqual(len(field_names_a), len(field_names_b))
            field_names_a.sort(); field_names_b.sort()
            [self.assertTrue(cmp(f_a, f_b)) for f_a, f_b in zip(field_names_a, field_names_b)]        
        
installed_engines = _get_installed_database_engines()

if 'sqlite' in installed_engines:
    class Testsqlite(AbstractFunctionalTest, opus_unittest.OpusTestCase):
        protocol = 'sqlite'

if 'mysql' in installed_engines:
    class Testmysql(AbstractFunctionalTest, opus_unittest.OpusTestCase):
        protocol = 'mysql'

## Masked tests for postgres until we have a test server running
#if 'postgres' in installed_engines:
#    class Testposgres(AbstractFunctionalTest, opus_unittest.OpusTestCase):
#        protocol = 'postgres'
        
if __name__=="__main__":
        """
        if table_names is None:
            table_names = os.listdir(cache_a)
        for table_name in table_names:
            field_names_a = glob(os.path.join(cache_a, table_name) + '/*')
            field_names_b = glob(os.path.join(cache_b, table_name) + '/*')
            self.assertEqual(len(field_names_a), len(field_names_b))
            field_names_a.sort()
            field_names_b.sort()
            [
                self.assertTrue(cmp(f_a, f_b))
                for f_a, f_b in zip(field_names_a, field_names_b)
            ]


installed_engines = _get_installed_database_engines()

if 'sqlite' in installed_engines:

    class Testsqlite(AbstractFunctionalTest, opus_unittest.OpusTestCase):
        protocol = 'sqlite'


if 'mysql' in installed_engines:

    class Testmysql(AbstractFunctionalTest, opus_unittest.OpusTestCase):
        protocol = 'mysql'


## Masked tests for postgres until we have a test server running
#if 'postgres' in installed_engines: