From 29bc81a46d057532f51c37bed081d850cf7f31db Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Wed, 16 Sep 2020 17:22:02 -0700 Subject: [PATCH] fix: pass testLog to all vatWorkers This adds a new message to the vat-to-kernel protocol, `['testLog', ...args]`, to deliver the strings from the vat to the kernel. They get added to the same `c.dump().log` array that local workers can write to. This is solely for the benefit of unit tests. refs #1776 (closing the `testLog` part, but not the other vatPowers) --- packages/SwingSet/src/kernel/vatManager/factory.js | 3 +++ packages/SwingSet/src/kernel/vatManager/nodeWorker.js | 4 +++- .../src/kernel/vatManager/nodeWorkerSupervisor.js | 11 ++++++++++- .../src/kernel/vatManager/subprocessSupervisor.js | 11 ++++++++++- .../src/kernel/vatManager/worker-subprocess-node.js | 4 +++- packages/xs-vat-worker/src/vatWorker.js | 4 ++++ 6 files changed, 33 insertions(+), 4 deletions(-) diff --git a/packages/SwingSet/src/kernel/vatManager/factory.js b/packages/SwingSet/src/kernel/vatManager/factory.js index 8e720e2216f..8e6bbdf7714 100644 --- a/packages/SwingSet/src/kernel/vatManager/factory.js +++ b/packages/SwingSet/src/kernel/vatManager/factory.js @@ -27,16 +27,19 @@ export function makeVatManagerFactory({ const nodeWorkerFactory = makeNodeWorkerVatManagerFactory({ makeNodeWorker, kernelKeeper, + testLog: allVatPowers.testLog, }); const nodeSubprocessFactory = makeNodeSubprocessFactory({ startSubprocessWorker: startSubprocessWorkerNode, kernelKeeper, + testLog: allVatPowers.testLog, }); const xsWorkerFactory = makeNodeSubprocessFactory({ startSubprocessWorker: startSubprocessWorkerXS, kernelKeeper, + testLog: allVatPowers.testLog, }); function validateManagerOptions(managerOptions) { diff --git a/packages/SwingSet/src/kernel/vatManager/nodeWorker.js b/packages/SwingSet/src/kernel/vatManager/nodeWorker.js index 2f631d1dd5c..c2cc59e1d39 100644 --- a/packages/SwingSet/src/kernel/vatManager/nodeWorker.js +++ b/packages/SwingSet/src/kernel/vatManager/nodeWorker.js @@ -23,7 +23,7 @@ function parentLog(first, ...args) { } export function makeNodeWorkerVatManagerFactory(tools) { - const { makeNodeWorker, kernelKeeper } = tools; + const { makeNodeWorker, kernelKeeper, testLog } = tools; function createFromBundle(vatID, bundle, managerOptions) { const { vatParameters } = managerOptions; @@ -97,6 +97,8 @@ export function makeNodeWorkerVatManagerFactory(tools) { parentLog(`syscall`, args); const vatSyscallObject = args; handleSyscall(vatSyscallObject); + } else if (type === 'testLog') { + testLog(...args); } else if (type === 'deliverDone') { parentLog(`deliverDone`); if (waiting) { diff --git a/packages/SwingSet/src/kernel/vatManager/nodeWorkerSupervisor.js b/packages/SwingSet/src/kernel/vatManager/nodeWorkerSupervisor.js index b1e9955ca1b..12fbdfac3a9 100644 --- a/packages/SwingSet/src/kernel/vatManager/nodeWorkerSupervisor.js +++ b/packages/SwingSet/src/kernel/vatManager/nodeWorkerSupervisor.js @@ -105,13 +105,22 @@ parentPort.on('message', ([type, ...margs]) => { reject: (...args) => doSyscall(['reject', ...args]), }); + function testLog(...args) { + sendUplink(['testLog', ...args]); + } + const state = null; const vatID = 'demo-vatID'; // todo: maybe add transformTildot, makeGetMeter/transformMetering to // vatPowers, but only if options tell us they're wanted. Maybe // transformTildot should be async and outsourced to the kernel // process/thread. - const vatPowers = { Remotable, getInterfaceOf, makeMarshal }; + const vatPowers = { + Remotable, + getInterfaceOf, + makeMarshal, + testLog, + }; dispatch = makeLiveSlots( syscall, state, diff --git a/packages/SwingSet/src/kernel/vatManager/subprocessSupervisor.js b/packages/SwingSet/src/kernel/vatManager/subprocessSupervisor.js index 5a8c71abc85..5ed4a2dd7a3 100644 --- a/packages/SwingSet/src/kernel/vatManager/subprocessSupervisor.js +++ b/packages/SwingSet/src/kernel/vatManager/subprocessSupervisor.js @@ -120,13 +120,22 @@ fromParent.on('data', data => { reject: (...args) => doSyscall(['reject', ...args]), }); + function testLog(...args) { + sendUplink(['testLog', ...args]); + } + const state = null; const vatID = 'demo-vatID'; // todo: maybe add transformTildot, makeGetMeter/transformMetering to // vatPowers, but only if options tell us they're wanted. Maybe // transformTildot should be async and outsourced to the kernel // process/thread. - const vatPowers = { Remotable, getInterfaceOf, makeMarshal }; + const vatPowers = { + Remotable, + getInterfaceOf, + makeMarshal, + testLog, + }; dispatch = makeLiveSlots( syscall, state, diff --git a/packages/SwingSet/src/kernel/vatManager/worker-subprocess-node.js b/packages/SwingSet/src/kernel/vatManager/worker-subprocess-node.js index 90c4ebcf68d..d5d1bfc466a 100644 --- a/packages/SwingSet/src/kernel/vatManager/worker-subprocess-node.js +++ b/packages/SwingSet/src/kernel/vatManager/worker-subprocess-node.js @@ -24,7 +24,7 @@ function parentLog(first, ...args) { } export function makeNodeSubprocessFactory(tools) { - const { startSubprocessWorker, kernelKeeper } = tools; + const { startSubprocessWorker, kernelKeeper, testLog } = tools; function createFromBundle(vatID, bundle, managerOptions) { const { vatParameters } = managerOptions; @@ -99,6 +99,8 @@ export function makeNodeSubprocessFactory(tools) { parentLog(`syscall`, args); const vatSyscallObject = args; handleSyscall(vatSyscallObject); + } else if (type === 'testLog') { + testLog(...args); } else if (type === 'deliverDone') { parentLog(`deliverDone`); if (waiting) { diff --git a/packages/xs-vat-worker/src/vatWorker.js b/packages/xs-vat-worker/src/vatWorker.js index 1c54042593a..6aa128dd0bc 100644 --- a/packages/xs-vat-worker/src/vatWorker.js +++ b/packages/xs-vat-worker/src/vatWorker.js @@ -127,6 +127,9 @@ function makeWorker(io, setImmediate) { reject: (...args) => doSyscall(['reject', ...args]), }); + function testLog(...args) { + sendUplink(['testLog', ...args]); + } const state = null; const vatID = 'demo-vatID'; // todo: maybe add transformTildot, makeGetMeter/transformMetering to @@ -137,6 +140,7 @@ function makeWorker(io, setImmediate) { Remotable, getInterfaceOf, makeMarshal, + testLog, }; dispatch = makeLiveSlots( syscall,