import os import platform import pytest from megengine.utils.persistent_cache import PersistentCacheOnServer @pytest.mark.parametrize("with_flag", [True, False]) @pytest.mark.skipif( platform.system() not in {"Linux", "Darwin"}, reason="redislite not implemented in windows", ) def test_persistent_cache_redis(monkeypatch, with_flag): import redislite server = redislite.Redis() monkeypatch.delenv("MGE_FASTRUN_CACHE_TYPE", raising=False) monkeypatch.setenv( "MGE_FASTRUN_CACHE_URL", "redis+socket://{}".format(server.socket_file) ) if with_flag: server.set("mgb-cache-flag", 1) pc = PersistentCacheOnServer() pc.put("test", "hello", "world") if with_flag: pc = PersistentCacheOnServer() assert pc.get("test", "hello") == b"world" assert pc.config.type == "redis" else: assert pc.config.type == "in-file" def test_persistent_cache_file(monkeypatch, tmp_path): monkeypatch.setenv("MGE_FASTRUN_CACHE_TYPE", "FILE") monkeypatch.setenv("MGE_FASTRUN_CACHE_DIR", tmp_path) pc = PersistentCacheOnServer() pc.put("test", "store", "this") assert pc.config.type == "in-file" del pc pc = PersistentCacheOnServer() assert pc.get("test", "store") == b"this" def test_persistent_cache_file_clear(monkeypatch, tmp_path): monkeypatch.setenv("MGE_FASTRUN_CACHE_TYPE", "FILE") monkeypatch.setenv("MGE_FASTRUN_CACHE_DIR", tmp_path) pc = PersistentCacheOnServer() pc_dummy = PersistentCacheOnServer() pc.put("test", "drop", "this") assert pc.config.type == "in-file" del pc # this dummy instance shouldn't override cache file del pc_dummy os.unlink(os.path.join(tmp_path, "cache.bin")) pc = PersistentCacheOnServer() assert pc.get("test", "drop") is None def test_persistent_cache_memory(monkeypatch): monkeypatch.setenv("MGE_FASTRUN_CACHE_TYPE", "MEMORY") pc = PersistentCacheOnServer() assert pc.config is None pc.put("test", "drop", "this") assert pc.config.type == "in-memory" assert pc.get("test", "drop") == b"this" del pc pc = PersistentCacheOnServer() assert pc.get("test", "drop") is None