File tree Expand file tree Collapse file tree 2 files changed +69
-0
lines changed
Expand file tree Collapse file tree 2 files changed +69
-0
lines changed Original file line number Diff line number Diff line change 1+ import { makeSQLKernelDatabase } from '@metamask/kernel-store/sqlite/nodejs' ;
2+ import { waitUntilQuiescent } from '@metamask/kernel-utils' ;
3+ import { describe , expect , it } from 'vitest' ;
4+
5+ import {
6+ extractTestLogs ,
7+ getBundleSpec ,
8+ makeKernel ,
9+ makeTestLogger ,
10+ } from './utils.ts' ;
11+
12+ describe ( 'ocap-url' , ( ) => {
13+ it ( 'user-code can make an ocap url' , async ( ) => {
14+ const { logger, entries } = makeTestLogger ( ) ;
15+ const database = await makeSQLKernelDatabase ( { } ) ;
16+ const kernel = await makeKernel ( database , true , logger ) ;
17+ const vatIds = [ 'v1' ] ;
18+ const vat = await kernel . launchSubcluster ( {
19+ bootstrap : 'alice' ,
20+ vats : {
21+ alice : {
22+ bundleSpec : getBundleSpec ( 'ocap-url' ) ,
23+ parameters : { } ,
24+ } ,
25+ } ,
26+ } ) ;
27+ expect ( vat ) . toBeDefined ( ) ;
28+ const vats = kernel . getVatIds ( ) ;
29+ expect ( vats ) . toStrictEqual ( vatIds ) ;
30+
31+ await waitUntilQuiescent ( ) ;
32+ const vatLogs = vatIds . map ( ( vatId ) => extractTestLogs ( entries , vatId ) ) ;
33+ expect ( vatLogs ) . toStrictEqual ( [
34+ // This is a placeholder for the actual ocap url.
35+ [ expect . stringContaining ( `Alice's ocap url: ocap://o+` ) ] ,
36+ ] ) ;
37+ } ) ;
38+ } ) ;
Original file line number Diff line number Diff line change 1+ import { E } from '@endo/eventual-send' ;
2+ import { Far } from '@endo/marshal' ;
3+
4+ /**
5+ * Build function for vats that will run various tests.
6+ *
7+ * @param {object } vatPowers - Special powers granted to this vat.
8+ * @param {object } vatPowers.logger - The logger for this vat.
9+ * @returns {* } The root object for the new vat.
10+ */
11+ export function buildRootObject ( { logger } ) {
12+ const { log } = logger . subLogger ( { tags : [ 'test' ] } ) ;
13+ let contact ;
14+ return Far ( 'root' , {
15+ async bootstrap ( { alice } ) {
16+ contact = Far ( 'contact' , {
17+ // An external actor can send a message to Alice by following an
18+ // ocap url like "ocap://.../contact?whoAmI=Bob&message=Hello".
19+ contact : ( whoAmI , message ) => E ( alice ) . contact ( whoAmI , message ) ,
20+ } ) ;
21+ const ocapUrl = E ( alice ) . makeContactUrl ( ) ;
22+ log ( `Alice's ocap url: ${ await ocapUrl } ` ) ;
23+ } ,
24+ // `makeOcapUrl` is an endowment available in global scope.
25+ // eslint-disable-next-line no-undef
26+ makeContactUrl : ( ) => makeOcapUrl ( contact ) ,
27+ async contact ( sender = 'unknown' , message = 'hello' ) {
28+ log ( `contact from ${ sender } : ${ message } ` ) ;
29+ } ,
30+ } ) ;
31+ }
You can’t perform that action at this time.
0 commit comments