Skip to content

Commit 73cb13b

Browse files
committed
tests: updating share.test.ts tests
1 parent 34cbe96 commit 73cb13b

File tree

1 file changed

+130
-49
lines changed

1 file changed

+130
-49
lines changed

tests/vaults/share.test.ts

Lines changed: 130 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,17 @@ import PolykeyAgent from 'polykey/dist/PolykeyAgent';
77
import * as ids from 'polykey/dist/ids';
88
import * as nodesUtils from 'polykey/dist/nodes/utils';
99
import * as vaultsUtils from 'polykey/dist/vaults/utils';
10-
import NotificationsManager from 'polykey/dist/notifications/NotificationsManager';
1110
import * as keysUtils from 'polykey/dist/keys/utils';
1211
import * as testUtils from '../utils';
1312

1413
describe('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

Comments
 (0)