Commits
Tarun Sukhani authored 78092e49eed
feat(testrunner): parallelize unit tests across classes via VT pool play auto-test was previously serial across every test class — FirePhoque opened one /@tests/<class> URL, waited for the result HTML to appear on disk, then moved to the next. With the framework now unconditional VT, the server side handles concurrent test-class requests fine; the loop itself was the bottleneck. Stage 1 of the test-parallelism roadmap: * TestRunner.list now tags entries with U:/F:/S: prefixes so FirePhoque can route by category. Unprefixed entries fall back to the serial path for graceful degradation. * FirePhoque splits unit tests off to a virtual-thread-per-task executor capped by a Semaphore (default 16, override via -DunitTestParallelism=N). Each unit test fires through java.net.http. HttpClient (thread-safe; HtmlUnit's WebClient is not, and unit tests don't need browser semantics anyway). Result-file polling and pass/ fail determination match the existing serial path. * Functional + Selenium tests stay on the WebClient serial path — FunctionalTest's static savedCookies/renderArgs would race under parallelism (Stage 2 territory). * Output prints in completion order under a shared lock so lines remain atomic across concurrent workers. * AtomicBoolean replaces the bare boolean for cross-VT pass/fail aggregation. Expected speedup: 5-15x on typical app suites where unit tests dominate. Stages 2 and 3 (FunctionalTest ThreadLocal refactor, fully-parallel FirePhoque) remain available as follow-ups. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>