Import AITURK IDE 1.0.0-beta.1 from Hermes 63279301; preserve MIT license
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
"""Matrix crypto store must be pinned per profile at connect(), not at import.
|
||||
|
||||
Under ``gateway.multiplex_profiles`` one process imports
|
||||
``plugins.platforms.matrix.adapter`` once; the old module-level
|
||||
``_STORE_DIR``/``_CRYPTO_DB_PATH`` resolved against the root HERMES_HOME at
|
||||
import time, so every profile's adapter opened the SAME crypto.db and inbound
|
||||
E2EE failed with "no session found" (#89168). ``connect()`` calls
|
||||
``_resolve_store_dir()`` inside ``_profile_runtime_scope`` (context-local
|
||||
HERMES_HOME), so resolving there -- and caching on the instance -- gives each
|
||||
profile its own store. Exercised via ``_resolve_store_dir`` directly so the
|
||||
test needs no mautrix install.
|
||||
"""
|
||||
from gateway.config import PlatformConfig
|
||||
from hermes_constants import reset_hermes_home_override, set_hermes_home_override
|
||||
from plugins.platforms.matrix import adapter as matrix_adapter
|
||||
|
||||
|
||||
def _make_adapter() -> matrix_adapter.MatrixAdapter:
|
||||
return matrix_adapter.MatrixAdapter(
|
||||
PlatformConfig(
|
||||
enabled=True,
|
||||
token="syt_test_token",
|
||||
extra={"homeserver": "https://matrix.example.org", "user_id": "@bot:example.org"},
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def test_store_dir_pinned_to_each_profile_home(tmp_path):
|
||||
"""Two profiles resolving in one process get two stores, and each
|
||||
adapter keeps reporting its own store after the scope is gone."""
|
||||
stores = {}
|
||||
for profile in ("accountant", "engineering-lead"):
|
||||
home = tmp_path / "profiles" / profile
|
||||
home.mkdir(parents=True)
|
||||
adapter = _make_adapter()
|
||||
token = set_hermes_home_override(str(home))
|
||||
try:
|
||||
adapter._resolve_store_dir().mkdir(parents=True, exist_ok=True)
|
||||
finally:
|
||||
reset_hermes_home_override(token)
|
||||
# Cached on the instance: correct even when read outside the scope.
|
||||
path = adapter.get_diagnostics()["e2ee"]["crypto_store_path"]
|
||||
assert path.startswith(str(home)), f"store not profile-scoped: {path}"
|
||||
assert adapter._store_dir.is_dir()
|
||||
stores[profile] = path
|
||||
|
||||
assert stores["accountant"] != stores["engineering-lead"]
|
||||
Reference in New Issue
Block a user