Build a mock VM object with all required sub-objects.
()
| 54 | |
| 55 | |
| 56 | def _make_vm() -> MagicMock: |
| 57 | """Build a mock VM object with all required sub-objects.""" |
| 58 | from chuk_ai_session_manager.memory.models import StorageTier |
| 59 | from chuk_ai_session_manager.memory.models.enums import ( |
| 60 | CompressionLevel, |
| 61 | Modality, |
| 62 | PageType, |
| 63 | VMMode, |
| 64 | ) |
| 65 | |
| 66 | vm = MagicMock() |
| 67 | vm.mode = VMMode.PASSIVE |
| 68 | vm.turn = 5 |
| 69 | |
| 70 | # metrics |
| 71 | metrics = MagicMock() |
| 72 | metrics.tlb_hits = 10 |
| 73 | metrics.tlb_misses = 2 |
| 74 | metrics.tlb_hit_rate = 10 / 12 |
| 75 | metrics.faults_total = 3 |
| 76 | metrics.faults_this_turn = 1 |
| 77 | metrics.evictions_total = 2 |
| 78 | metrics.evictions_this_turn = 0 |
| 79 | vm.metrics = metrics |
| 80 | |
| 81 | # working_set |
| 82 | ws_stats = MagicMock() |
| 83 | ws_stats.utilization = 0.5 |
| 84 | ws_stats.l0_pages = 2 |
| 85 | ws_stats.l1_pages = 4 |
| 86 | ws_stats.tokens_used = 8_000 |
| 87 | ws_stats.tokens_available = 8_000 |
| 88 | ws = MagicMock() |
| 89 | ws.get_stats.return_value = ws_stats |
| 90 | vm.working_set = ws |
| 91 | |
| 92 | # page_table |
| 93 | pt_stats = MagicMock() |
| 94 | # pages_by_tier: a real dict keyed by StorageTier enums |
| 95 | pt_stats.pages_by_tier = { |
| 96 | StorageTier.L0: 2, |
| 97 | StorageTier.L1: 4, |
| 98 | } |
| 99 | pt_stats.total_pages = 6 |
| 100 | pt_stats.dirty_pages = 1 |
| 101 | |
| 102 | # a couple of page table entries |
| 103 | def _make_entry(pid: str, tier: StorageTier) -> MagicMock: |
| 104 | e = MagicMock() |
| 105 | e.page_id = pid |
| 106 | e.page_type = PageType.TRANSCRIPT |
| 107 | e.tier = tier |
| 108 | e.size_tokens = 100 |
| 109 | e.eviction_priority = 0.5 |
| 110 | e.pinned = False |
| 111 | e.compression_level = CompressionLevel.FULL |
| 112 | e.access_count = 3 |
| 113 | e.last_accessed = datetime.now(timezone.utc) |
no test coverage detected