test(layout): load the runtime and RPC registry once instead of per test (#33919)

The layout-owner tests reset modules and re-imported orca-runtime, the
dispatcher and the full RPC registry inside each test. Under CI load the
cold transform of that graph exceeds the 30s test timeout. The capability
check reads the switch at call time, so it only needs a flipped getter; the
window-owned registration check uses the default (switch-off) registry.
This commit is contained in:
Neil
2026-10-26 04:57:53 -07:00
committed by GitHub
parent 1ac1d40cd7
commit 5652de8872
2 changed files with 25 additions and 49 deletions
@@ -9,8 +9,12 @@ import { MOBILE_RPC_METHOD_ALLOWLIST } from '../../runtime-rpc/runtime-rpc-mobil
import { OrcaRuntimeService } from '../../orca-runtime'
import { eraseRpcMethods, isStreamingMethod, type RpcContext } from '../core'
import { LAYOUT_APPLY_METHODS } from './workspace-layout'
import { ALL_RPC_METHODS } from './index'
import { partialRuntimeStore, type PartialRuntimeStore } from '../../runtime-store-partial-fixture'
// Pin a window-owned build even under `ORCA_LAYOUT_OWNER=main`, so the default registry omits layout commands.
vi.mock('../../../../shared/layout-owner-switch', () => ({ ORCA_LAYOUT_OWNER_IS_MAIN: false }))
const frozen = vi.hoisted(() => ({ workspaces: new Set<string>() }))
vi.mock(
'../../../persistence/moving-wsl-projects/wsl-move-scope-guard',
@@ -29,15 +33,6 @@ const SPLIT = {
direction: 'vertical'
} as const
async function registeredMethods(layoutOwnerIsMain: boolean) {
vi.resetModules()
vi.doMock('../../../../shared/layout-owner-switch', () => ({
ORCA_LAYOUT_OWNER_IS_MAIN: layoutOwnerIsMain
}))
const { ALL_RPC_METHODS } = await import('./index')
return eraseRpcMethods(ALL_RPC_METHODS)
}
function sessionListing(tabId: string): WorkspaceSessionState {
return {
activeRepoId: null,
@@ -84,21 +79,22 @@ function runtimeHolding(hostId: ExecutionHostId) {
afterEach(() => {
frozen.workspaces.clear()
vi.doUnmock('../../../../shared/layout-owner-switch')
vi.resetModules()
})
describe('layout.apply', () => {
it('is not registered in a window-owned build, and never advertised or open to phones', async () => {
const methods = await registeredMethods(false)
expect(methods.some((method) => method.name === 'layout.apply')).toBe(false)
it('is not registered in a window-owned build, and never advertised or open to phones', () => {
const names = ALL_RPC_METHODS.map((method) => method.name)
for (const name of ['layout.apply', 'layout.reopenHeldPanes', 'layout.reportView']) {
expect(names, name).not.toContain(name)
}
expect(RUNTIME_CAPABILITIES.some((capability) => capability.startsWith('layout'))).toBe(false)
expect(MOBILE_RPC_METHOD_ALLOWLIST.has('layout.apply')).toBe(false)
})
it('is registered in a layout-owner build; a split keeps only a valid window pane id', async () => {
const apply = (await registeredMethods(true)).find((method) => method.name === 'layout.apply')
it('keeps only a valid window pane id on a split', async () => {
const apply = eraseRpcMethods(LAYOUT_APPLY_METHODS).find(
(method) => method.name === 'layout.apply'
)
if (!apply || isStreamingMethod(apply)) {
throw new Error('layout.apply is not a request method')
}
@@ -450,7 +446,9 @@ describe('layout.apply', () => {
})
it('takes an open into a new split under the window’s group id, on every open kind', async () => {
const apply = (await registeredMethods(true)).find((method) => method.name === 'layout.apply')
const apply = eraseRpcMethods(LAYOUT_APPLY_METHODS).find(
(method) => method.name === 'layout.apply'
)
const parse = (command: Record<string, unknown>) => apply?.params?.safeParse({ command })
const split = { besideGroupId: 'g1', direction: 'right' }
const opens = [
@@ -28,17 +28,10 @@ vi.mock('../../../../shared/layout-owner-switch', () => ({
}
}))
// Rebuild the registry under this environment switch.
async function switchedBuild(layoutOwnerIsMain: boolean) {
layoutOwner.isMain = layoutOwnerIsMain
vi.resetModules()
const [{ OrcaRuntimeService }, { RpcDispatcher }, { ALL_RPC_METHODS }] = await Promise.all([
import('../../orca-runtime'),
import('../dispatcher'),
import('./index')
])
return { OrcaRuntimeService, RpcDispatcher, ALL_RPC_METHODS }
}
// Loaded once as a layout-owner build; window-owned registration is covered in workspace-layout-apply.test.ts.
import { OrcaRuntimeService } from '../../orca-runtime'
import { RpcDispatcher } from '../dispatcher'
import { ALL_RPC_METHODS } from './index'
const Frame = z.object({ type: z.string(), subscriptionId: z.string().optional() })
const StreamReply = z.object({ ok: z.literal(true), result: Frame })
@@ -56,23 +49,20 @@ afterEach(() => {
})
describe('the layout intents capability', () => {
it('is advertised only by a layout-owner build', async () => {
const on = await switchedBuild(true)
expect(new on.OrcaRuntimeService().getStatus().capabilities).toEqual(
it('is advertised only by a layout-owner build', () => {
expect(new OrcaRuntimeService().getStatus().capabilities).toEqual(
expect.arrayContaining([
LAYOUT_INTENTS_RUNTIME_CAPABILITY,
LAYOUT_REOPEN_HELD_PANES_CAPABILITY
])
)
const off = await switchedBuild(false)
const offCapabilities = new off.OrcaRuntimeService().getStatus().capabilities
layoutOwner.isMain = false
const offCapabilities = new OrcaRuntimeService().getStatus().capabilities
expect(offCapabilities).not.toContain(LAYOUT_INTENTS_RUNTIME_CAPABILITY)
expect(offCapabilities).not.toContain(LAYOUT_REOPEN_HELD_PANES_CAPABILITY)
expect(off.ALL_RPC_METHODS.map((method) => method.name)).not.toContain('layout.reopenHeldPanes')
})
it('comes with the layout methods registered', async () => {
const { ALL_RPC_METHODS } = await switchedBuild(true)
it('comes with the layout methods registered', () => {
const registered = new Set(ALL_RPC_METHODS.map((method) => method.name))
for (const method of LAYOUT_METHODS) {
expect(registered.has(method), method).toBe(true)
@@ -88,7 +78,6 @@ describe('layout methods on a layout-owner server', () => {
['layout.reopenHeldPanes', 'invalid_argument'],
['layout.reportView', 'invalid_argument']
] as const)('admits a paired desktop and refuses a phone: %s', async (method, nextCheck) => {
const { OrcaRuntimeService, RpcDispatcher } = await switchedBuild(true)
const dispatcher = new RpcDispatcher({ runtime: new OrcaRuntimeService() })
const asDesktop = await dispatcher.dispatch(request(method, { bad: 1 }), {
callerScope: PAIRED_DESKTOP
@@ -99,7 +88,6 @@ describe('layout methods on a layout-owner server', () => {
})
it('streams a snapshot to a paired desktop', async () => {
const { OrcaRuntimeService, RpcDispatcher } = await switchedBuild(true)
const runtime = new OrcaRuntimeService()
const dispatcher = new RpcDispatcher({ runtime })
const frames: z.infer<typeof Frame>[] = []
@@ -128,7 +116,6 @@ describe('layout.reportView', () => {
}
it("records the desktop's groups under its connection", async () => {
const { OrcaRuntimeService, RpcDispatcher } = await switchedBuild(true)
const runtime = new OrcaRuntimeService()
const reported = vi.spyOn(runtime, 'reportClientView')
const dispatcher = new RpcDispatcher({ runtime })
@@ -141,7 +128,6 @@ describe('layout.reportView', () => {
})
it('passes a refresh on as one', async () => {
const { OrcaRuntimeService, RpcDispatcher } = await switchedBuild(true)
const runtime = new OrcaRuntimeService()
const reported = vi.spyOn(runtime, 'reportClientView')
const reply = await new RpcDispatcher({ runtime }).dispatch(
@@ -153,7 +139,6 @@ describe('layout.reportView', () => {
})
it('refuses a caller with no connection to tie the report to', async () => {
const { OrcaRuntimeService, RpcDispatcher } = await switchedBuild(true)
const runtime = new OrcaRuntimeService()
const reported = vi.spyOn(runtime, 'reportClientView')
const reply = await new RpcDispatcher({ runtime }).dispatch(
@@ -171,7 +156,6 @@ describe('layout.reportView', () => {
[{ activeGroupByWorkspace: ['g1'] }],
[{ activeGroupByWorkspace: {}, refresh: false }]
])('refuses params it cannot read: %j', async (params) => {
const { OrcaRuntimeService, RpcDispatcher } = await switchedBuild(true)
const runtime = new OrcaRuntimeService()
const reported = vi.spyOn(runtime, 'reportClientView')
const reply = await new RpcDispatcher({ runtime }).dispatch(
@@ -181,11 +165,6 @@ describe('layout.reportView', () => {
expect(errorCode(reply)).toBe('invalid_argument')
expect(reported).not.toHaveBeenCalled()
})
it('is not registered by a window-owned build', async () => {
const { ALL_RPC_METHODS } = await switchedBuild(false)
expect(ALL_RPC_METHODS.map((method) => method.name)).not.toContain('layout.reportView')
})
})
describe('an older desktop on a layout-owner server', () => {
@@ -228,7 +207,6 @@ describe('an older desktop on a layout-owner server', () => {
/** A windowless (serve) host: no notifier, its tabs already published. */
async function headlessServer() {
const { OrcaRuntimeService, RpcDispatcher } = await switchedBuild(true)
class HeadlessServer extends OrcaRuntimeService {
seed(): void {
this.storeMobileSessionSnapshot(WT, published())