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