diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 545d35548a..248e9709e6 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -437,7 +437,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-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-m-tls-enabled.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: diff --git a/.taprc b/.taprc index e6e75775dd..f91051e159 100644 --- a/.taprc +++ b/.taprc @@ -48,7 +48,6 @@ files: - ./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/config/self-signed-certificate-generator/generates-working-certificates.test.ts - ./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/grpc-proto-gen-ts-client-healthcheck.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-m-tls-enabled.test.ts - ./extensions/cactus-plugin-object-store-ipfs/src/test/typescript/integration/plugin-object-store-ipfs.test.ts diff --git a/jest.config.js b/jest.config.js index 8bb098ea00..5526f5f6db 100644 --- a/jest.config.js +++ b/jest.config.js @@ -61,7 +61,6 @@ module.exports = { `./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/config/self-signed-certificate-generator/generates-working-certificates.test.ts`, `./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/grpc-proto-gen-ts-client-healthcheck.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-m-tls-enabled.test.ts`, `./extensions/cactus-plugin-object-store-ipfs/src/test/typescript/integration/plugin-object-store-ipfs.test.ts`, diff --git a/packages/cactus-cmd-api-server/src/test/typescript/unit/config/config-service-example-config-validity.test.ts b/packages/cactus-cmd-api-server/src/test/typescript/unit/config/config-service-example-config-validity.test.ts index b4954e2d27..fc005f46a8 100644 --- a/packages/cactus-cmd-api-server/src/test/typescript/unit/config/config-service-example-config-validity.test.ts +++ b/packages/cactus-cmd-api-server/src/test/typescript/unit/config/config-service-example-config-validity.test.ts @@ -11,9 +11,7 @@ import { import { ApiServer } from "../../../../main/typescript/public-api"; import { ConfigService } from "../../../../main/typescript/public-api"; -const testcase = ""; - -describe(testcase, () => { +describe("ConfigService", () => { const configService = new ConfigService(); let apiServer: ApiServer, exampleConfig: ICactusApiServerOptions, @@ -24,7 +22,7 @@ describe(testcase, () => { exampleConfig = await configService.newExampleConfig(); const pluginsPath = path.join( __dirname, - "../../../../../../", // walk back up to the project root + "../../../../../../../", // walk back up to the project root ".tmp/test/test-cmd-api-server/config-service-example-config-validity_test/", // the dir path from the root uuidv4(), // then a random directory to ensure proper isolation ); diff --git a/packages/cactus-cmd-api-server/src/test/typescript/unit/grpc-proto-gen-ts-client-healthcheck.test.ts b/packages/cactus-cmd-api-server/src/test/typescript/unit/grpc-proto-gen-ts-client-healthcheck.test.ts index b996e296a6..cb67d6a7c6 100644 --- a/packages/cactus-cmd-api-server/src/test/typescript/unit/grpc-proto-gen-ts-client-healthcheck.test.ts +++ b/packages/cactus-cmd-api-server/src/test/typescript/unit/grpc-proto-gen-ts-client-healthcheck.test.ts @@ -1,88 +1,97 @@ -import test, { Test } from "tape-promise/tape"; - +import "jest-extended"; import * as grpc from "@grpc/grpc-js"; +import { RuntimeError } from "run-time-error-cjs"; import { LogLevelDesc } from "@hyperledger/cactus-common"; -import { ApiServer, ConfigService } from "../../../main/typescript/public-api"; +import { + ApiServer, + ConfigService, + ICactusApiServerOptions, +} from "../../../main/typescript/public-api"; import { AuthorizationProtocol } from "../../../main/typescript/public-api"; import { default_service } from "../../../main/typescript/public-api"; import { health_check_response_pb } from "../../../main/typescript/public-api"; import { empty } from "../../../main/typescript/public-api"; -import { RuntimeError } from "run-time-error-cjs"; -const testCase = "API server: runs gRPC TS-proto web services"; -const logLevel: LogLevelDesc = "TRACE"; +const logLevel: LogLevelDesc = "INFO"; -test(testCase, async (t: Test) => { - const configService = new ConfigService(); - const apiSrvOpts = await configService.newExampleConfig(); - apiSrvOpts.authorizationProtocol = AuthorizationProtocol.NONE; - apiSrvOpts.configFile = ""; - apiSrvOpts.logLevel = logLevel; - apiSrvOpts.apiCorsDomainCsv = "*"; - apiSrvOpts.apiPort = 0; - apiSrvOpts.grpcPort = 0; - apiSrvOpts.crpcPort = 0; - apiSrvOpts.cockpitPort = 0; - apiSrvOpts.grpcMtlsEnabled = false; - apiSrvOpts.apiTlsEnabled = false; - apiSrvOpts.plugins = []; - const config = await configService.newExampleConfigConvict(apiSrvOpts); +describe("ApiServer", () => { + let apiServer: ApiServer; + let config: ICactusApiServerOptions; + let apiClient: default_service.org.hyperledger.cactus.cmd_api_server.DefaultServiceClient; - const apiServer = new ApiServer({ - config: config.getProperties(), + afterAll(async () => { + await apiServer.shutdown(); }); - test.onFinish(async () => await apiServer.shutdown()); - const startResponse = apiServer.start(); - await t.doesNotReject( - startResponse, - "failed to start API server with dynamic plugin imports configured for it...", - ); - t.ok(startResponse, "startResponse truthy OK"); + beforeAll(async () => { + const configService = new ConfigService(); + const apiSrvOpts = await configService.newExampleConfig(); + apiSrvOpts.authorizationProtocol = AuthorizationProtocol.NONE; + apiSrvOpts.configFile = ""; + apiSrvOpts.logLevel = logLevel; + apiSrvOpts.apiCorsDomainCsv = "*"; + apiSrvOpts.apiPort = 0; + apiSrvOpts.grpcPort = 0; + apiSrvOpts.crpcPort = 0; + apiSrvOpts.cockpitPort = 0; + apiSrvOpts.grpcMtlsEnabled = false; + apiSrvOpts.apiTlsEnabled = false; + apiSrvOpts.plugins = []; + const convictCfg = await configService.newExampleConfigConvict(apiSrvOpts); + config = convictCfg.getProperties(); - const addressInfoGrpc = (await startResponse).addressInfoGrpc; - const { address, port } = addressInfoGrpc; - const grpcHostAndPort = `${address}:${port}`; + apiServer = new ApiServer({ + config, + }); - const apiClient = - new default_service.org.hyperledger.cactus.cmd_api_server.DefaultServiceClient( - grpcHostAndPort, - grpc.credentials.createInsecure(), - ); - t.ok(apiClient, "apiClient truthy OK"); + const apiServerStart = apiServer.start(); + await expect(apiServerStart).toResolve(); + const addressInfoGrpc = (await apiServerStart).addressInfoGrpc; + const { address, port } = addressInfoGrpc; + const grpcHostAndPort = `${address}:${port}`; - const responsePromise = - new Promise( - (resolve, reject) => { - apiClient.GetHealthCheckV1( - new empty.google.protobuf.Empty(), - ( - error: grpc.ServiceError | null, - response?: health_check_response_pb.org.hyperledger.cactus.cmd_api_server.HealthCheckResponsePB, - ) => { - if (error) { - reject(error); - } else if (response) { - resolve(response); - } else { - throw new RuntimeError("No error, nor response received."); - } - }, - ); - }, - ); + apiClient = + new default_service.org.hyperledger.cactus.cmd_api_server.DefaultServiceClient( + grpcHostAndPort, + grpc.credentials.createInsecure(), + ); + expect(apiClient).toBeTruthy(); + }); - await t.doesNotReject(responsePromise, "No error in healthcheck OK"); - const res = await responsePromise; + test("runs gRPC TS-proto web services", async () => { + type HealthCheckResponsePB = + health_check_response_pb.org.hyperledger.cactus.cmd_api_server.HealthCheckResponsePB; - const resHc = res?.toObject(); + const grpcReq = new Promise((resolve, reject) => { + apiClient.GetHealthCheckV1( + new empty.google.protobuf.Empty(), + (error: grpc.ServiceError | null, response?: HealthCheckResponsePB) => { + if (error) { + reject(error); + } else if (response) { + resolve(response); + } else { + reject(new RuntimeError("No error, nor response received.")); + } + }, + ); + }); - t.ok(resHc, `healthcheck response truthy OK`); - t.ok(resHc?.createdAt, `resHc.createdAt truthy OK`); - t.ok(resHc?.memoryUsage, `resHc.memoryUsage truthy OK`); - t.ok(resHc?.memoryUsage?.rss, `resHc.memoryUsage.rss truthy OK`); - t.ok(resHc?.success, `resHc.success truthy OK`); - t.end(); + await expect(grpcReq).resolves.toMatchObject({ + toObject: expect.toBeFunction(), + }); + + const resPb = await grpcReq; + const res = resPb.toObject(); + + expect(res).toMatchObject({ + createdAt: expect.toBeDateString(), + memoryUsage: expect.objectContaining({ + rss: expect.toBeNumber(), + }), + success: true, + }); + }); });