17def test_custom_channel_service(conn: AcceleratorConnection,
18 sources_dir: Path) ->
None:
19 """Route a custom service's multiple MMIO and HostMem clients via the BSP."""
20 manifest = json.loads((sources_dir /
"esi_system_manifest.json").read_text())
21 engine_names = {
"OneItemBuffersFromHost",
"OneItemBuffersToHost"}
23 engine
for engine
in manifest[
"design"][
"engines"]
24 if engine[
"serviceImplName"]
in engine_names
26 assert Counter(engine[
"serviceImplName"]
for engine
in engines) == {
27 "OneItemBuffersFromHost": 2,
28 "OneItemBuffersToHost": 2,
31 f
"loopback_{direction}_{i}" for direction
in (
"in",
"out")
36 for appid
in client[
"relAppIDPath"])
38 for client
in engine[
"clientDetails"]
39 } == {(name,)
for name
in expected_clients}
40 assert {engine[
"mmio"][
"name"]
for engine
in engines
41 } == {f
"custom_{name}.mmio" for name
in expected_clients}
43 acc = conn.build_accelerator()
44 inputs = [acc.ports[esiaccel.AppID(f
"loopback_in_{i}")]
for i
in range(2)]
45 outputs = [acc.ports[esiaccel.AppID(f
"loopback_out_{i}")]
for i
in range(2)]
46 for port
in inputs + outputs:
50 for iteration
in range(8):
52 sum((1 + iteration + i * 16 + word * 256) << (64 * word)
56 reads = [port.read()
for port
in outputs]
57 for port, value
in zip(inputs, values):
59 assert [read.result(timeout=10)
for read
in reads] == values