# test.build/core/adapters/security.fixture.ts

> 32 lines of code and 5 definitions.

Tree: Codebase Testing
Language: typescript
Canonical: https://banes-lab.com/anatomy/testing#file-testing-test-build-core-adapters-security-fixture-ts
Source text: https://banes-lab.com/source/testing/test.build/core/adapters/security.fixture.ts.txt

Listed in [test.build/core/adapters](https://banes-lab.com/api/source/testing/test.build/core/adapters.md), after [test.build/core/adapters/security.adapter.test.ts](https://banes-lab.com/source/testing/test.build/core/adapters/security.adapter.test.ts.md) and before [test.build/core/adapters/server.adapter.test.ts](https://banes-lab.com/source/testing/test.build/core/adapters/server.adapter.test.ts.md).

## Definitions

- `PARAMETERS` (lexical_declaration, line 7)
- `TestKey` (interface_declaration, line 19, exported)
- `testKey` (lexical_declaration, line 24, exported)
- `home` (lexical_declaration, line 25, exported)
- `encoded` (lexical_declaration, line 27, exported)

## Contained in

- [test.build/core/adapters](https://banes-lab.com/anatomy/testing/folder-testing-test-build-core-adapters.md)

## Source

```typescript
import { GPGCONF_BINARY, GPG_BINARY } from "@banes-lab/build-scripts/configuration/constants/security.constants.ts";
import { mkdtempSync, rmSync } from "node:fs";
import { execFileSync } from "node:child_process";
import { join } from "node:path";
import { tmpdir } from "node:os";

const PARAMETERS = [
    "%no-protection",
    "Key-Type: eddsa",
    "Key-Curve: ed25519",
    "Key-Usage: sign",
    "Name-Real: Test",
    "Name-Email: test@example.test",
    "Expire-Date: 0",
    "%commit",
    "",
].join("\n");

export interface TestKey {
    readonly dispose: () => void;
    readonly encoded: string;
}

export const testKey = function testKey(): TestKey {
    const home = mkdtempSync(join(tmpdir(), "security-fixture-"));
    execFileSync(GPG_BINARY, ["--homedir", home, "--batch", "--quiet", "--gen-key"], { input: PARAMETERS, stdio: "pipe" });
    const encoded = execFileSync(GPG_BINARY, ["--homedir", home, "--batch", "--export-secret-keys"]).toString("base64");
    return {
        dispose: () => {
            execFileSync(GPGCONF_BINARY, ["--homedir", home, "--kill", "all"], { stdio: "ignore" });
            rmSync(home, { force: true, recursive: true });
        },
        encoded,
    };
};
```
