aiida.manage.tests package#
Testing infrastructure for easy testing of AiiDA plugins.
Submodules#
Testing infrastructure for easy testing of AiiDA plugins.
- class aiida.manage.tests.main.ProfileManager(profile_name)[source]#
Bases:
object
Wraps existing AiiDA profile.
- __dict__ = mappingproxy({'__module__': 'aiida.manage.tests.main', '__doc__': '\n Wraps existing AiiDA profile.\n ', '__init__': <function ProfileManager.__init__>, 'clear_profile': <staticmethod object>, 'has_profile_open': <function ProfileManager.has_profile_open>, 'destroy_all': <function ProfileManager.destroy_all>, '__dict__': <attribute '__dict__' of 'ProfileManager' objects>, '__weakref__': <attribute '__weakref__' of 'ProfileManager' objects>, '__annotations__': {}})#
- __init__(profile_name)[source]#
Use an existing profile.
- Parameters
profile_name – Name of the profile to be loaded
- __module__ = 'aiida.manage.tests.main'#
- __weakref__#
list of weak references to the object (if defined)
- class aiida.manage.tests.main.TemporaryProfileManager(backend='core.psql_dos', pgtest=None)[source]#
Bases:
aiida.manage.tests.main.ProfileManager
Manage the life cycle of a completely separated and temporary AiiDA environment.
No profile / database setup required
Tests run via the TemporaryProfileManager never pollute the user’s working environment
Filesystem:
temporary
.aiida
configuration foldertemporary repository folder
Database:
temporary database cluster (via the
pgtest
package)with
aiida
database userwith
aiida_db
database
AiiDA:
configured to use the temporary configuration
sets up a temporary profile for tests
All of this happens automatically when using the corresponding tests classes & tests runners (unittest) or fixtures (pytest).
Example:
tests = TemporaryProfileManager(backend=backend) tests.create_aiida_db() # set up only the database tests.create_profile() # set up a profile (creates the db too if necessary) # ready for tests # run tests 1 tests.clear_profile() # database ready for independent tests 2 # run tests 2 tests.destroy_all() # everything cleaned up
- __init__(backend='core.psql_dos', pgtest=None)[source]#
Construct a TemporaryProfileManager
- Parameters
backend – a database backend
pgtest – a dictionary of arguments to be passed to PGTest() for starting the postgresql cluster, e.g. {‘pg_ctl’: ‘/somepath/pg_ctl’}. Should usually not be necessary.
- __module__ = 'aiida.manage.tests.main'#
- property backend#
- property config_dir#
- property config_dir_ok#
- create_profile()[source]#
Set AiiDA to use the tests config dir and create a default profile there
Warning: the AiiDA dbenv must not be loaded when this is called!
- property profile_dictionary#
Profile parameters.
Used to set up AiiDA profile from self.profile_info dictionary.
- property repo#
- property root_dir#
- property root_dir_ok#
- class aiida.manage.tests.main.TestManager[source]#
Bases:
object
Test manager for plugin tests.
Uses either ProfileManager for wrapping an existing profile or TemporaryProfileManager for setting up a complete temporary AiiDA environment.
For usage with pytest, see
pytest_fixtures
.- __dict__ = mappingproxy({'__module__': 'aiida.manage.tests.main', '__doc__': '\n Test manager for plugin tests.\n\n Uses either ProfileManager for wrapping an existing profile or TemporaryProfileManager for setting up a complete\n temporary AiiDA environment.\n\n For usage with pytest, see :py:class:`~aiida.manage.tests.pytest_fixtures`.\n ', '__init__': <function TestManager.__init__>, 'manager': <property object>, 'use_temporary_profile': <function TestManager.use_temporary_profile>, 'use_profile': <function TestManager.use_profile>, 'has_profile_open': <function TestManager.has_profile_open>, 'reset_db': <function TestManager.reset_db>, 'clear_profile': <function TestManager.clear_profile>, 'destroy_all': <function TestManager.destroy_all>, '__dict__': <attribute '__dict__' of 'TestManager' objects>, '__weakref__': <attribute '__weakref__' of 'TestManager' objects>, '__annotations__': {}})#
- __module__ = 'aiida.manage.tests.main'#
- __weakref__#
list of weak references to the object (if defined)
- clear_profile()[source]#
Reset the global profile, clearing all its data and closing any open resources.
- property manager: aiida.manage.tests.main.ProfileManager#
- use_profile(profile_name)[source]#
Set up Test manager to use existing profile.
Uses
aiida.manage.tests.main.ProfileManager
internally.- Parameters
profile_name – Name of existing test profile to use.
- use_temporary_profile(backend=None, pgtest=None)[source]#
Set up Test manager to use temporary AiiDA profile.
Uses
aiida.manage.tests.main.TemporaryProfileManager
internally.- Parameters
backend – Backend to use.
pgtest – a dictionary of arguments to be passed to PGTest() for starting the postgresql cluster, e.g. {‘pg_ctl’: ‘/somepath/pg_ctl’}. Should usually not be necessary.
- exception aiida.manage.tests.main.TestManagerError(msg)[source]#
Bases:
Exception
Raised by TestManager in situations that may lead to inconsistent behaviour.
- __module__ = 'aiida.manage.tests.main'#
- __weakref__#
list of weak references to the object (if defined)
- aiida.manage.tests.main.get_test_backend_name() str [source]#
Read name of storage backend from environment variable or the specified test profile.
Reads storage backend from ‘AIIDA_TEST_BACKEND’ environment variable, or the backend configured for the ‘AIIDA_TEST_PROFILE’.
- Returns
name of storage backend
- Raises
ValueError if unknown backend name detected.
- Raises
ValueError if both ‘AIIDA_TEST_BACKEND’ and ‘AIIDA_TEST_PROFILE’ are set, and the two backends do not match.
- aiida.manage.tests.main.get_test_profile_name()[source]#
Read name of test profile from environment variable.
Reads name of existing test profile ‘AIIDA_TEST_PROFILE’ environment variable. If specified, this profile is used for running the tests (instead of setting up a temporary profile).
- Returns
content of environment variable or None
- aiida.manage.tests.main.get_user_dict(profile_dict)[source]#
Collect parameters required for creating users.
- aiida.manage.tests.main.test_manager(backend='core.psql_dos', profile_name=None, pgtest=None)[source]#
Context manager for TestManager objects.
Sets up temporary AiiDA environment for testing or reuses existing environment, if AIIDA_TEST_PROFILE environment variable is set.
Example pytest fixture:
def aiida_profile(): with test_manager(backend) as test_mgr: yield fixture_mgr
Example unittest test runner:
with test_manager(backend) as test_mgr: # ready for tests # everything cleaned up
- Parameters
backend – storage backend type name
profile_name – name of test profile to be used or None (to use temporary profile)
pgtest – a dictionary of arguments to be passed to PGTest() for starting the postgresql cluster, e.g. {‘pg_ctl’: ‘/somepath/pg_ctl’}. Should usually not be necessary.
Collection of pytest fixtures using the TestManager for easy testing of AiiDA plugins.
- class aiida.manage.tests.pytest_fixtures.EntryPointManager[source]#
Bases:
object
Manager to temporarily add or remove entry points.
- __dict__ = mappingproxy({'__module__': 'aiida.manage.tests.pytest_fixtures', '__doc__': 'Manager to temporarily add or remove entry points.', 'eps': <staticmethod object>, '_validate_entry_point': <staticmethod object>, 'add': <FunctionWrapper at 0x7f84156142e0 for function>, 'remove': <FunctionWrapper at 0x7f8415614340 for function>, '__dict__': <attribute '__dict__' of 'EntryPointManager' objects>, '__weakref__': <attribute '__weakref__' of 'EntryPointManager' objects>, '__annotations__': {}})#
- __module__ = 'aiida.manage.tests.pytest_fixtures'#
- __weakref__#
list of weak references to the object (if defined)
- static _validate_entry_point(entry_point_string: str | None, group: str | None, name: str | None) tuple[str, str] [source]#
Validate the definition of the entry point.
- Parameters
entry_point_string – Fully qualified entry point string.
name – Entry point name.
group – Entry point group.
- Returns
The entry point group and name.
- Raises
TypeError – If entry_point_string, group or name are not a string, when defined.
ValueError – If entry_point_string is not defined, nor a group and name.
ValueError – If entry_point_string is not a complete entry point string with group and name.
- add(value: type | str, entry_point_string: str | None = None, *, name: str | None = None, group: str | None = None) None [source]#
Add an entry point.
- Parameters
value – The class or function to register as entry point. The resource needs to be importable, so it can’t be inlined. Alternatively, the fully qualified name can be passed as a string.
entry_point_string – Fully qualified entry point string.
name – Entry point name.
group – Entry point group.
- Returns
The entry point group and name.
- Raises
TypeError – If entry_point_string, group or name are not a string, when defined.
ValueError – If entry_point_string is not defined, nor a group and name.
ValueError – If entry_point_string is not a complete entry point string with group and name.
- remove(entry_point_string: str | None = None, *, name: str | None = None, group: str | None = None) None [source]#
Remove an entry point.
- Parameters
value – Entry point value, fully qualified import path name.
entry_point_string – Fully qualified entry point string.
name – Entry point name.
group – Entry point group.
- Returns
The entry point group and name.
- Raises
TypeError – If entry_point_string, group or name are not a string, when defined.
ValueError – If entry_point_string is not defined, nor a group and name.
ValueError – If entry_point_string is not a complete entry point string with group and name.
- aiida.manage.tests.pytest_fixtures.aiida_caplog(caplog)[source]#
A copy of pytest’s caplog fixture, which allows
AIIDA_LOGGER
to propagate.
- aiida.manage.tests.pytest_fixtures.aiida_local_code_factory(aiida_localhost)[source]#
Get an AiiDA code on localhost.
Searches in the PATH for a given executable and creates an AiiDA code with provided entry point.
Usage:
def test_1(aiida_local_code_factory): code = aiida_local_code_factory('quantumespresso.pw', '/usr/bin/pw.x') # use code for testing ...
- Returns
A function get_code(entry_point, executable) that returns the Code node.
- Return type
- aiida.manage.tests.pytest_fixtures.aiida_localhost(tmp_path)[source]#
Get an AiiDA computer for localhost.
Usage:
def test_1(aiida_localhost): label = aiida_localhost.label # proceed to set up code or use 'aiida_local_code_factory' instead
- Returns
The computer node
- Return type
- aiida.manage.tests.pytest_fixtures.aiida_profile()[source]#
Set up AiiDA test profile for the duration of the tests.
- Note: scope=’session’ limits this fixture to run once per session. Thanks to
autouse=True
, you don’t actually need to depend on it explicitly - it will activate as soon as you import it in your
conftest.py
.
- Note: scope=’session’ limits this fixture to run once per session. Thanks to
- aiida.manage.tests.pytest_fixtures.aiida_profile_clean(aiida_profile)[source]#
Provide an AiiDA test profile, with the storage reset at test function setup.
- aiida.manage.tests.pytest_fixtures.aiida_profile_clean_class(aiida_profile)[source]#
Provide an AiiDA test profile, with the storage reset at test class setup.
- aiida.manage.tests.pytest_fixtures.clear_database(clear_database_after_test)[source]#
Alias for ‘clear_database_after_test’.
Clears the database after each test. Use of the explicit ‘clear_database_after_test’ is preferred.
- aiida.manage.tests.pytest_fixtures.clear_database_after_test(aiida_profile)[source]#
Clear the database after the test.
- aiida.manage.tests.pytest_fixtures.clear_database_before_test(aiida_profile)[source]#
Clear the database before the test.
- aiida.manage.tests.pytest_fixtures.clear_database_before_test_class(aiida_profile)[source]#
Clear the database before a test class.
- aiida.manage.tests.pytest_fixtures.daemon_client(aiida_profile)[source]#
Return a daemon client for the configured test profile for the test session.
The daemon will be automatically stopped at the end of the test session.
- aiida.manage.tests.pytest_fixtures.entry_points(monkeypatch) aiida.manage.tests.pytest_fixtures.EntryPointManager [source]#
Return an instance of the
EntryPointManager
which allows to temporarily add or remove entry points.This fixture creates a deep copy of the entry point cache returned by the
aiida.plugins.entry_point.eps()
method and then monkey patches that function to return the deepcopy. This ensures that the changes on the entry point cache performed during the test through the manager are undone at the end of the function scope.Note
This fixture does not use the
suppress_deprecations
decorator on purpose, but instead adds it manually inside the fixture’s body. The reason is that otherwise all deprecations would be suppressed for the entire scope of the fixture, including those raised by the code run in the test using the fixture, which is not desirable.
- aiida.manage.tests.pytest_fixtures.started_daemon_client(daemon_client)[source]#
Ensure that the daemon is running for the test profile and return the associated client.
- aiida.manage.tests.pytest_fixtures.stopped_daemon_client(daemon_client)[source]#
Ensure that the daemon is not running for the test profile and return the associated client.
- aiida.manage.tests.pytest_fixtures.submit_and_await(started_daemon_client)[source]#
Submit a process and wait for it to achieve the given state.
- aiida.manage.tests.pytest_fixtures.suppress_deprecations(wrapper=None, enabled=None, adapter=None, proxy=<class 'FunctionWrapper'>)[source]#
Decorator that suppresses all
DeprecationWarning
.