Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions tests/secrets/create.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import type { VaultName } from 'polykey/dist/vaults/types';
import path from 'path';
import fs from 'fs';
import Logger, { LogLevel, StreamHandler } from '@matrixai/logger';
import PolykeyAgent from 'polykey/dist/PolykeyAgent';
import { vaultOps } from 'polykey/dist/vaults';
import * as keysUtils from 'polykey/dist/keys/utils';
import * as testUtils from '../utils';

describe('commandCreateSecret', () => {
const password = 'password';
const logger = new Logger('CLI Test', LogLevel.WARN, [new StreamHandler()]);
let dataDir: string;
let polykeyAgent: PolykeyAgent;
let passwordFile: string;
let command: Array<string>;

beforeEach(async () => {
dataDir = await fs.promises.mkdtemp(
path.join(globalThis.tmpDir, 'polykey-test-'),
);
passwordFile = path.join(dataDir, 'passwordFile');
await fs.promises.writeFile(passwordFile, 'password');
polykeyAgent = await PolykeyAgent.createPolykeyAgent({
password,
options: {
nodePath: dataDir,
agentServiceHost: '127.0.0.1',
clientServiceHost: '127.0.0.1',
keys: {
passwordOpsLimit: keysUtils.passwordOpsLimits.min,
passwordMemLimit: keysUtils.passwordMemLimits.min,
strictMemoryLock: false,
},
},
logger: logger,
});
// Authorize session
await testUtils.pkStdio(
['agent', 'unlock', '-np', dataDir, '--password-file', passwordFile],
{
env: {},
cwd: dataDir,
},
);
});
afterEach(async () => {
await polykeyAgent.stop();
await fs.promises.rm(dataDir, {
force: true,
recursive: true,
});
});

test(
'should create secrets',
async () => {
const vaultName = 'Vault1' as VaultName;
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);
const secretPath = path.join(dataDir, 'secret');
await fs.promises.writeFile(secretPath, 'this is a secret');

command = [
'secrets',
'create',
'-np',
dataDir,
secretPath,
`${vaultName}:MySecret`,
];

const result = await testUtils.pkStdio([...command], {
env: {},
cwd: dataDir,
});
expect(result.exitCode).toBe(0);

await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
const list = await vaultOps.listSecrets(vault);
expect(list.sort()).toStrictEqual(['MySecret']);
expect(
(await vaultOps.getSecret(vault, 'MySecret')).toString(),
).toStrictEqual('this is a secret');
});
},
globalThis.defaultTimeout * 2,
);
});
78 changes: 78 additions & 0 deletions tests/secrets/delete.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import type { VaultName } from 'polykey/dist/vaults/types';
import path from 'path';
import fs from 'fs';
import Logger, { LogLevel, StreamHandler } from '@matrixai/logger';
import PolykeyAgent from 'polykey/dist/PolykeyAgent';
import { vaultOps } from 'polykey/dist/vaults';
import * as keysUtils from 'polykey/dist/keys/utils';
import * as testUtils from '../utils';

describe('commandDeleteSecret', () => {
const password = 'password';
const logger = new Logger('CLI Test', LogLevel.WARN, [new StreamHandler()]);
let dataDir: string;
let polykeyAgent: PolykeyAgent;
let passwordFile: string;
let command: Array<string>;

beforeEach(async () => {
dataDir = await fs.promises.mkdtemp(
path.join(globalThis.tmpDir, 'polykey-test-'),
);
passwordFile = path.join(dataDir, 'passwordFile');
await fs.promises.writeFile(passwordFile, 'password');
polykeyAgent = await PolykeyAgent.createPolykeyAgent({
password,
options: {
nodePath: dataDir,
agentServiceHost: '127.0.0.1',
clientServiceHost: '127.0.0.1',
keys: {
passwordOpsLimit: keysUtils.passwordOpsLimits.min,
passwordMemLimit: keysUtils.passwordMemLimits.min,
strictMemoryLock: false,
},
},
logger: logger,
});
// Authorize session
await testUtils.pkStdio(
['agent', 'unlock', '-np', dataDir, '--password-file', passwordFile],
{
env: {},
cwd: dataDir,
},
);
});
afterEach(async () => {
await polykeyAgent.stop();
await fs.promises.rm(dataDir, {
force: true,
recursive: true,
});
});

test('should delete secrets', async () => {
const vaultName = 'Vault2' as VaultName;
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);

await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
await vaultOps.addSecret(vault, 'MySecret', 'this is the secret');
const list = await vaultOps.listSecrets(vault);
expect(list.sort()).toStrictEqual(['MySecret']);
});

command = ['secrets', 'delete', '-np', dataDir, `${vaultName}:MySecret`];

const result = await testUtils.pkStdio([...command], {
env: {},
cwd: dataDir,
});
expect(result.exitCode).toBe(0);

await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
const list = await vaultOps.listSecrets(vault);
expect(list.sort()).toStrictEqual([]);
});
});
});
72 changes: 72 additions & 0 deletions tests/secrets/get.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import type { VaultName } from 'polykey/dist/vaults/types';
import path from 'path';
import fs from 'fs';
import Logger, { LogLevel, StreamHandler } from '@matrixai/logger';
import PolykeyAgent from 'polykey/dist/PolykeyAgent';
import { vaultOps } from 'polykey/dist/vaults';
import * as keysUtils from 'polykey/dist/keys/utils';
import * as testUtils from '../utils';

describe('commandGetSecret', () => {
const password = 'password';
const logger = new Logger('CLI Test', LogLevel.WARN, [new StreamHandler()]);
let dataDir: string;
let polykeyAgent: PolykeyAgent;
let passwordFile: string;
let command: Array<string>;

beforeEach(async () => {
dataDir = await fs.promises.mkdtemp(
path.join(globalThis.tmpDir, 'polykey-test-'),
);
passwordFile = path.join(dataDir, 'passwordFile');
await fs.promises.writeFile(passwordFile, 'password');
polykeyAgent = await PolykeyAgent.createPolykeyAgent({
password,
options: {
nodePath: dataDir,
agentServiceHost: '127.0.0.1',
clientServiceHost: '127.0.0.1',
keys: {
passwordOpsLimit: keysUtils.passwordOpsLimits.min,
passwordMemLimit: keysUtils.passwordMemLimits.min,
strictMemoryLock: false,
},
},
logger: logger,
});
// Authorize session
await testUtils.pkStdio(
['agent', 'unlock', '-np', dataDir, '--password-file', passwordFile],
{
env: {},
cwd: dataDir,
},
);
});
afterEach(async () => {
await polykeyAgent.stop();
await fs.promises.rm(dataDir, {
force: true,
recursive: true,
});
});

test('should retrieve secrets', async () => {
const vaultName = 'Vault3' as VaultName;
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);

await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
await vaultOps.addSecret(vault, 'MySecret', 'this is the secret');
});

command = ['secrets', 'get', '-np', dataDir, `${vaultName}:MySecret`];

const result = await testUtils.pkStdio([...command], {
env: {},
cwd: dataDir,
});
expect(result.stdout).toBe('this is the secret');
expect(result.exitCode).toBe(0);
});
});
77 changes: 77 additions & 0 deletions tests/secrets/list.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import type { VaultName } from 'polykey/dist/vaults/types';
import path from 'path';
import fs from 'fs';
import Logger, { LogLevel, StreamHandler } from '@matrixai/logger';
import PolykeyAgent from 'polykey/dist/PolykeyAgent';
import { vaultOps } from 'polykey/dist/vaults';
import * as keysUtils from 'polykey/dist/keys/utils';
import * as testUtils from '../utils';

describe('commandListSecrets', () => {
const password = 'password';
const logger = new Logger('CLI Test', LogLevel.WARN, [new StreamHandler()]);
let dataDir: string;
let polykeyAgent: PolykeyAgent;
let passwordFile: string;
let command: Array<string>;

beforeEach(async () => {
dataDir = await fs.promises.mkdtemp(
path.join(globalThis.tmpDir, 'polykey-test-'),
);
passwordFile = path.join(dataDir, 'passwordFile');
await fs.promises.writeFile(passwordFile, 'password');
polykeyAgent = await PolykeyAgent.createPolykeyAgent({
password,
options: {
nodePath: dataDir,
agentServiceHost: '127.0.0.1',
clientServiceHost: '127.0.0.1',
keys: {
passwordOpsLimit: keysUtils.passwordOpsLimits.min,
passwordMemLimit: keysUtils.passwordMemLimits.min,
strictMemoryLock: false,
},
},
logger: logger,
});
// Authorize session
await testUtils.pkStdio(
['agent', 'unlock', '-np', dataDir, '--password-file', passwordFile],
{
env: {},
cwd: dataDir,
},
);
});
afterEach(async () => {
await polykeyAgent.stop();
await fs.promises.rm(dataDir, {
force: true,
recursive: true,
});
});

test(
'should list secrets',
async () => {
const vaultName = 'Vault4' as VaultName;
const vaultId = await polykeyAgent.vaultManager.createVault(vaultName);

await polykeyAgent.vaultManager.withVaults([vaultId], async (vault) => {
await vaultOps.addSecret(vault, 'MySecret1', 'this is the secret 1');
await vaultOps.addSecret(vault, 'MySecret2', 'this is the secret 2');
await vaultOps.addSecret(vault, 'MySecret3', 'this is the secret 3');
});

command = ['secrets', 'list', '-np', dataDir, vaultName];

const result = await testUtils.pkStdio([...command], {
env: {},
cwd: dataDir,
});
expect(result.exitCode).toBe(0);
},
globalThis.defaultTimeout * 2,
);
});
Loading