def _reset_databases(self):
     for key, engine in self.engines.items():
         conn_string = self.test_databases[key]
         conn_pieces = parse.urlparse(conn_string)
         engine.dispose()
         if conn_string.startswith('sqlite'):
             # We can just delete the SQLite database, which is
             # the easiest and cleanest solution
             db_path = conn_pieces.path.strip('/')
             if os.path.exists(db_path):
                 os.unlink(db_path)
             # No need to recreate the SQLite DB. SQLite will
             # create it for us if it's not there...
         elif conn_string.startswith('mysql'):
             # We can execute the MySQL client to destroy and re-create
             # the MYSQL database, which is easier and less error-prone
             # than using SQLAlchemy to do this via MetaData...trust me.
             (user, password, database, host) = \
                 utils.get_db_connection_info(conn_pieces)
             sql = ("drop database if exists %(db)s; "
                    "create database %(db)s;") % {
                        'db': database
                    }
             cmd = ("mysql -u \"%(user)s\" -p\"%(password)s\" -h %(host)s "
                    "-e \"%(sql)s\"") % {
                        'user': user,
                        'password': password,
                        'host': host,
                        'sql': sql
                    }
             self.execute_cmd(cmd)
         elif conn_string.startswith('postgresql'):
             self._reset_pg(conn_pieces)
 def _reset_databases(self):
     for key, engine in self.engines.items():
         conn_string = self.test_databases[key]
         conn_pieces = parse.urlparse(conn_string)
         engine.dispose()
         if conn_string.startswith("sqlite"):
             # We can just delete the SQLite database, which is
             # the easiest and cleanest solution
             db_path = conn_pieces.path.strip("/")
             if os.path.exists(db_path):
                 os.unlink(db_path)
             # No need to recreate the SQLite DB. SQLite will
             # create it for us if it's not there...
         elif conn_string.startswith("mysql"):
             # We can execute the MySQL client to destroy and re-create
             # the MYSQL database, which is easier and less error-prone
             # than using SQLAlchemy to do this via MetaData...trust me.
             (user, password, database, host) = utils.get_db_connection_info(conn_pieces)
             sql = ("drop database if exists %(db)s; " "create database %(db)s;") % {"db": database}
             cmd = ('mysql -u "%(user)s" -p"%(password)s" -h %(host)s ' '-e "%(sql)s"') % {
                 "user": user,
                 "password": password,
                 "host": host,
                 "sql": sql,
             }
             self.execute_cmd(cmd)
         elif conn_string.startswith("postgresql"):
             self._reset_pg(conn_pieces)
    def _reset_pg(self, conn_pieces):
        (user, password, database, host) = utils.get_db_connection_info(conn_pieces)
        os.environ["PGPASSWORD"] = password
        os.environ["PGUSER"] = user
        # note(boris-42): We must create and drop database, we can't
        # drop database which we have connected to, so for such
        # operations there is a special database template1.
        sqlcmd = "psql -w -U %(user)s -h %(host)s -c" " '%(sql)s' -d template1"

        sql = ("drop database if exists %s;") % database
        droptable = sqlcmd % {"user": user, "host": host, "sql": sql}
        self.execute_cmd(droptable)

        sql = ("create database %s;") % database
        createtable = sqlcmd % {"user": user, "host": host, "sql": sql}
        self.execute_cmd(createtable)

        os.unsetenv("PGPASSWORD")
        os.unsetenv("PGUSER")
    def _reset_pg(self, conn_pieces):
        (user, password, database,
         host) = utils.get_db_connection_info(conn_pieces)
        os.environ['PGPASSWORD'] = password
        os.environ['PGUSER'] = user
        # note(boris-42): We must create and drop database, we can't
        # drop database which we have connected to, so for such
        # operations there is a special database template1.
        sqlcmd = ("psql -w -U %(user)s -h %(host)s -c"
                  " '%(sql)s' -d template1")

        sql = ("drop database if exists %s;") % database
        droptable = sqlcmd % {'user': user, 'host': host, 'sql': sql}
        self.execute_cmd(droptable)

        sql = ("create database %s;") % database
        createtable = sqlcmd % {'user': user, 'host': host, 'sql': sql}
        self.execute_cmd(createtable)

        os.unsetenv('PGPASSWORD')
        os.unsetenv('PGUSER')
예제 #5
0
 def test_get_db_connection_info(self):
     conn_pieces = parse.urlparse(self.connect_string)
     self.assertEqual(utils.get_db_connection_info(conn_pieces),
                      ('dude', 'pass', 'test', 'localhost'))