Skip to content

Commit

Permalink
Merge pull request #125 from MatrixAI/feature-test-splitting
Browse files Browse the repository at this point in the history
tests: split vaults and secrets tests into multiple test files
  • Loading branch information
tegefaulkes authored Feb 8, 2024
2 parents 79e15be + 43ee6fe commit 3363077
Show file tree
Hide file tree
Showing 22 changed files with 2,399 additions and 1,200 deletions.
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

0 comments on commit 3363077

Please sign in to comment.