@@ -7,15 +7,17 @@ import PolykeyAgent from 'polykey/dist/PolykeyAgent';
7
7
import * as ids from 'polykey/dist/ids' ;
8
8
import * as nodesUtils from 'polykey/dist/nodes/utils' ;
9
9
import * as vaultsUtils from 'polykey/dist/vaults/utils' ;
10
- import NotificationsManager from 'polykey/dist/notifications/NotificationsManager' ;
11
10
import * as keysUtils from 'polykey/dist/keys/utils' ;
12
11
import * as testUtils from '../utils' ;
13
12
14
13
describe ( 'commandShare' , ( ) => {
15
14
const password = 'password' ;
16
15
const logger = new Logger ( 'CLI Test' , LogLevel . WARN , [ new StreamHandler ( ) ] ) ;
17
16
let dataDir : string ;
18
- let polykeyAgent : PolykeyAgent ;
17
+ let nodePathLocal : string ;
18
+ let nodePathPeer : string ;
19
+ let polykeyAgentLocal : PolykeyAgent ;
20
+ let polykeyAgentPeer : PolykeyAgent ;
19
21
let command : Array < string > ;
20
22
let vaultNumber : number ;
21
23
let vaultName : VaultName ;
@@ -41,10 +43,12 @@ describe('commandShare', () => {
41
43
dataDir = await fs . promises . mkdtemp (
42
44
path . join ( globalThis . tmpDir , 'polykey-test-' ) ,
43
45
) ;
44
- polykeyAgent = await PolykeyAgent . createPolykeyAgent ( {
46
+ nodePathLocal = path . join ( dataDir , 'nodeLocal' ) ;
47
+ nodePathPeer = path . join ( dataDir , 'nodePeer' ) ;
48
+ polykeyAgentLocal = await PolykeyAgent . createPolykeyAgent ( {
45
49
password,
46
50
options : {
47
- nodePath : dataDir ,
51
+ nodePath : nodePathLocal ,
48
52
agentServiceHost : '127.0.0.1' ,
49
53
clientServiceHost : '127.0.0.1' ,
50
54
keys : {
@@ -55,66 +59,143 @@ describe('commandShare', () => {
55
59
} ,
56
60
logger : logger ,
57
61
} ) ;
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 ) ;
61
79
62
80
vaultNumber = 0 ;
63
81
vaultName = genVaultName ( ) ;
64
82
command = [ ] ;
65
83
} ) ;
66
84
afterEach ( async ( ) => {
67
- await polykeyAgent . stop ( ) ;
85
+ await polykeyAgentLocal . stop ( ) ;
86
+ await polykeyAgentPeer . stop ( ) ;
68
87
await fs . promises . rm ( dataDir , {
69
88
force : true ,
70
89
recursive : true ,
71
90
} ) ;
72
91
} ) ;
73
92
74
93
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' ,
78
107
) ;
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 ( ) ;
95
144
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 ) ;
109
193
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 ( ) ;
119
200
} ) ;
120
201
} ) ;
0 commit comments