[Neo-report] r2821 jm - in /trunk/neo/tests: ./ functional/ threaded/
nobody at svn.erp5.org
nobody at svn.erp5.org
Mon Sep 5 18:24:44 CEST 2011
Author: jm
Date: Mon Sep 5 18:24:44 2011
New Revision: 2821
Log:
tests: refactor and fix setup of MySQL DB
Modified:
trunk/neo/tests/__init__.py
trunk/neo/tests/functional/__init__.py
trunk/neo/tests/threaded/__init__.py
Modified: trunk/neo/tests/__init__.py
==============================================================================
--- trunk/neo/tests/__init__.py [iso-8859-1] (original)
+++ trunk/neo/tests/__init__.py [iso-8859-1] Mon Sep 5 18:24:44 2011
@@ -32,9 +32,9 @@ from neo.lib.util import getAddressType
from time import time, gmtime
from struct import pack, unpack
-DB_PREFIX = os.getenv('NEO_DB_PREFIX', 'test_neo_')
+DB_PREFIX = os.getenv('NEO_DB_PREFIX', 'test_neo')
DB_ADMIN = os.getenv('NEO_DB_ADMIN', 'root')
-DB_PASSWD = os.getenv('NEO_DB_PASSWD', None)
+DB_PASSWD = os.getenv('NEO_DB_PASSWD', '')
DB_USER = os.getenv('NEO_DB_USER', 'test')
IP_VERSION_FORMAT_DICT = {
@@ -88,6 +88,26 @@ def getTempDirectory():
print 'Using temp directory %r.' % temp_dir
return temp_dir
+def setupMySQLdb(db_list, user=DB_USER, password='', clear_databases=True):
+ from MySQLdb.constants.ER import BAD_DB_ERROR
+ conn = MySQLdb.Connect(user=DB_ADMIN, passwd=DB_PASSWD)
+ cursor = conn.cursor()
+ for database in db_list:
+ try:
+ conn.select_db(database)
+ if not clear_databases:
+ continue
+ cursor.execute('DROP DATABASE `%s`' % database)
+ except MySQLdb.OperationalError, (code, _):
+ if code != BAD_DB_ERROR:
+ raise
+ cursor.execute('GRANT ALL ON `%s`.* TO "%s"@"localhost" IDENTIFIED'
+ ' BY "%s"' % (database, user, password))
+ cursor.execute('CREATE DATABASE `%s`' % database)
+ cursor.close()
+ conn.commit()
+ conn.close()
+
class NeoTestBase(unittest.TestCase):
def setUp(self):
logger.PACKET_LOGGER.enable(True)
@@ -123,24 +143,9 @@ class NeoUnitTestBase(NeoTestBase):
local_ip = IP_VERSION_FORMAT_DICT[ADDRESS_TYPE]
- def prepareDatabase(self, number, admin=DB_ADMIN, password=DB_PASSWD,
- user=DB_USER, prefix=DB_PREFIX, address_type = ADDRESS_TYPE):
+ def prepareDatabase(self, number, prefix='test_neo'):
""" create empties databases """
- # SQL connection
- connect_arg_dict = {'user': admin}
- if password is not None:
- connect_arg_dict['passwd'] = password
- sql_connection = MySQLdb.Connect(**connect_arg_dict)
- cursor = sql_connection.cursor()
- # drop and create each database
- for i in xrange(number):
- database = "%s%d" % (prefix, i)
- cursor.execute('DROP DATABASE IF EXISTS %s' % (database, ))
- cursor.execute('CREATE DATABASE %s' % (database, ))
- cursor.execute('GRANT ALL ON %s.* TO "%s"@"localhost" IDENTIFIED BY ""' %
- (database, user))
- cursor.close()
- sql_connection.close()
+ setupMySQLdb(['%s%u' % (prefix, i) for i in xrange(number)])
def getMasterConfiguration(self, cluster='main', master_number=2,
replicas=2, partitions=1009, uuid=None):
Modified: trunk/neo/tests/functional/__init__.py
==============================================================================
--- trunk/neo/tests/functional/__init__.py [iso-8859-1] (original)
+++ trunk/neo/tests/functional/__init__.py [iso-8859-1] Mon Sep 5 18:24:44 2011
@@ -37,7 +37,7 @@ from neo.neoctl.neoctl import NeoCTL, No
from neo.lib import setupLog
from neo.lib.protocol import ClusterStates, NodeTypes, CellStates, NodeStates
from neo.lib.util import dump
-from neo.tests import DB_ADMIN, DB_PASSWD, NeoTestBase, buildUrlFromString, \
+from neo.tests import DB_USER, setupMySQLdb, NeoTestBase, buildUrlFromString, \
ADDRESS_TYPE, IP_VERSION_FORMAT_DICT, getTempDirectory
from neo.tests.cluster import SocketLock
from neo.client.Storage import Storage
@@ -230,8 +230,7 @@ class NEOProcess(object):
class NEOCluster(object):
def __init__(self, db_list, master_count=1, partitions=1, replicas=0,
- db_user='neo', db_password='neo',
- db_super_user=DB_ADMIN, db_super_password=DB_PASSWD,
+ db_user=DB_USER, db_password='',
cleanup_on_delete=False, temp_dir=None, clear_databases=True,
adapter=os.getenv('NEO_TESTS_ADAPTER'),
verbose=True,
@@ -244,8 +243,6 @@ class NEOCluster(object):
self.cleanup_on_delete = cleanup_on_delete
self.verbose = verbose
self.uuid_set = set()
- self.db_super_user = db_super_user
- self.db_super_password = db_super_password
self.db_user = db_user
self.db_password = db_password
self.db_list = db_list
@@ -316,36 +313,10 @@ class NEOCluster(object):
self.uuid_set.add(uuid)
return uuid
- def __getSuperSQLConnection(self):
- # Cleanup or bootstrap databases
- connect_arg_dict = {'user': self.db_super_user}
- password = self.db_super_password
- if password is not None:
- connect_arg_dict['passwd'] = password
- return MySQLdb.Connect(**connect_arg_dict)
-
def setupDB(self, clear_databases=True):
if self.adapter == 'MySQL':
- from MySQLdb.constants.ER import DB_CREATE_EXISTS
- sql_connection = self.__getSuperSQLConnection()
- cursor = sql_connection.cursor()
- for database in self.db_list:
- create = 'CREATE DATABASE `%s`' % database
- try:
- cursor.execute(create)
- except MySQLdb.ProgrammingError, (code, _):
- if code != DB_CREATE_EXISTS:
- raise
- if clear_databases:
- cursor.execute('DROP DATABASE `%s`' % database)
- cursor.execute(create)
- continue
- cursor.execute('GRANT ALL ON `%s`.* TO "%s"@"localhost" '
- 'IDENTIFIED BY "%s"' % (database, self.db_user,
- self.db_password))
- cursor.close()
- sql_connection.commit()
- sql_connection.close()
+ setupMySQLdb(self.db_list, self.db_user, self.db_password,
+ clear_databases)
def run(self, except_storages=()):
""" Start cluster processes except some storage nodes """
Modified: trunk/neo/tests/threaded/__init__.py
==============================================================================
--- trunk/neo/tests/threaded/__init__.py [iso-8859-1] (original)
+++ trunk/neo/tests/threaded/__init__.py [iso-8859-1] Mon Sep 5 18:24:44 2011
@@ -32,8 +32,8 @@ from neo.lib.connector import SocketConn
from neo.lib.event import EventManager
from neo.lib.protocol import CellStates, ClusterStates, NodeStates, NodeTypes
from neo.lib.util import SOCKET_CONNECTORS_DICT, parseMasterList
-from neo.tests import NeoUnitTestBase, getTempDirectory, \
- ADDRESS_TYPE, IP_VERSION_FORMAT_DICT
+from neo.tests import NeoUnitTestBase, getTempDirectory, setupMySQLdb, \
+ ADDRESS_TYPE, IP_VERSION_FORMAT_DICT, DB_PREFIX, DB_USER
BIND = IP_VERSION_FORMAT_DICT[ADDRESS_TYPE], 0
LOCAL_IP = socket.inet_pton(ADDRESS_TYPE, IP_VERSION_FORMAT_DICT[ADDRESS_TYPE])
@@ -354,7 +354,7 @@ class NEOCluster(object):
def __init__(self, master_count=1, partitions=1, replicas=0,
adapter=os.getenv('NEO_TESTS_ADAPTER', 'BTree'),
storage_count=None, db_list=None, clear_databases=True,
- db_user='neo', db_password='neo', verbose=None):
+ db_user=DB_USER, db_password='', verbose=None):
if verbose is not None:
temp_dir = os.getenv('TEMP') or \
os.path.join(tempfile.gettempdir(), 'neo_tests')
@@ -374,7 +374,8 @@ class NEOCluster(object):
if db_list is None:
if storage_count is None:
storage_count = replicas + 1
- db_list = ['test_neo%u' % i for i in xrange(storage_count)]
+ db_list = ['%s%u' % (DB_PREFIX, i) for i in xrange(storage_count)]
+ setupMySQLdb(db_list, db_user, db_password, clear_databases)
db = '%s:%s@%%s' % (db_user, db_password)
self.storage_list = [StorageApplication(address=(ip, i),
getDatabase=db % x, **kw)
More information about the Neo-report
mailing list