File size: 1,704 Bytes
5e0b58b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
"""Bounded asynchronous storage tests."""

from __future__ import annotations

from pathlib import Path

from src.storage.async_runtime import AsyncStorageConfig, AsyncStorageSession
from src.storage.delta_journal import DeltaJournal, DeltaType
from src.storage.runtime import StorageRuntimeConfig
from tests.test_storage_runtime import FakeNetwork, FakeNeuron, FakeStep, FakeSynapse


def test_async_session_writes_and_reports_telemetry(tmp_path: Path) -> None:
    network = FakeNetwork(
        dimensions=(10, 10, 10, 10, 10),
        current_tick=0,
        neurons={1: FakeNeuron(), 2: FakeNeuron()},
        synapses={1: [FakeSynapse(2, 0.2, 1)], 2: []},
    )
    runtime = StorageRuntimeConfig(
        snapshot_path=tmp_path / "async.b5d",
        journal_path=tmp_path / "async.b5d.journal",
        commit_interval_ticks=1,
    )
    session = AsyncStorageSession(
        network,  # type: ignore[arg-type]
        runtime,
        AsyncStorageConfig(queue_size=8),
    )
    session.start()
    network.current_tick = 1
    network.neurons[1].v = -40.0
    network.neurons[1].spike_counter = 1
    network.neurons[1].last_spike_tick = 1
    for hook in tuple(network.hooks):
        hook(FakeStep(1, (1,)))
    session.close()
    telemetry = session.telemetry
    assert telemetry.batches_enqueued == 1
    assert telemetry.batches_written == 1
    assert telemetry.deltas_written >= 2
    assert telemetry.dropped_batches == 0
    assert not telemetry.worker_failed
    with DeltaJournal(runtime.journal_path) as journal:
        kinds = {entry.delta_type for entry in journal.iter_committed_entries()}
    assert DeltaType.NEURON_STATE in kinds
    assert DeltaType.SPIKE_EVENT in kinds