Skip to content

Commit

Permalink
test(cmd-api-server): jestify install-basic-plugin-keychain-memory.test
Browse files Browse the repository at this point in the history
Signed-off-by: Peter Somogyvari <peter.somogyvari@accenture.com>
  • Loading branch information
petermetz committed Sep 9, 2024
1 parent 0b70ec9 commit 6059a7a
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 83 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ jobs:
JEST_TEST_COVERAGE_PATH: ./code-coverage-ts/cactus-cmd-api-server
JEST_TEST_CODE_COVERAGE_ENABLED: true
TAPE_TEST_PATTERN: >-
--files={./packages/cactus-cmd-api-server/src/test/typescript/unit/config/self-signed-certificate-generator/certificates-work-for-mutual-tls.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/config/self-signed-certificate-generator/generates-working-certificates.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/grpc-js-proto-loader-client-healthcheck.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/grpc-proto-gen-ts-client-healthcheck.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/grpc-proto-gen-ts-client-m-tls-enabled.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-consortium-manual.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-keychain-memory.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-ledger-connector-fabric-0-7-0.test.ts}
--files={./packages/cactus-cmd-api-server/src/test/typescript/unit/config/self-signed-certificate-generator/certificates-work-for-mutual-tls.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/config/self-signed-certificate-generator/generates-working-certificates.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/grpc-js-proto-loader-client-healthcheck.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/grpc-proto-gen-ts-client-healthcheck.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/grpc-proto-gen-ts-client-m-tls-enabled.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-consortium-manual.test.ts,./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-ledger-connector-fabric-0-7-0.test.ts}
TAPE_TEST_RUNNER_DISABLED: false
runs-on: ubuntu-22.04
steps:
Expand Down
1 change: 0 additions & 1 deletion .taprc
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ files:
- ./packages/cactus-test-tooling/src/test/typescript/integration/besu/besu-test-ledger/constructor-validates-options.test.ts
- ./packages/cactus-test-plugin-htlc-eth-besu/src/test/typescript/integration/plugin-htlc-eth-besu/get-single-status-endpoint.test.ts
- ./packages/cactus-test-plugin-htlc-eth-besu/src/test/typescript/integration/plugin-htlc-eth-besu/openapi/openapi-validation.test.ts
- ./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-keychain-memory.test.ts
- ./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-ledger-connector-fabric-0-7-0.test.ts
- ./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-consortium-manual.test.ts
- ./packages/cactus-cmd-api-server/src/test/typescript/unit/config/self-signed-certificate-generator/generates-working-certificates.test.ts
Expand Down
1 change: 0 additions & 1 deletion jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ module.exports = {
`./packages/cactus-test-plugin-htlc-eth-besu/src/test/typescript/integration/plugin-htlc-eth-besu/get-single-status-endpoint.test.ts`,
`./packages/cactus-test-plugin-htlc-eth-besu/src/test/typescript/integration/plugin-htlc-eth-besu/get--status-endpoint-invalid.test.ts`,
`./packages/cactus-test-plugin-htlc-eth-besu/src/test/typescript/integration/plugin-htlc-eth-besu/openapi/openapi-validation.test.ts`,
`./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-keychain-memory.test.ts`,
`./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-ledger-connector-fabric-0-7-0.test.ts`,
`./packages/cactus-cmd-api-server/src/test/typescript/unit/plugins/install-basic-plugin-consortium-manual.test.ts`,
`./packages/cactus-cmd-api-server/src/test/typescript/unit/config/self-signed-certificate-generator/generates-working-certificates.test.ts`,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import test, { Test } from "tape-promise/tape";
import path from "node:path";

import "jest-extended";
import { v4 as uuidv4 } from "uuid";
import { StatusCodes } from "http-status-codes";

import { LogLevelDesc } from "@hyperledger/cactus-common";
import { LoggerProvider, LogLevelDesc } from "@hyperledger/cactus-common";

import {
Configuration,
Expand All @@ -15,91 +18,104 @@ import {
ConfigService,
} from "../../../../main/typescript/public-api";

import { ICactusApiServerOptions } from "../../../../main/typescript/config/config-service";

import { K_CACTUS_API_SERVER_TOTAL_PLUGIN_IMPORTS } from "../../../../main/typescript/prometheus-exporter/metrics";

import { DefaultApi as ApiServerApi } from "../../../../main/typescript/public-api";
import path from "path";

const logLevel: LogLevelDesc = "TRACE";

test("can import plugins at runtime (CLI)", async (t: Test) => {
// const pluginsPath = path.join(
// "/tmp/org/hyperledger/cactus/cmd-api-server/install-basic-plugin-keychain-memory_test", // the dir path from the root
// uuidv4(), // then a random directory to ensure proper isolation
// );
const pluginsPath = path.join(
__dirname, // start at the current file's path
"../../../../../../../", // walk back up to the project root
".tmp/test/cmd-api-server/runtime-plugin-imports_test", // the dir path from the root
uuidv4(), // then a random directory to ensure proper isolation
);
const pluginManagerOptionsJson = JSON.stringify({ pluginsPath });

const configService = new ConfigService();
const apiServerOptions = await configService.newExampleConfig();
apiServerOptions.authorizationProtocol = AuthorizationProtocol.NONE;
apiServerOptions.pluginManagerOptionsJson = pluginManagerOptionsJson;
apiServerOptions.configFile = "";
apiServerOptions.apiCorsDomainCsv = "*";
apiServerOptions.apiPort = 0;
apiServerOptions.cockpitPort = 0;
apiServerOptions.grpcPort = 0;
apiServerOptions.crpcPort = 0;
apiServerOptions.apiTlsEnabled = false;
apiServerOptions.plugins = [
{
packageName: "@hyperledger/cactus-plugin-keychain-memory",
type: PluginImportType.Local,
action: PluginImportAction.Install,
options: {
instanceId: uuidv4(),
keychainId: uuidv4(),
logLevel,
import convict from "convict";

const logLevel: LogLevelDesc = "INFO";

describe("ApiServer", () => {
const log = LoggerProvider.getOrCreate({
label: "install-basic-plugin-keychain-memory.test.ts",
level: logLevel,
});

let config: convict.Config<ICactusApiServerOptions>;
let apiServer: ApiServer;
let apiSrvOpts: ICactusApiServerOptions;

beforeAll(async () => {
const pluginsPath = path.join(
__dirname, // start at the current file's path
"../../../../../../../", // walk back up to the project root
".tmp/test/cmd-api-server/install-basic-plugin-keychain-memory_test", // the dir path from the root
uuidv4(), // then a random directory to ensure proper isolation
);
log.info("Plugin install dir: %s", pluginsPath);

const pluginManagerOptionsJson = JSON.stringify({ pluginsPath });

const configService = new ConfigService();
apiSrvOpts = await configService.newExampleConfig();
apiSrvOpts.authorizationProtocol = AuthorizationProtocol.NONE;
apiSrvOpts.pluginManagerOptionsJson = pluginManagerOptionsJson;
apiSrvOpts.configFile = "";
apiSrvOpts.apiCorsDomainCsv = "*";
apiSrvOpts.apiPort = 0;
apiSrvOpts.cockpitPort = 0;
apiSrvOpts.grpcPort = 0;
apiSrvOpts.crpcPort = 0;
apiSrvOpts.apiTlsEnabled = false;
apiSrvOpts.plugins = [
{
packageName: "@hyperledger/cactus-plugin-keychain-memory",
type: PluginImportType.Local,
action: PluginImportAction.Install,
options: {
instanceId: uuidv4(),
keychainId: uuidv4(),
logLevel,
},
},
},
];
const config = await configService.newExampleConfigConvict(apiServerOptions);
];
config = await configService.newExampleConfigConvict(apiSrvOpts);
});

const apiServer = new ApiServer({
config: config.getProperties(),
afterAll(async () => {
await apiServer.shutdown();
});

const startResponse = apiServer.start();
await t.doesNotReject(startResponse, "started API server dynamic imports OK");
t.ok(startResponse, "startResponse truthy OK");

const addressInfoApi = (await startResponse).addressInfoApi;
const protocol = apiServerOptions.apiTlsEnabled ? "https" : "http";
const { address, port } = addressInfoApi;
const apiHost = `${protocol}://${address}:${port}`;
t.comment(
`Metrics URL: ${apiHost}/api/v1/api-server/get-prometheus-exporter-metrics`,
);

const apiConfig = new Configuration({ basePath: apiHost });
const apiClient = new ApiServerApi(apiConfig);

{
const res = await apiClient.getPrometheusMetricsV1();
const promMetricsOutput =
"# HELP " +
K_CACTUS_API_SERVER_TOTAL_PLUGIN_IMPORTS +
" Total number of plugins imported\n" +
"# TYPE " +
K_CACTUS_API_SERVER_TOTAL_PLUGIN_IMPORTS +
" gauge\n" +
K_CACTUS_API_SERVER_TOTAL_PLUGIN_IMPORTS +
'{type="' +
K_CACTUS_API_SERVER_TOTAL_PLUGIN_IMPORTS +
'"} 1';
t.ok(res);
t.ok(res.data);
t.equal(res.status, 200);
t.true(
res.data.includes(promMetricsOutput),
"Total 1 plugins imported as expected. RESULT OK",
it("can import plugins at runtime (CLI)", async () => {
apiServer = new ApiServer({
config: config.getProperties(),
});

const startResponse = apiServer.start();
expect(startResponse).toResolve();

const addressInfoApi = (await startResponse).addressInfoApi;
const protocol = apiSrvOpts.apiTlsEnabled ? "https" : "http";
const { address, port } = addressInfoApi;
const apiHost = `${protocol}://${address}:${port}`;
log.debug(
`Metrics URL: ${apiHost}/api/v1/api-server/get-prometheus-exporter-metrics`,
);
}

test.onFinish(() => apiServer.shutdown());
const apiConfig = new Configuration({ basePath: apiHost });
const apiClient = new ApiServerApi(apiConfig);

{
const res = await apiClient.getPrometheusMetricsV1();
const promMetricsOutput =
"# HELP " +
K_CACTUS_API_SERVER_TOTAL_PLUGIN_IMPORTS +
" Total number of plugins imported\n" +
"# TYPE " +
K_CACTUS_API_SERVER_TOTAL_PLUGIN_IMPORTS +
" gauge\n" +
K_CACTUS_API_SERVER_TOTAL_PLUGIN_IMPORTS +
'{type="' +
K_CACTUS_API_SERVER_TOTAL_PLUGIN_IMPORTS +
'"} 1';

expect(res).toMatchObject({
data: expect.stringContaining(promMetricsOutput),
status: StatusCodes.OK,
});
expect(res.data.includes(promMetricsOutput)).toBeTrue();
}
});
});

0 comments on commit 6059a7a

Please sign in to comment.