Skip to content

Commit afb4bc4

Browse files
committed
chore: working on adding non-zero exit codes
[ci skip]
1 parent 4b1663b commit afb4bc4

File tree

2 files changed

+22
-39
lines changed

2 files changed

+22
-39
lines changed

src/secrets/CommandMkdir.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import * as binUtils from '../utils';
44
import * as binOptions from '../utils/options';
55
import * as binParsers from '../utils/parsers';
66
import * as binProcessors from '../utils/processors';
7-
import { ErrorMessage } from 'polykey/dist/client/types';
87
import { ErrorPolykeyCLIUncaughtException } from '@/errors';
8+
import { utils } from '@';
99

1010
class CommandMkdir extends CommandPolykey {
1111
constructor(...args: ConstructorParameters<typeof CommandPolykey>) {
@@ -75,24 +75,27 @@ class CommandMkdir extends CommandPolykey {
7575
// As git does not track empty directories in version control, we need
7676
// to inform the user about this.
7777
process.stderr.write(
78-
'WARNING: Empty directories will not be affected by modifications to the vault state (version change, sharing/cloning, etc.)',
78+
'WARNING: Empty directories will not be affected by modifications to the vault state (version change, sharing/cloning, etc.)\n',
7979
);
8080

8181
for await (const result of response.readable) {
8282
if (result.type === 'error') {
83-
const error = result as ErrorMessage;
83+
process.exitCode = 1;
8484
let message: string = '';
85-
if (error.code === 'ENOENT') {
86-
message = 'No such secret or directory';
87-
} else if (error.code === 'EEXIST') {
88-
message = 'Secret or directory exists';
89-
} else {
90-
throw new ErrorPolykeyCLIUncaughtException(
91-
`Unexpected error code ${error.code}`,
92-
);
85+
switch (result.code) {
86+
case 'ENOENT':
87+
message = 'No such secret or directory';
88+
break;
89+
case 'EEXIST':
90+
message = 'Secret or directory exists';
91+
break;
92+
default:
93+
throw new ErrorPolykeyCLIUncaughtException(
94+
`Unexpected error code: ${result.code}`,
95+
);
9396
}
9497
process.stderr.write(
95-
`${error.code}: cannot create directory ${error.reason}: ${message}`,
98+
`${result.code}: cannot create directory ${result.reason}: ${message}\n`,
9699
);
97100
}
98101
}

tests/secrets/mkdir.test.ts

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import PolykeyAgent from 'polykey/dist/PolykeyAgent';
66
import { vaultOps } from 'polykey/dist/vaults';
77
import * as keysUtils from 'polykey/dist/keys/utils';
88
import * as testUtils from '../utils';
9-
import { remoteErrorCause } from '@/utils';
109

1110
describe('commandMkdir', () => {
1211
const password = 'password';
@@ -46,21 +45,19 @@ describe('commandMkdir', () => {
4645
const vaultName = 'vault' as VaultName;
4746
const dirName = 'dir';
4847
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
49-
5048
command = [
5149
'secrets',
5250
'mkdir',
5351
'-np',
5452
dataDir,
5553
`${vaultName}:${dirName}`
5654
];
57-
5855
const result = await testUtils.pkStdio([...command], {
5956
env: { PK_PASSWORD: password },
6057
cwd: dataDir,
6158
});
6259
expect(result.exitCode).toBe(0);
63-
60+
expect(result.stderr).toInclude('WARNING');
6461
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
6562
const stat = await vaultOps.statSecret(vault, dirName);
6663
expect(stat.isDirectory()).toBeTruthy();
@@ -72,7 +69,6 @@ describe('commandMkdir', () => {
7269
const dirName2 = 'dir2';
7370
const dirNameNested = `${dirName1}/${dirName2}`;
7471
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
75-
7672
command = [
7773
'secrets',
7874
'mkdir',
@@ -81,13 +77,11 @@ describe('commandMkdir', () => {
8177
`${vaultName}:${dirNameNested}`,
8278
'--recursive'
8379
];
84-
8580
const result = await testUtils.pkStdio([...command], {
8681
env: { PK_PASSWORD: password },
8782
cwd: dataDir,
8883
});
8984
expect(result.exitCode).toBe(0);
90-
9185
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
9286
const stat1 = await vaultOps.statSecret(vault, dirName1);
9387
expect(stat1.isDirectory()).toBeTruthy();
@@ -101,22 +95,19 @@ describe('commandMkdir', () => {
10195
const dirName2 = 'dir2';
10296
const dirNameNested = `${dirName1}/${dirName2}`;
10397
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
104-
10598
command = [
10699
'secrets',
107100
'mkdir',
108101
'-np',
109102
dataDir,
110103
`${vaultName}:${dirNameNested}`,
111104
];
112-
113105
const result = await testUtils.pkStdio([...command], {
114106
env: { PK_PASSWORD: password },
115107
cwd: dataDir,
116108
});
117-
expect(result.exitCode).toBe(0);
118-
expect(result.stderr).toBeDefined();
119-
109+
expect(result.exitCode).toBe(1);
110+
expect(result.stderr).toInclude('ENOENT');
120111
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
121112
await vault.readF(async (efs) => {
122113
const dirName1P = efs.readdir(dirName1);
@@ -130,28 +121,24 @@ describe('commandMkdir', () => {
130121
const vaultName = 'vault' as VaultName;
131122
const dirName = 'dir-exists';
132123
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
133-
134124
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
135125
await vault.writeF(async (efs) => {
136126
await efs.mkdir(dirName);
137127
});
138128
});
139-
140129
command = [
141130
'secrets',
142131
'mkdir',
143132
'-np',
144133
dataDir,
145134
`${vaultName}:${dirName}`,
146135
];
147-
148136
const result = await testUtils.pkStdio([...command], {
149137
env: { PK_PASSWORD: password },
150138
cwd: dataDir,
151139
});
152-
expect(result.exitCode).toBe(0);
153-
expect(result.stderr).toBeDefined();
154-
140+
expect(result.exitCode).toBe(1);
141+
expect(result.stderr).toInclude('EEXIST');
155142
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
156143
await vault.readF(async (efs) => {
157144
const dirP = efs.readdir(dirName);
@@ -164,28 +151,24 @@ describe('commandMkdir', () => {
164151
const secretName = 'secret-exists';
165152
const secretContent = 'secret-content';
166153
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
167-
168154
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
169155
await vault.writeF(async (efs) => {
170156
await efs.writeFile(secretName, secretContent);
171157
});
172158
});
173-
174159
command = [
175160
'secrets',
176161
'mkdir',
177162
'-np',
178163
dataDir,
179164
`${vaultName}:${secretName}`,
180165
];
181-
182166
const result = await testUtils.pkStdio([...command], {
183167
env: { PK_PASSWORD: password },
184168
cwd: dataDir,
185169
});
186-
expect(result.exitCode).toBe(0);
187-
expect(result.stderr).toBeDefined();
188-
170+
expect(result.exitCode).toBe(1);
171+
expect(result.stderr).toInclude('EEXIST');
189172
await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
190173
await vault.readF(async (efs) => {
191174
const stat = await efs.stat(secretName);
@@ -203,7 +186,6 @@ describe('commandMkdir', () => {
203186
const dirName1 = 'dir1';
204187
const dirName2 = 'dir2';
205188
const dirName3 = 'dir3';
206-
207189
command = [
208190
'secrets',
209191
'mkdir',
@@ -213,13 +195,11 @@ describe('commandMkdir', () => {
213195
`${vaultName2}:${dirName2}`,
214196
`${vaultName1}:${dirName3}`,
215197
];
216-
217198
const result = await testUtils.pkStdio([...command], {
218199
env: { PK_PASSWORD: password },
219200
cwd: dataDir,
220201
});
221202
expect(result.exitCode).toBe(0);
222-
223203
await polykeyAgent.vaultManager.withVaults([vaultId1, vaultId2], async (vault1, vault2) => {
224204
const stat1 = await vaultOps.statSecret(vault1, dirName1);
225205
expect(stat1.isDirectory()).toBeTruthy();

0 commit comments

Comments
 (0)