Exemplo n.º 1
0
    def CreateDatabase(self):
        # pylint: disable=unreachable
        user = _GetEnvironOrSkip("MYSQL_TEST_USER")
        host = _GetEnvironOrSkip("MYSQL_TEST_HOST")
        port = _GetEnvironOrSkip("MYSQL_TEST_PORT")
        passwd = _GetEnvironOrSkip("MYSQL_TEST_PASS")
        dbname = "".join(
            random.choice(string.ascii_uppercase + string.digits)
            for _ in range(10))

        connection = MySQLdb.Connect(host=host,
                                     port=port,
                                     user=user,
                                     passwd=passwd)
        cursor = connection.cursor()
        cursor.execute("CREATE DATABASE " + dbname)
        logging.info("Created test database: %s", dbname)

        conn = mysql.MysqlDB(host=host,
                             port=port,
                             user=user,
                             passwd=passwd,
                             db=dbname)

        def Fin():
            cursor.execute("DROP DATABASE " + dbname)
            cursor.close()
            connection.close()
            conn.Close()

        return conn, Fin
Exemplo n.º 2
0
    def _CreateDatabase(cls):

        user = _GetEnvironOrSkip("MYSQL_TEST_USER")
        host = _GetEnvironOrSkip("MYSQL_TEST_HOST")
        port = _GetEnvironOrSkip("MYSQL_TEST_PORT")
        password = _GetEnvironOrSkip("MYSQL_TEST_PASS")
        # Use dash character in database name to break queries that do not quote it.
        database = "test-{}".format(str(uuid.uuid4())[-10])

        conn = mysql.MysqlDB(host=host,
                             port=int(port),
                             user=user,
                             password=password,
                             database=database)
        logging.info("Created test database: %s", database)

        def _Drop(conn):
            with contextlib.closing(conn.cursor()) as cursor:
                cursor.execute("DROP DATABASE `{}`".format(database))

        def Fin():
            conn._RunInTransaction(_Drop)
            conn.Close()

        return conn, Fin
Exemplo n.º 3
0
    def CreateDatabase(self):

        user = _GetEnvironOrSkip("MYSQL_TEST_USER")
        host = _GetEnvironOrSkip("MYSQL_TEST_HOST")
        port = _GetEnvironOrSkip("MYSQL_TEST_PORT")
        password = _GetEnvironOrSkip("MYSQL_TEST_PASS")
        database = "".join(
            random.choice(string.ascii_uppercase + string.digits)
            for _ in range(10))

        conn = mysql.MysqlDB(host=host,
                             port=port,
                             user=user,
                             password=password,
                             database=database)
        logging.info("Created test database: %s", database)

        def _Drop(cursor):
            cursor.execute("DROP DATABASE {}".format(database))

        def Fin():
            conn._RunInTransaction(_Drop)
            conn.Close()

        return conn, Fin
Exemplo n.º 4
0
  def testMaxAllowedPacketSettingIsOverriddenWhenTooLow(self):

    def SetMaxAllowedPacket(conn):
      with contextlib.closing(conn.cursor()) as cursor:
        mysql._SetGlobalVariable("max_allowed_packet", 20 << 10, cursor)

    def GetMaxAllowedPacket(conn):
      with contextlib.closing(conn.cursor()) as cursor:
        return mysql._ReadVariable("max_allowed_packet", cursor)

    self.db.delegate._RunInTransaction(SetMaxAllowedPacket)

    # Initialize a new connection. This should fix the "max_allowed_packet"
    # setting.
    db = mysql.MysqlDB(
        host=self._testdb.hostname(),
        port=self._testdb.port(),
        user=self._testdb.username(),
        password=self._testdb.password(),
        database=self._testdb.dbname())
    db.Close()

    self.assertEqual(
        self.db.delegate._RunInTransaction(GetMaxAllowedPacket),
        str(mysql.MAX_PACKET_SIZE))
Exemplo n.º 5
0
    def testMeaningfulErrorWhenNotEnoughPermissionsToOverrideGlobalVariable(
            self):
        def SetMaxAllowedPacket(conn):
            with contextlib.closing(conn.cursor()) as cursor:
                mysql._SetGlobalVariable("max_allowed_packet", 20 << 10,
                                         cursor)

        self.db.delegate._RunInTransaction(SetMaxAllowedPacket)

        # MaxAllowedPacketSettingTooLowError will be raised since
        # _SetGlobalVariable call will fail (via the mock). This way
        # we mimick the situation when _SetGlobalVariable fails due to
        # the lack of permissions.
        with mock.patch.object(mysql,
                               "_SetGlobalVariable",
                               side_effect=MySQLdb.OperationalError(
                                   "SUPER privileges required")):
            with self.assertRaises(mysql.MaxAllowedPacketSettingTooLowError):
                mysql.MysqlDB(host=self._testdb.hostname(),
                              port=self._testdb.port(),
                              user=self._testdb.username(),
                              password=self._testdb.password(),
                              database=self._testdb.dbname())