test(workflow-execution-service): cover ResultExportService helpers - #6705
Conversation
Automated Reviewer SuggestionsBased on the
|
|
| config | throughput | MB/s | latency | max Δ latest / 7d | |
|---|---|---|---|---|---|
| 🔴 | bs=10 sw=10 sl=64 | 396 | 0.241 | 24,479/36,080/36,080 us | 🔴 +7.3% / 🔴 +128.2% |
| ⚪ | bs=100 sw=10 sl=64 | 805 | 0.491 | 123,255/150,297/150,297 us | ⚪ within ±5% / 🔴 +43.1% |
| ⚪ | bs=1000 sw=10 sl=64 | 926 | 0.565 | 1,080,412/1,105,202/1,105,202 us | ⚪ within ±5% / 🔴 +12.1% |
Baseline details
Latest main 0467c76 from same runner
| config | metric | PR | latest main | 7d avg | Δ latest | Δ 7d |
|---|---|---|---|---|---|---|
| bs=10 sw=10 sl=64 | throughput | 396 tuples/sec | 409 tuples/sec | 769.76 tuples/sec | -3.2% | -48.6% |
| bs=10 sw=10 sl=64 | MB/s | 0.241 MB/s | 0.25 MB/s | 0.47 MB/s | -3.6% | -48.7% |
| bs=10 sw=10 sl=64 | p50 | 24,479 us | 24,682 us | 12,663 us | -0.8% | +93.3% |
| bs=10 sw=10 sl=64 | p95 | 36,080 us | 33,611 us | 15,813 us | +7.3% | +128.2% |
| bs=10 sw=10 sl=64 | p99 | 36,080 us | 33,611 us | 19,001 us | +7.3% | +89.9% |
| bs=100 sw=10 sl=64 | throughput | 805 tuples/sec | 807 tuples/sec | 1,009 tuples/sec | -0.2% | -20.3% |
| bs=100 sw=10 sl=64 | MB/s | 0.491 MB/s | 0.493 MB/s | 0.616 MB/s | -0.4% | -20.3% |
| bs=100 sw=10 sl=64 | p50 | 123,255 us | 122,187 us | 99,444 us | +0.9% | +23.9% |
| bs=100 sw=10 sl=64 | p95 | 150,297 us | 150,174 us | 105,012 us | +0.1% | +43.1% |
| bs=100 sw=10 sl=64 | p99 | 150,297 us | 150,174 us | 116,467 us | +0.1% | +29.0% |
| bs=1000 sw=10 sl=64 | throughput | 926 tuples/sec | 906 tuples/sec | 1,044 tuples/sec | +2.2% | -11.3% |
| bs=1000 sw=10 sl=64 | MB/s | 0.565 MB/s | 0.553 MB/s | 0.637 MB/s | +2.2% | -11.3% |
| bs=1000 sw=10 sl=64 | p50 | 1,080,412 us | 1,096,025 us | 964,034 us | -1.4% | +12.1% |
| bs=1000 sw=10 sl=64 | p95 | 1,105,202 us | 1,143,147 us | 1,007,497 us | -3.3% | +9.7% |
| bs=1000 sw=10 sl=64 | p99 | 1,105,202 us | 1,143,147 us | 1,040,936 us | -3.3% | +6.2% |
Raw CSV
config_idx,batch_size,schema_width,string_len,num_batches,total_ms,total_tuples,total_bytes,tuples_per_sec,mb_per_sec,lat_p50_us,lat_p95_us,lat_p99_us
0,10,10,64,20,505.69,200,128000,396,0.241,24478.70,36079.82,36079.82
1,100,10,64,20,2483.69,2000,1280000,805,0.491,123255.01,150296.55,150296.55
2,1000,10,64,20,21599.76,20000,12800000,926,0.565,1080412.17,1105201.58,1105201.58
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #6705 +/- ##
============================================
+ Coverage 74.65% 74.84% +0.18%
- Complexity 3438 3450 +12
============================================
Files 1160 1160
Lines 45793 45793
Branches 5069 5069
============================================
+ Hits 34189 34276 +87
+ Misses 9953 9863 -90
- Partials 1651 1654 +3
*This pull request uses carry forward flags. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
Adds Scala unit tests for ResultExportService request helper methods in the Amber web service layer, improving coverage for operator JSON parsing and request validation logic without modifying production code.
Changes:
- Added
ResultExportServiceSpecto testparseOperatorsJSON deserialization (including empty array and malformed input). - Added tests for
validateExportRequestreturning400 Bad Requestwhen no operators are selected, andNoneotherwise.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…t coverage (apache#6902) ### What changes were proposed in this PR? `ResultExportService` sits at ~6% line coverage: the existing spec only covers `parseOperators` and `validateExportRequest`, leaving the whole export-encoding layer untested. The `streamDocumentAs*` writers look storage-bound but are not — each takes a `VirtualDocument[Tuple]` parameter, so a small in-spec fake document makes them testable against a `ByteArrayOutputStream`, with no Iceberg, MinIO or DB. This extends `ResultExportServiceSpec` with 19 tests that reach the private writers through `PrivateMethodTester`: `streamDocumentAsCSV` (both early returns, inferred vs supplied headers, and a document larger than `Constants.CHUNK_SIZE` to exercise the buffered chunk loop), `streamCellData` (rowIndex/columnIndex validation messages, an unretrievable row, and the happy-path bytes), `convertFieldToBytes` (all three branches), `streamDocumentAsHTML`, `streamDocumentAsParquetZip` (verbatim copy plus source-stream close, and error propagation), `streamDocumentAsArrow` (round-trips the tuples back through `ArrowFileReader`), and `NonClosingOutputStream`. Two existing behaviors are pinned as-is rather than changed: with supplied headers the first row is not consumed by header inference, so it still appears in the body (the asymmetry against the `None` branch), and `streamDocumentAsHTML` throws `NoSuchElementException` on an empty document because `.head` is unguarded. `getOperatorDocument`, `saveToDatasets`, `saveStreamToDataset` and `generateFileName` stay uncovered — they need `DocumentFactory.openDocument`, a live file-service endpoint, or embed `LocalDateTime.now()`. ### Any related issues, documentation, discussions? Closes apache#6898. Extends the spec added by apache#6705. ### How was this PR tested? `sbt "WorkflowExecutionService/testOnly *ResultExportServiceSpec"` passes with 24 tests (5 existing, 19 new); `Test/scalafmtCheck` and `Test/scalafix --check` are clean. Verified the failure path by inverting the supplied-headers assertion and confirming the suite went red and exited non-zero. Every test runs in-process against an in-spec fake document, so no external service is involved. ### Was this PR authored or co-authored using generative AI tooling? Generated-by: Claude Code (Fable 5)
What changes were proposed in this PR?
Any related issues, documentation, discussions?
Closes: #6704
How was this PR tested?
sbt "WorkflowExecutionService/testOnly *ResultExportServiceSpec", expect all 5 tests passing.Was this PR authored or co-authored using generative AI tooling?
Co-authored with Claude Opus 4.8 in compliance with ASF