Skip to content

Commit 6a1705e

Browse files
committed
fix(xs-worker): provide error message on vat creation failure
test-innerVat.js was sensitive to engine-specific messages for ReferenceError. But it also showed that when the XS supervisor reports an error in setBundle, the message was being censored before being passed back to the kernel.
1 parent 2c58ffd commit 6a1705e

File tree

3 files changed

+11
-7
lines changed

3 files changed

+11
-7
lines changed

packages/SwingSet/src/kernel/vatManager/manager-subprocess-xsnap.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// @ts-check
2-
import { assert, details as X } from '@agoric/assert';
2+
import { assert, details as X, q } from '@agoric/assert';
33
import { ExitCode } from '@agoric/xsnap/api';
44
import { makeManagerKit } from './manager-helper';
55

@@ -125,7 +125,8 @@ export function makeXsSubprocessFactory({
125125
if (bundleReply[0] === 'dispatchReady') {
126126
parentLog(vatID, `bundle loaded. dispatch ready.`);
127127
} else {
128-
assert.fail(X`failed to setBundle: ${bundleReply}`);
128+
const [_tag, errName, message] = bundleReply;
129+
assert.fail(X`setBundle failed: ${q(errName)}: ${q(message)}`);
129130
}
130131

131132
/**

packages/SwingSet/src/kernel/vatManager/supervisor-subprocess-xsnap.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ function managerPort(issueCommand) {
8383
report.result = encode(item);
8484
})
8585
.catch(err => {
86-
report.result = encode(['err', f.name, err.message]);
86+
report.result = encode(['err', err.name, err.message]);
8787
})
8888
.catch(_err => {
8989
report.result = lastResort;

packages/SwingSet/test/vat-admin/test-innerVat.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,13 @@ test('VatAdmin counter test', async t => {
4545
test('VatAdmin broken vat creation', async t => {
4646
const c = await doTestSetup(t, 'brokenVat');
4747
await c.run();
48-
t.deepEqual(c.dump().log, [
49-
'starting brokenVat test',
50-
'yay, rejected: Error: Vat Creation Error: ReferenceError: missing is not defined',
51-
]);
48+
const { log } = c.dump();
49+
t.is(log.length, 2);
50+
t.is(log[0], 'starting brokenVat test');
51+
t.regex(
52+
log[1],
53+
/^yay, rejected: Error: Vat Creation Error:.*ReferenceError.*missing/,
54+
);
5255
});
5356

5457
test('error creating vat from non-bundle', async t => {

0 commit comments

Comments
 (0)