The GitHub Actions job "Required Checks" on texera.git/main has succeeded. Run started by GitHub user github-merge-queue[bot] (triggered by github-merge-queue[bot]).
Head commit for run: ad638ae035579025f48697089ad9bbc3a50d2c08 / Xinyuan Lin <[email protected]> test(amber): cover the websocket endpoint's request dispatch (#7303) ### What changes were proposed in this PR? `WorkflowWebsocketResource` was at **0%**. The endpoint is thin, but two parts of it are real logic nothing else guarded: - **The write-access gate on `WorkflowExecuteRequest`** — the only consumer of the privilege `myOnOpen` parses off the handshake. It must both report to the client *and* rethrow, so both halves are asserted; dropping either would leave the other silently missing. (Unreachable in single-node mode, where `ServletAwareConfigurator` hard-codes WRITE, but live under Kubernetes where the privilege comes from the `x-user-computing-unit-access` header.) - **The catch-all error mapper**, which stamps every failure as `COMPILATION_ERROR` with a placeholder operator and routes it to the socket when no execution exists. Six tests, driving a mocked `javax.websocket.Session` the way `CollaborationResourceSpec` does and registering a `SessionState` directly, so no real workflow is created. One detail worth calling out: the fatal-error `type` field is a **scalapb enum, and it serializes as an object rather than a string** — ```json "type": { "value": 0, "index": 0, "name": "COMPILATION_ERROR", ... } ``` so the client reads `type.name`. The test pins that nested shape, because flattening it would break the frontend's error panel silently. **Every one of the six tests was shown to fail under a targeted production mutation**, all reverted afterwards (production diff empty): | Mutation | Result | |---|---| | neuter the write-access gate | red | | drop the `"Initializing"` announcement | red | | swallow the rethrow | red | | close the wrong session id | red | | answer a heartbeat with the wrong event | red | | (the first four together) | 5 of 6 red | Deliberately untested, each because it would pin an accidental failure rather than a contract: `myOnOpen`'s missing-parameter and bogus-privilege paths; `ModifyLogicRequest`, whose reconfiguration service is null until `executeWorkflow` has run; and `ResultPaginationRequest`, whose no-workflow case is a discarded `Option.foreach`. **Two findings recorded in comments rather than pinned:** 1. `objectMapper.readValue` sits **outside** the try, so an unparseable frame escapes un-mapped and the client is told nothing. 2. With a workflow attached but no execution, `executionService.getValue` returns null, so `workflowStateOpt.map(...)` yields `Some(null)` — which slips past the `case None` guard and NPEs instead of raising the intended "execution is not initialized". No production file is touched. ### Any related issues, documentation, discussions? Closes #7300 ### How was this PR tested? Six new tests, run with the two specs that share the `SessionState` registry to confirm no interference — 25 tests, Java 17: ``` sbt "WorkflowExecutionService/testOnly org.apache.texera.web.resource.WorkflowWebsocketResourceSpec org.apache.texera.web.SessionStateSpec org.apache.texera.web.resource.CollaborationResourceSpec" ``` ``` [info] Suites: completed 3, aborted 0 [info] Tests: succeeded 25, failed 0, canceled 0, ignored 0, pending 0 [info] All tests passed. ``` `Test/scalafmtCheck` and `Test/scalafix --check` both `[success]`. ### Was this PR authored or co-authored using generative AI tooling? Generated-by: Claude Code (Opus 5) Report URL: https://github.com/apache/texera/actions/runs/30964372760 With regards, GitHub Actions via GitBox
