5from __future__
import annotations
11from esiaccel.cosim.pytest
import cosim_test
15from .conftest
import HW_DIR, check_lines, require_tool, run_cmd
18@cosim_test(HW_DIR / "esitester.py", args=("{tmp_dir}", "cosim"))
22 require_tool(
"esitester")
23 require_tool(
"esiquery")
26 conn = f
"{host}:{port}"
27 stdout = run_cmd([
"esitester",
"-v",
"cosim", conn,
"callback",
"-i",
"5"])
29 "[CONNECT] connecting to backend",
33 assert f
"callback: {i}" in stdout, \
34 f
"Expected 'callback: {i}' in stdout"
37 conn = f
"{host}:{port}"
38 stdout = run_cmd([
"esitester",
"cosim", conn,
"streaming_add"])
40 "Streaming add test results:",
41 "input[0]=222709 + 5 = 222714 (expected 222714)",
42 "input[1]=894611 + 5 = 894616 (expected 894616)",
43 "input[2]=772894 + 5 = 772899 (expected 772899)",
44 "input[3]=429150 + 5 = 429155 (expected 429155)",
45 "input[4]=629806 + 5 = 629811 (expected 629811)",
46 "Streaming add test passed",
50 conn = f
"{host}:{port}"
51 stdout = run_cmd([
"esitester",
"cosim", conn,
"streaming_add",
"-t"])
53 "Streaming add test results:",
54 "Streaming add test passed",
58 conn = f
"{host}:{port}"
59 stdout = run_cmd([
"esitester",
"cosim", conn,
"translate_coords"])
61 "Coord translate test results:",
62 "coord[0]=(222709,894611) + (10,20) = (222719,894631)",
63 "coord[1]=(772894,429150) + (10,20) = (772904,429170)",
64 "coord[2]=(629806,138727) + (10,20) = (629816,138747)",
65 "coord[3]=(218516,390276) + (10,20) = (218526,390296)",
66 "coord[4]=(750021,423525) + (10,20) = (750031,423545)",
67 "Coord translate test passed",
71 conn = f
"{host}:{port}"
73 [
"esitester",
"cosim", conn,
"serial_coords",
"-n",
"40",
"-b",
"33"])
75 "Serial coord translate test results:",
77 "Serial coord translate test passed",
81 conn = f
"{host}:{port}"
83 [
"esitester",
"cosim", conn,
"auto_serial_coords",
"-n",
"5"])
85 "Auto serial coord translate test results:",
87 "Auto serial coord translate test passed",
91 conn = f
"{host}:{port}"
92 stdout = run_cmd([
"esitester",
"cosim", conn,
"channel",
"-i",
"3"])
94 "[channel] producer i=0 got=0",
95 "[channel] producer i=1 got=1",
96 "[channel] producer i=2 got=2",
97 "[channel] loopback i=0",
98 "[channel] loopback i=1",
99 "[channel] loopback i=2",
100 "Channel test passed",
104 conn = f
"{host}:{port}"
105 result = subprocess.run(
106 [
"esiquery",
"cosim", conn,
"telemetry"],
111 assert result.returncode == 0, result.stdout + result.stderr
112 stdout = result.stdout
113 check_lines(stdout, [
115 "fromhostdma[32].fromHostChecksum: 0",
116 "fromhostdma[32].fromHostCycles: 0",
117 "readmem[32].addrCmdIssued: 0",
118 "readmem[32].addrCmdResponses: 0",
119 "readmem[32].lastReadLSB: 0",
120 "readmem[32].readChecksum: 0",
121 "tohostdma[32].toHostCycles: 0",
122 "tohostdma[32].totalWrites: 0",
123 "writemem[32].addrCmdIssued: 0",
124 "writemem[32].addrCmdResponses: 0",
125 "readmem[32].addrCmdResp.cycles: 0",
126 "writemem[32].addrCmdResp.cycles: 0",
130 conn = f
"{host}:{port}"
131 stdout = run_cmd([
"esitester",
"cosim", conn,
"reset"])
132 check_lines(stdout, [
133 "[reset] reset requested",
134 "[reset] telemetry addrCmdResponses after reset = 0",
139 """Test ChannelService ToHost and FromHost ports from Python."""
140 acc = conn.build_accelerator()
141 channel_test = acc.children[esiaccel.AppID(
"channel_test")]
142 ports = channel_test.ports
145 mmio = ports[esiaccel.AppID(
"cmd")]
146 assert isinstance(mmio, types.MMIORegion), \
147 f
"Expected MMIORegion, got {type(mmio)}"
149 producer = ports[esiaccel.AppID(
"producer")]
150 assert isinstance(producer, types.ToHostPort), \
151 f
"Expected ToHostPort, got {type(producer)}"
155 mmio.write(0x0, num_values)
156 for i
in range(num_values):
157 result = producer.read().result()
158 assert result == i, f
"Producer: expected {i}, got {result}"
161 loopback_in = ports[esiaccel.AppID(
"loopback_in")]
162 assert isinstance(loopback_in, types.FromHostPort), \
163 f
"Expected FromHostPort, got {type(loopback_in)}"
164 loopback_in.connect()
166 loopback_out = ports[esiaccel.AppID(
"loopback_out")]
167 assert isinstance(loopback_out, types.ToHostPort), \
168 f
"Expected ToHostPort, got {type(loopback_out)}"
169 loopback_out.connect()
172 loopback_in.write(42 + i)
173 result = loopback_out.read().result()
174 assert result == 42 + i, \
175 f
"Loopback: expected {42 + i}, got {result}"
178@cosim_test(HW_DIR / "esitester.py", args=("{tmp_dir}", "cosim_dma"))
182 require_tool(
"esitester")
183 require_tool(
"esiquery")
186 conn = f
"{host}:{port}"
187 run_cmd([
"esitester",
"cosim", conn,
"hostmem"])
190 conn = f
"{host}:{port}"
191 result = subprocess.run(
192 [
"esitester",
"cosim", conn,
"dma",
"-w",
"-r"],
197 assert result.returncode == 0, result.stdout + result.stderr
200 """Verify complete engine payloads in both transfer directions."""
201 conn = f
"{host}:{port}"
202 result = subprocess.run(
222 assert result.returncode == 0, result.stdout + result.stderr
225 conn = f
"{host}:{port}"
234 result = subprocess.run(
249 combined = result.stdout + result.stderr
250 assert result.returncode == 0, combined
251 assert "exceeds the PCIe maximum read request size" not in combined, \
255 conn = f
"{host}:{port}"
259 result = subprocess.run(
261 "esitester",
"cosim", conn,
"aggbandwidth",
"--width",
"512",
"-r",
268 assert result.returncode == 0, result.stdout + result.stderr
271 conn = f
"{host}:{port}"
272 result = subprocess.run(
273 [
"esiquery",
"cosim", conn,
"telemetry"],
278 assert result.returncode == 0, result.stdout + result.stderr
279 stdout = result.stdout
280 check_lines(stdout, [
282 "fromhostdma[32].fromHostChecksum: 0",
283 "fromhostdma[32].fromHostCycles: 0",
284 "tohostdma[32].toHostCycles: 0",
288 conn = f
"{host}:{port}"
289 stdout = run_cmd([
"esitester",
"cosim", conn,
"channel",
"-i",
"3"])
290 check_lines(stdout, [
291 "[channel] producer i=0 got=0",
292 "[channel] producer i=1 got=1",
293 "[channel] producer i=2 got=2",
294 "[channel] loopback i=0",
295 "[channel] loopback i=1",
296 "[channel] loopback i=2",
297 "Channel test passed",
301 conn = f
"{host}:{port}"
303 [
"esitester",
"cosim", conn,
"serial_coords",
"-n",
"40",
"-b",
"33"])
304 check_lines(stdout, [
305 "Serial coord translate test results:",
307 "Serial coord translate test passed",
None test_bandwidth_data_integrity(self, str host, int port)
None test_hostmem(self, str host, int port)
None test_serial_coords(self, str host, int port)
None test_channel(self, str host, int port)
None test_aggbandwidth(self, str host, int port)
None test_hostmembw(self, str host, int port)
None test_telemetry(self, str host, int port)
None test_dma(self, str host, int port)
None test_callback(self, str host, int port)
None test_channel_python(self, AcceleratorConnection conn)
None test_streaming_add_quiet(self, str host, int port)
None test_channel(self, str host, int port)
None test_telemetry(self, str host, int port)
None test_translate_coords(self, str host, int port)
None test_streaming_add(self, str host, int port)
None test_serial_coords(self, str host, int port)
None test_auto_serial_coords(self, str host, int port)
None test_reset(self, str host, int port)