def _patch_and_create_keychain( self, *, user: str, service: str, populate: bool, setup_cryptfilekeyring: bool, existing_keyring_path: Optional[str], use_os_credential_store: bool, ): existing_keyring_dir = Path(existing_keyring_path).parent if existing_keyring_path else None temp_dir = existing_keyring_dir or tempfile.mkdtemp(prefix="test_keyring_wrapper") mock_supports_keyring_passphrase_patch = patch("chia.util.keychain.supports_keyring_passphrase") mock_supports_keyring_passphrase = mock_supports_keyring_passphrase_patch.start() # Patch supports_keyring_passphrase() to return True mock_supports_keyring_passphrase.return_value = True mock_supports_os_passphrase_storage_patch = patch("chia.util.keychain.supports_os_passphrase_storage") mock_supports_os_passphrase_storage = mock_supports_os_passphrase_storage_patch.start() # Patch supports_os_passphrase_storage() to return use_os_credential_store mock_supports_os_passphrase_storage.return_value = use_os_credential_store mock_configure_backend_patch = patch.object(KeyringWrapper, "_configure_backend") mock_configure_backend = mock_configure_backend_patch.start() setup_mock_file_keyring(mock_configure_backend, temp_dir, populate=populate) mock_configure_legacy_backend_patch: Any = None if setup_cryptfilekeyring is False: mock_configure_legacy_backend_patch = patch.object(KeyringWrapper, "_configure_legacy_backend") mock_configure_legacy_backend = mock_configure_legacy_backend_patch.start() mock_configure_legacy_backend.return_value = None mock_data_root_patch = patch.object(platform_, "data_root") mock_data_root = mock_data_root_patch.start() # Mock CryptFileKeyring's file_path indirectly by changing keyring.util.platform_.data_root # We don't want CryptFileKeyring finding the real legacy keyring mock_data_root.return_value = temp_dir if setup_cryptfilekeyring is True: crypt_file_keyring = create_empty_cryptfilekeyring() add_dummy_key_to_cryptfilekeyring(crypt_file_keyring) keychain = Keychain(user=user, service=service) keychain.keyring_wrapper = KeyringWrapper(keys_root_path=Path(temp_dir)) # Stash the temp_dir in the keychain instance keychain._temp_dir = temp_dir # type: ignore # Stash the patches in the keychain instance keychain._mock_supports_keyring_passphrase_patch = mock_supports_keyring_passphrase_patch # type: ignore keychain._mock_supports_os_passphrase_storage_patch = mock_supports_os_passphrase_storage_patch # type: ignore keychain._mock_configure_backend_patch = mock_configure_backend_patch # type: ignore keychain._mock_configure_legacy_backend_patch = mock_configure_legacy_backend_patch # type: ignore keychain._mock_data_root_patch = mock_data_root_patch # type: ignore return keychain
def _patch_and_create_keychain(self, user: str, testing: bool, populate: bool, existing_keyring_path: Optional[str]): existing_keyring_dir = Path( existing_keyring_path).parent if existing_keyring_path else None temp_dir = existing_keyring_dir or tempfile.mkdtemp( prefix="test_keyring_wrapper") mock_supports_keyring_passphrase_patch = patch( "chia.util.keychain.supports_keyring_passphrase") mock_supports_keyring_passphrase = mock_supports_keyring_passphrase_patch.start( ) # Patch supports_keyring_passphrase() to return True mock_supports_keyring_passphrase.return_value = True mock_configure_backend_patch = patch.object(KeyringWrapper, "_configure_backend") mock_configure_backend = mock_configure_backend_patch.start() setup_mock_file_keyring(mock_configure_backend, temp_dir, populate=populate) mock_data_root_patch = patch.object(platform_, "data_root") mock_data_root = mock_data_root_patch.start() # Mock CryptFileKeyring's file_path indirectly by changing keyring.util.platform_.data_root # We don't want CryptFileKeyring finding the real legacy keyring mock_data_root.return_value = temp_dir keychain = Keychain(user=user, testing=testing) keychain.keyring_wrapper = KeyringWrapper( keys_root_path=Path(temp_dir)) # Stash the temp_dir in the keychain instance keychain._temp_dir = temp_dir # type: ignore # Stash the patches in the keychain instance keychain._mock_supports_keyring_passphrase_patch = mock_supports_keyring_passphrase_patch # type: ignore keychain._mock_configure_backend_patch = mock_configure_backend_patch # type: ignore keychain._mock_data_root_patch = mock_data_root_patch # type: ignore return keychain