diff --git a/tests/bin/agent/lock.test.ts b/tests/bin/agent/lock.test.ts index e95ec314a8..451dd88fb1 100644 --- a/tests/bin/agent/lock.test.ts +++ b/tests/bin/agent/lock.test.ts @@ -6,23 +6,27 @@ import Logger, { LogLevel, StreamHandler } from '@matrixai/logger'; import Session from '@/sessions/Session'; import config from '@/config'; import * as testBinUtils from '../utils'; -import * as testUtils from '../../utils'; import { runTestIfPlatforms } from '../../utils'; +import { globalRootKeyPems } from '../../globalRootKeyPems'; jest.mock('prompts'); const mockedPrompts = mocked(prompts.prompt); describe('lock', () => { const logger = new Logger('lock test', LogLevel.WARN, [new StreamHandler()]); - let globalAgentDir; - let globalAgentPassword; - let globalAgentClose; - beforeAll(async () => { - ({ globalAgentDir, globalAgentPassword, globalAgentClose } = - await testUtils.setupGlobalAgent(logger)); - }, globalThis.maxTimeout); - afterAll(async () => { - await globalAgentClose(); + let agentDir: string; + let agentPassword: string; + let agentClose: () => Promise; + beforeEach(async () => { + ({ agentDir, agentPassword, agentClose } = + await testBinUtils.setupTestAgent( + global.testCmd, + globalRootKeyPems[0], + logger, + )); + }); + afterEach(async () => { + await agentClose(); }); runTestIfPlatforms('linux', 'docker')( 'lock deletes the session token', @@ -30,21 +34,21 @@ describe('lock', () => { await testBinUtils.pkStdioSwitch(global.testCmd)( ['agent', 'unlock'], { - PK_NODE_PATH: globalAgentDir, - PK_PASSWORD: globalAgentPassword, + PK_NODE_PATH: agentDir, + PK_PASSWORD: agentPassword, }, - globalAgentDir, + agentDir, ); const { exitCode } = await testBinUtils.pkStdioSwitch(global.testCmd)( ['agent', 'lock'], { - PK_NODE_PATH: globalAgentDir, + PK_NODE_PATH: agentDir, }, - globalAgentDir, + agentDir, ); expect(exitCode).toBe(0); const session = await Session.createSession({ - sessionTokenPath: path.join(globalAgentDir, config.defaults.tokenBase), + sessionTokenPath: path.join(agentDir, config.defaults.tokenBase), fs, logger, }); @@ -55,7 +59,7 @@ describe('lock', () => { runTestIfPlatforms('linux')( 'lock ensures re-authentication is required', async () => { - const password = globalAgentPassword; + const password = agentPassword; mockedPrompts.mockClear(); mockedPrompts.mockImplementation(async (_opts: any) => { return { password }; @@ -63,26 +67,26 @@ describe('lock', () => { await testBinUtils.pkStdio( ['agent', 'unlock'], { - PK_NODE_PATH: globalAgentDir, - PK_PASSWORD: globalAgentPassword, + PK_NODE_PATH: agentDir, + PK_PASSWORD: agentPassword, }, - globalAgentDir, + agentDir, ); // Session token is deleted await testBinUtils.pkStdio( ['agent', 'lock'], { - PK_NODE_PATH: globalAgentDir, + PK_NODE_PATH: agentDir, }, - globalAgentDir, + agentDir, ); // Will prompt to reauthenticate await testBinUtils.pkStdio( ['agent', 'status'], { - PK_NODE_PATH: globalAgentDir, + PK_NODE_PATH: agentDir, }, - globalAgentDir, + agentDir, ); // Prompted for password 1 time expect(mockedPrompts.mock.calls.length).toBe(1); diff --git a/tests/bin/agent/start.test.ts b/tests/bin/agent/start.test.ts index 850d5eb50d..9d97862ac8 100644 --- a/tests/bin/agent/start.test.ts +++ b/tests/bin/agent/start.test.ts @@ -832,9 +832,9 @@ describe('start', () => { runDescribeIfPlatforms('linux').only('start with global agent', () => { let agentDataDir; let agent1Status: StatusLive; - let agent1Stop: () => void; + let agent1Close: () => Promise; let agent2Status: StatusLive; - let agent2Stop: () => void; + let agent2Close: () => Promise; let seedNodeId1: NodeId; let seedNodeHost1: Host; let seedNodePort1: Port; @@ -846,21 +846,15 @@ describe('start', () => { agentDataDir = await fs.promises.mkdtemp( path.join(global.tmpDir, 'polykey-test-'), ); - const agent1Path = path.join(agentDataDir, 'agent1'); - await fs.promises.mkdir(agent1Path); - ({ agentStatus: agent1Status, agentStop: agent1Stop } = + ({ agentStatus: agent1Status, agentClose: agent1Close } = await testBinUtils.setupTestAgent( undefined, - agent1Path, globalRootKeyPems[0], logger, )); - const agent2Path = path.join(agentDataDir, 'agent2'); - await fs.promises.mkdir(agent2Path); - ({ agentStatus: agent2Status, agentStop: agent2Stop } = + ({ agentStatus: agent2Status, agentClose: agent2Close } = await testBinUtils.setupTestAgent( undefined, - agent2Path, globalRootKeyPems[1], logger, )); @@ -870,10 +864,10 @@ describe('start', () => { seedNodeId2 = agent2Status.data.nodeId; seedNodeHost2 = agent2Status.data.proxyHost; seedNodePort2 = agent2Status.data.proxyPort; - }, globalThis.maxTimeout); + }); afterEach(async () => { - agent1Stop(); - agent2Stop(); + await agent1Close(); + await agent2Close(); await fs.promises.rm(agentDataDir, { force: true, recursive: true, diff --git a/tests/bin/utils.ts b/tests/bin/utils.ts index 5b3b02a07e..6f80e20e80 100644 --- a/tests/bin/utils.ts +++ b/tests/bin/utils.ts @@ -537,17 +537,18 @@ function expectProcessError( /** * * @param cmd - Optional target command to run, usually `global.testCmd` - * @param agentDir - Directory to run the agent in, must exist * @param privateKeyPem - Optional root key override to skip key generation * @param logger */ async function setupTestAgent( cmd: string | undefined, - agentDir: string, privateKeyPem: PrivateKeyPem, logger: Logger, -): Promise<{ agentStatus: StatusLive; agentStop: () => void }> { - const password = 'password'; +) { + const agentDir = await fs.promises.mkdtemp( + path.join(global.tmpDir, 'polykey-test-'), + ); + const agentPassword = 'password'; const agentProcess = await pkSpawnSwitch(cmd)( [ 'agent', @@ -565,7 +566,7 @@ async function setupTestAgent( '--verbose', ], { - PK_PASSWORD: password, + PK_PASSWORD: agentPassword, PK_ROOT_KEY: privateKeyPem, }, agentDir, @@ -581,9 +582,18 @@ async function setupTestAgent( data: { ...data, nodeId: validationUtils.parseNodeId(data.nodeId) }, }; try { - return { agentStatus, agentStop: () => agentProcess.kill('SIGINT') }; + return { + agentStatus, + agentClose: async () => { + agentProcess.kill(); + await fs.promises.rm(agentDir, { recursive: true, force: true }); + }, + agentDir, + agentPassword, + }; } catch (e) { - agentProcess.kill('SIGINT'); + agentProcess.kill(); + await fs.promises.rm(agentDir, { recursive: true, force: true }); throw e; } }