| # WebGPU CTS Harness Message Protocol |
| |
| The WebGPU conformance test suite harness makes use of a websocket connection to |
| pass information between the Python and JavaScript code. This document outlines |
| all valid message types, when they should be sent, etc. All messages are JSON |
| objects with at least a `type` field that differentiates message types from each |
| other. |
| |
| ## TEST_STARTED |
| |
| ### Description |
| |
| A message sent exactly once by the JavaScript code once it starts running the |
| requested test. In addition to serving as an ack, it also sends information |
| about how the test will be run. |
| |
| Sending more than one message of this type during a test is considered an error. |
| |
| ### Fields |
| |
| * `type` - A string denoting the message type |
| * `adapter_info` - An optional object containing the same information as the |
| [GpuAdapterInfo] the test will be using |
| |
| [GpuAdapterInfo]: https://gpuweb.github.io/gpuweb/#gpu-adapterinfo |
| |
| ### Example |
| |
| ``` |
| { |
| 'type': 'TEST_STARTED', |
| 'adapter_info': { |
| 'vendor': 'NVIDIA', |
| 'architecture': 'Turing', |
| 'device': '2184', |
| 'description': 'GTX 1660', |
| }, |
| } |
| ``` |
| |
| ## TEST_HEARTBEAT |
| |
| ### Description |
| |
| A message sent periodically zero or more times by the JavaScript code to |
| prevent the Python test harness from timing out. |
| |
| Sending a message of this type before TEST_STARTED or after TEST_STATUS is |
| considered an error. |
| |
| ### Fields |
| |
| * `type` - A string denoting the message type |
| |
| ### Example |
| |
| ``` |
| { |
| 'type': 'TEST_HEARTBEAT', |
| } |
| ``` |
| |
| ## TEST_STATUS |
| |
| ### Description |
| |
| A message sent exactly once when the actual test is completed. Contains |
| information about the status/result of the test. |
| |
| Sending more than one message of this type or sending before TEST_STARTED is |
| considered an error. |
| |
| ### Fields |
| |
| * `type` - As string denoting the message type |
| * `status` - A string containing the status of the test, e.g. `skip` or `fail` |
| * `js_duration_ms` - An int containing the number of milliseconds the |
| JavaScript code took to run the test |
| |
| ### Example |
| |
| ``` |
| { |
| 'type': 'TEST_STATUS', |
| 'status': 'fail', |
| 'js_duration_ms': 243, |
| } |
| ``` |
| |
| ## TEST_LOG |
| |
| ### Description |
| |
| A message sent one or more times containing test logs. Multiple messages will be |
| sent if a single message would exceed the max payload size, in which case the |
| Python test harness will concatenate them together in the order received. |
| |
| Sending a message of this type before TEST_STATUS is considered an error. |
| |
| ### Fields |
| |
| * `type` - A string denoting the message type |
| * `log` - A string containing log content output by the test |
| |
| ### Example |
| |
| ``` |
| { |
| 'type': 'TEST_LOG', |
| 'log': 'Logging is fun', |
| } |
| ``` |
| |
| ## TEST_FINISHED |
| |
| ### Description |
| |
| A message sent exactly once after all other messages have been sent. This |
| signals to the Python test harness that it should stop listening for any |
| additional messages and proceed with test cleanup. |
| |
| Sending a message of this type before TEST_LOG is considered an error. Sending |
| more than one message of this type is erroneous, but will not be caught until |
| the following test is run. |
| |
| ### Fields |
| |
| * `type` - A string denoting the message type |
| |
| ### Example |
| |
| ``` |
| { |
| 'type': 'TEST_FINISHED', |
| } |
| ``` |