def upgrade(self, directory, dry_run): try: self.checkVersion() except ExceptionDatabaseTooOld: files = [ "%s/%s" % (directory, f) for f in os.listdir(directory) if f[-4:] == '.sql' ] parameters = self.parameters for f in self.version.upgradeChain(version, files): self.log.inform("apply '%s'", f) if not dry_run: fd = open(f) proc = subprocess.Popen(self.mysql_command.split() + [ '-h', parameters['host'], '-u', parameters['user'], '-p' + parameters['password'] ], stdin=fd, stderr=subprocess.PIPE) if proc.wait(): raise ExceptionUpgradeFailed, "upgrade failed" self.log.inform("upgraded database to version %s", version) if not dry_run: self.setVersionInDatabase(version) self.version = Version(self.getVersionFromDatabase())
def upgrade(self, directory, dry_run): try: self.checkVersion() except ExceptionDatabaseTooOld: files = filter(lambda file: ".sql" == file[-4:], os.listdir(directory)) files = map(lambda file: directory + "/" + file, files) parameters = self.parameters mysql = self.mysql_command + " -h '" + parameters[ 'host'] + "' -u '" + parameters[ 'user'] + "' --password='******'password'] + "' '" + parameters['name'] + "'" for file in self.version.upgradeChain(version, files): self.message("apply " + file) if not dry_run: if os.system(mysql + " < " + file): raise ExceptionUpgradeFailed, "upgrade failed" self.message("upgraded database to version %s" % version) if not dry_run: self.setVersionInDatabase(version) self.version = Version(self.getVersionFromDatabase())
def testHandleVersion(self): """Testing handleVersion""" assert self.u._protocol_ok == False, "_protocol_ok : False expected" # Messages should be empty, protocol is not established clear_all_messages() self.u._handleVersion() self.assertEquals(get_messages(), []) assert self.u._protocol_ok == False, "_protocol_ok change unexpected" self.u._packet = list('\n') # Messages should be empty, protocol is not established clear_all_messages() self.u._handleVersion() self.assertEquals(get_messages(), []) assert self.u.transport._loseConnection == True, "loseConnection not called" self.u.transport = FakeTransport() # transport re-init self.u._packet = list('CGI a.b\n') # Messages should be empty, protocol is not established clear_all_messages() self.u._handleVersion() self.assertEquals(get_messages(), []) assert self.u.transport._loseConnection == True, "loseConnection not called" self.u.transport = FakeTransport() # transport re-init vers = Version(protocol_number) PROTOCOL_MAJOR = "%03d" % vers.major() PROTOCOL_MINOR = "%d%02d" % (vers.medium(), vers.minor()) self.u._packet = list('CGI %s.%s \n' % (PROTOCOL_MAJOR, PROTOCOL_MINOR)) clear_all_messages() self.u._handleVersion() self.assertEquals(get_messages(), ["protocol established"]) assert self.u._protocol_ok == True, "_protocol_ok value unexpected"
# "AGPLv3". If not, see <http://www.gnu.org/licenses/>. # # Authors: # Loic Dachary <*****@*****.**> # # from twisted.internet import reactor, protocol from twisted.python.runtime import seconds from pokerpackets.packets import Packet, PacketFactory, PACKET_PING from pokernetwork import protocol_number from pokernetwork.version import Version from pokernetwork import log as network_log log = network_log.get_child('protocol') protocol_version = Version(protocol_number) PROTOCOL_MAJOR = "%03d" % protocol_version.major() PROTOCOL_MINOR = "%d%02d" % (protocol_version.medium(), protocol_version.minor()) class Queue: def __init__(self): self.delay = 0 self.packets = [] class UGAMEProtocol(protocol.Protocol): """UGAMEProtocol"""
def __init__(self, settings): self.verbose = settings.headerGetInt("/server/@verbose") self.parameters = settings.headerGetProperties("/server/database")[0] self.mysql_command = settings.headerGet("/server/database/@command") try: self.db = MySQLdb.connect(host=self.parameters["host"], port=int( self.parameters.get("port", '3306')), user=self.parameters["user"], passwd=self.parameters["password"], db=self.parameters["name"]) if self.verbose > 2: self.message("MySQL server version is " + self.db.get_server_info()) except: if self.parameters.has_key('root_user'): if self.verbose: self.message("connecting as root user '" + self.parameters["root_user"] + "'") db = MySQLdb.connect(host=self.parameters["host"], port=int( self.parameters.get("port", '3306')), user=self.parameters["root_user"], passwd=self.parameters["root_password"]) if self.verbose: self.message("MySQL server version is " + db.get_server_info()) if int(db.get_server_info().split('.')[0]) < 5: raise UserWarning, "PokerDatabase: MySQL server version is " + db.get_server_info( ) + " but version >= 5.0 is required" db.query("SHOW DATABASES LIKE '" + self.parameters["name"] + "'") result = db.store_result() # # It may be because the database does not exist # if result.num_rows() <= 0: if self.verbose: self.message("creating database " + self.parameters["name"]) if not exists(self.parameters["schema"]): db.close() raise UserWarning, "PokerDatabase: schema " + self.parameters[ "schema"] + " file not found" del result db.query("CREATE DATABASE " + self.parameters["name"]) if self.verbose: self.message("populating database from " + self.parameters["schema"]) cmd = self.mysql_command + " --host='" + self.parameters[ "host"] + "' --user='******' --password='******' '" + self.parameters[ "name"] + "' < " + self.parameters["schema"] if self.verbose: self.message(cmd) os.system(cmd) db.select_db("mysql") # # Or because the user does not exist # try: sql = "CREATE USER '" + self.parameters[ 'user'] + "'@'%' IDENTIFIED BY '" + self.parameters[ 'password'] + "'" if self.verbose > 2: self.message(sql) db.query(sql) sql = "CREATE USER '" + self.parameters[ 'user'] + "'@'localhost' IDENTIFIED BY '" + self.parameters[ 'password'] + "'" if self.verbose > 2: self.message(sql) db.query(sql) db.query("FLUSH PRIVILEGES") if self.verbose: self.message("created database user " + self.parameters["user"]) except: if self.verbose > 3: self.message(format_exc()) if self.verbose: self.message("poker user '" + self.parameters["user"] + "' already exists") # # Or because the user does not have permission # db.query("GRANT ALL ON `" + self.parameters['name'] + "`.* TO '" + self.parameters['user'] + "'@'%'") db.query("FLUSH PRIVILEGES") db.close() if self.verbose: self.message("granted privilege to " + self.parameters["user"] + "' for database '" + self.parameters['name'] + "'") else: if self.verbose: self.message( "root_user is not defined in the self.parameters, cannot create schema database" ) self.db = MySQLdb.connect(host=self.parameters["host"], port=int( self.parameters.get("port", '3306')), user=self.parameters["user"], passwd=self.parameters["password"], db=self.parameters["name"]) if self.verbose: self.message("PokerDatabase: Database connection to %s/%s open" % (self.parameters["host"], self.parameters["name"])) self.db.query("SET AUTOCOMMIT = 1") self.version = Version(self.getVersionFromDatabase()) if self.verbose: self.message("PokerDatabase: database version %s" % self.version)