@@ -7,15 +7,17 @@ import PolykeyAgent from 'polykey/dist/PolykeyAgent';
77import * as ids from 'polykey/dist/ids' ;
88import * as nodesUtils from 'polykey/dist/nodes/utils' ;
99import * as vaultsUtils from 'polykey/dist/vaults/utils' ;
10- import NotificationsManager from 'polykey/dist/notifications/NotificationsManager' ;
1110import * as keysUtils from 'polykey/dist/keys/utils' ;
1211import * as testUtils from '../utils' ;
1312
1413describe ( 'commandShare' , ( ) => {
1514 const password = 'password' ;
1615 const logger = new Logger ( 'CLI Test' , LogLevel . WARN , [ new StreamHandler ( ) ] ) ;
1716 let dataDir : string ;
18- let polykeyAgent : PolykeyAgent ;
17+ let nodePathLocal : string ;
18+ let nodePathPeer : string ;
19+ let polykeyAgentLocal : PolykeyAgent ;
20+ let polykeyAgentPeer : PolykeyAgent ;
1921 let command : Array < string > ;
2022 let vaultNumber : number ;
2123 let vaultName : VaultName ;
@@ -41,10 +43,12 @@ describe('commandShare', () => {
4143 dataDir = await fs . promises . mkdtemp (
4244 path . join ( globalThis . tmpDir , 'polykey-test-' ) ,
4345 ) ;
44- polykeyAgent = await PolykeyAgent . createPolykeyAgent ( {
46+ nodePathLocal = path . join ( dataDir , 'nodeLocal' ) ;
47+ nodePathPeer = path . join ( dataDir , 'nodePeer' ) ;
48+ polykeyAgentLocal = await PolykeyAgent . createPolykeyAgent ( {
4549 password,
4650 options : {
47- nodePath : dataDir ,
51+ nodePath : nodePathLocal ,
4852 agentServiceHost : '127.0.0.1' ,
4953 clientServiceHost : '127.0.0.1' ,
5054 keys : {
@@ -55,66 +59,143 @@ describe('commandShare', () => {
5559 } ,
5660 logger : logger ,
5761 } ) ;
58- await polykeyAgent . gestaltGraph . setNode ( node1 ) ;
59- await polykeyAgent . gestaltGraph . setNode ( node2 ) ;
60- await polykeyAgent . gestaltGraph . setNode ( node3 ) ;
62+ polykeyAgentPeer = await PolykeyAgent . createPolykeyAgent ( {
63+ password,
64+ options : {
65+ nodePath : nodePathPeer ,
66+ agentServiceHost : '127.0.0.1' ,
67+ clientServiceHost : '127.0.0.1' ,
68+ keys : {
69+ passwordOpsLimit : keysUtils . passwordOpsLimits . min ,
70+ passwordMemLimit : keysUtils . passwordMemLimits . min ,
71+ strictMemoryLock : false ,
72+ } ,
73+ } ,
74+ logger : logger ,
75+ } ) ;
76+ await polykeyAgentLocal . gestaltGraph . setNode ( node1 ) ;
77+ await polykeyAgentLocal . gestaltGraph . setNode ( node2 ) ;
78+ await polykeyAgentLocal . gestaltGraph . setNode ( node3 ) ;
6179
6280 vaultNumber = 0 ;
6381 vaultName = genVaultName ( ) ;
6482 command = [ ] ;
6583 } ) ;
6684 afterEach ( async ( ) => {
67- await polykeyAgent . stop ( ) ;
85+ await polykeyAgentLocal . stop ( ) ;
86+ await polykeyAgentPeer . stop ( ) ;
6887 await fs . promises . rm ( dataDir , {
6988 force : true ,
7089 recursive : true ,
7190 } ) ;
7291 } ) ;
7392
7493 test ( 'Should share a vault' , async ( ) => {
75- const mockedSendNotification = jest . spyOn (
76- NotificationsManager . prototype ,
77- 'sendNotification' ,
94+ const vaultId = await polykeyAgentLocal . vaultManager . createVault ( vaultName ) ;
95+ const vaultIdEncoded = vaultsUtils . encodeVaultId ( vaultId ) ;
96+ const targetNodeId = polykeyAgentPeer . keyRing . getNodeId ( ) ;
97+ const targetNodeIdEncoded = nodesUtils . encodeNodeId ( targetNodeId ) ;
98+ await polykeyAgentLocal . gestaltGraph . setNode ( {
99+ nodeId : targetNodeId ,
100+ } ) ;
101+ await polykeyAgentPeer . gestaltGraph . setNode ( {
102+ nodeId : polykeyAgentLocal . keyRing . getNodeId ( ) ,
103+ } ) ;
104+ await polykeyAgentPeer . gestaltGraph . setGestaltAction (
105+ [ 'node' , polykeyAgentLocal . keyRing . getNodeId ( ) ] ,
106+ 'notify' ,
78107 ) ;
79- try {
80- // We don't want to actually send a notification
81- mockedSendNotification . mockResolvedValue ( {
82- notificationId : ids . generateNotificationIdFromTimestamp ( Date . now ( ) ) ,
83- sendP : Promise . resolve ( ) ,
84- } ) ;
85- const vaultId = await polykeyAgent . vaultManager . createVault ( vaultName ) ;
86- const vaultIdEncoded = vaultsUtils . encodeVaultId ( vaultId ) ;
87- const targetNodeId = nodeIdGenerator ( ) ;
88- const targetNodeIdEncoded = nodesUtils . encodeNodeId ( targetNodeId ) ;
89- await polykeyAgent . gestaltGraph . setNode ( {
90- nodeId : targetNodeId ,
91- } ) ;
92- expect (
93- ( await polykeyAgent . acl . getNodePerm ( targetNodeId ) ) ?. vaults [ vaultId ] ,
94- ) . toBeUndefined ( ) ;
108+ expect (
109+ ( await polykeyAgentLocal . acl . getNodePerm ( targetNodeId ) ) ?. vaults [ vaultId ] ,
110+ ) . toBeUndefined ( ) ;
111+
112+ command = [
113+ 'vaults' ,
114+ 'share' ,
115+ '-np' ,
116+ nodePathLocal ,
117+ vaultIdEncoded ,
118+ targetNodeIdEncoded ,
119+ ] ;
120+ const result = await testUtils . pkStdio ( [ ...command ] , {
121+ env : { PK_PASSWORD : password } ,
122+ cwd : nodePathLocal ,
123+ } ) ;
124+ expect ( result . exitCode ) . toBe ( 0 ) ;
125+
126+ // Check permission
127+ const permissions1 = ( await polykeyAgentLocal . acl . getNodePerm ( targetNodeId ) )
128+ ?. vaults [ vaultId ] ;
129+ expect ( permissions1 ) . toBeDefined ( ) ;
130+ expect ( permissions1 . pull ) . toBeDefined ( ) ;
131+ expect ( permissions1 . clone ) . toBeDefined ( ) ;
132+ } ) ;
133+ test ( 'sharing vault handles failure to send notification due to trust' , async ( ) => {
134+ const vaultId = await polykeyAgentLocal . vaultManager . createVault ( vaultName ) ;
135+ const vaultIdEncoded = vaultsUtils . encodeVaultId ( vaultId ) ;
136+ const targetNodeId = polykeyAgentPeer . keyRing . getNodeId ( ) ;
137+ const targetNodeIdEncoded = nodesUtils . encodeNodeId ( targetNodeId ) ;
138+ await polykeyAgentLocal . gestaltGraph . setNode ( {
139+ nodeId : targetNodeId ,
140+ } ) ;
141+ expect (
142+ ( await polykeyAgentLocal . acl . getNodePerm ( targetNodeId ) ) ?. vaults [ vaultId ] ,
143+ ) . toBeUndefined ( ) ;
95144
96- command = [
97- 'vaults' ,
98- 'share' ,
99- '-np' ,
100- dataDir ,
101- vaultIdEncoded ,
102- targetNodeIdEncoded ,
103- ] ;
104- const result = await testUtils . pkStdio ( [ ...command ] , {
105- env : { PK_PASSWORD : password } ,
106- cwd : dataDir ,
107- } ) ;
108- expect ( result . exitCode ) . toBe ( 0 ) ;
145+ command = [
146+ 'vaults' ,
147+ 'share' ,
148+ '-np' ,
149+ nodePathLocal ,
150+ vaultIdEncoded ,
151+ targetNodeIdEncoded ,
152+ ] ;
153+ const result = await testUtils . pkStdio ( [ ...command ] , {
154+ env : { PK_PASSWORD : password } ,
155+ cwd : nodePathLocal ,
156+ } ) ;
157+ // While the notification should fail the sharing of a vault should still succeed
158+ expect ( result . exitCode ) . toBe ( 0 ) ;
159+
160+ // Check permission
161+ const permissions1 = ( await polykeyAgentLocal . acl . getNodePerm ( targetNodeId ) )
162+ ?. vaults [ vaultId ] ;
163+ expect ( permissions1 ) . toBeDefined ( ) ;
164+ expect ( permissions1 . pull ) . toBeDefined ( ) ;
165+ expect ( permissions1 . clone ) . toBeDefined ( ) ;
166+ } ) ;
167+ test ( 'sharing vault handles failure to send notification due connection failure' , async ( ) => {
168+ const vaultId = await polykeyAgentLocal . vaultManager . createVault ( vaultName ) ;
169+ const vaultIdEncoded = vaultsUtils . encodeVaultId ( vaultId ) ;
170+ const targetNodeId = nodeIdGenerator ( ) ;
171+ const targetNodeIdEncoded = nodesUtils . encodeNodeId ( targetNodeId ) ;
172+ await polykeyAgentLocal . gestaltGraph . setNode ( {
173+ nodeId : targetNodeId ,
174+ } ) ;
175+ expect (
176+ ( await polykeyAgentLocal . acl . getNodePerm ( targetNodeId ) ) ?. vaults [ vaultId ] ,
177+ ) . toBeUndefined ( ) ;
178+
179+ command = [
180+ 'vaults' ,
181+ 'share' ,
182+ '-np' ,
183+ nodePathLocal ,
184+ vaultIdEncoded ,
185+ targetNodeIdEncoded ,
186+ ] ;
187+ const result = await testUtils . pkStdio ( [ ...command ] , {
188+ env : { PK_PASSWORD : password } ,
189+ cwd : nodePathLocal ,
190+ } ) ;
191+ // While the notification should fail the sharing of a vault should still succeed
192+ expect ( result . exitCode ) . toBe ( 0 ) ;
109193
110- // Check permission
111- const permissions1 = ( await polykeyAgent . acl . getNodePerm ( targetNodeId ) )
112- ?. vaults [ vaultId ] ;
113- expect ( permissions1 ) . toBeDefined ( ) ;
114- expect ( permissions1 . pull ) . toBeDefined ( ) ;
115- expect ( permissions1 . clone ) . toBeDefined ( ) ;
116- } finally {
117- mockedSendNotification . mockRestore ( ) ;
118- }
194+ // Check permission
195+ const permissions1 = ( await polykeyAgentLocal . acl . getNodePerm ( targetNodeId ) )
196+ ?. vaults [ vaultId ] ;
197+ expect ( permissions1 ) . toBeDefined ( ) ;
198+ expect ( permissions1 . pull ) . toBeDefined ( ) ;
199+ expect ( permissions1 . clone ) . toBeDefined ( ) ;
119200 } ) ;
120201} ) ;
0 commit comments