def add_cell_database(self, connection_str, default=False): """Add a cell database to the fixture. :param connection_str: An identifier used to represent the connection string for this database. It should match the database_connection field in the corresponding CellMapping. """ # NOTE(danms): Create a new context manager for the cell, which # will house the sqlite:// connection for this cell's in-memory # database. Store/index it by the connection string, which is # how we identify cells in CellMapping. ctxt_mgr = session.create_context_manager() self._ctxt_mgrs[connection_str] = ctxt_mgr # NOTE(melwitt): The first DB access through service start is # local so this initializes _last_ctxt_mgr for that and needs # to be a compute cell. self._last_ctxt_mgr = ctxt_mgr # NOTE(danms): Record which context manager should be the default # so we can restore it when we return from target-cell contexts. # If none has been provided yet, store the current one in case # no default is ever specified. if self._default_ctxt_mgr is None or default: self._default_ctxt_mgr = ctxt_mgr def get_context_manager(context): return ctxt_mgr # NOTE(danms): This is a temporary MonkeyPatch just to get # a new database created with the schema we need and the # context manager for it stashed. with fixtures.MonkeyPatch( 'nova.db.sqlalchemy.api.get_context_manager', get_context_manager): self._cache_schema(connection_str) engine = ctxt_mgr.get_legacy_facade().get_engine() engine.dispose() conn = engine.connect() conn.connection.executescript(DB_SCHEMA['main'])
def add_cell_database(self, connection_str, default=False): """Add a cell database to the fixture. :param connection_str: An identifier used to represent the connection string for this database. It should match the database_connection field in the corresponding CellMapping. """ # NOTE(danms): Create a new context manager for the cell, which # will house the sqlite:// connection for this cell's in-memory # database. Store/index it by the connection string, which is # how we identify cells in CellMapping. ctxt_mgr = session.create_context_manager() self._ctxt_mgrs[connection_str] = ctxt_mgr # NOTE(melwitt): The first DB access through service start is # local so this initializes _last_ctxt_mgr for that and needs # to be a compute cell. self._last_ctxt_mgr = ctxt_mgr # NOTE(danms): Record which context manager should be the default # so we can restore it when we return from target-cell contexts. # If none has been provided yet, store the current one in case # no default is ever specified. if self._default_ctxt_mgr is None or default: self._default_ctxt_mgr = ctxt_mgr def get_context_manager(context): return ctxt_mgr # NOTE(danms): This is a temporary MonkeyPatch just to get # a new database created with the schema we need and the # context manager for it stashed. with fixtures.MonkeyPatch( 'nova.db.sqlalchemy.api.get_context_manager', get_context_manager): self._cache_schema(connection_str) engine = ctxt_mgr.get_legacy_facade().get_engine() engine.dispose() conn = engine.connect() conn.connection.executescript(DB_SCHEMA['main'])
def __init__(self, database="main", connection=None): """Create a database fixture. :param database: The type of database, 'main' or 'api' :param connection: The connection string to use """ super(Database, self).__init__() # NOTE(pkholkin): oslo_db.enginefacade is configured in tests the same # way as it is done for any other service that uses db global SESSION_CONFIGURED if not SESSION_CONFIGURED: session.configure(CONF) SESSION_CONFIGURED = True self.database = database if database == "main": if connection is not None: ctxt_mgr = session.create_context_manager(connection=connection) facade = ctxt_mgr.get_legacy_facade() self.get_engine = facade.get_engine else: self.get_engine = session.get_engine elif database == "api": self.get_engine = session.get_api_engine
def __init__(self, database='main', connection=None): """Create a database fixture. :param database: The type of database, 'main' or 'api' :param connection: The connection string to use """ super(Database, self).__init__() # NOTE(pkholkin): oslo_db.enginefacade is configured in tests the same # way as it is done for any other service that uses db global SESSION_CONFIGURED if not SESSION_CONFIGURED: session.configure(CONF) SESSION_CONFIGURED = True self.database = database if database == 'main': if connection is not None: ctxt_mgr = session.create_context_manager( connection=connection) facade = ctxt_mgr.get_legacy_facade() self.get_engine = facade.get_engine else: self.get_engine = session.get_engine elif database == 'api': self.get_engine = session.get_api_engine