Skip to content

Commit

Permalink
fix: plugin ledger connector xdai expection handling and upgrade TS
Browse files Browse the repository at this point in the history
Fixes #1740

Signed-off-by: Youngone Lee <[email protected]>
  • Loading branch information
Youngone Lee authored and Leeyoungone committed Jan 13, 2022
1 parent 0707950 commit 5da2b92
Show file tree
Hide file tree
Showing 12 changed files with 311 additions and 181 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
LogLevelDesc,
LoggerProvider,
IAsyncProvider,
LogHelper,
} from "@hyperledger/cactus-common";

import { registerWebServiceEndpoint } from "@hyperledger/cactus-core";
Expand Down Expand Up @@ -91,12 +92,21 @@ export class DeployContractSolidityBytecodeEndpoint
try {
const resBody = await this.options.connector.deployContract(reqBody);
res.json(resBody);
} catch (ex) {
} catch (ex: unknown) {
const stack = LogHelper.getExceptionStack(ex);
const messages = LogHelper.getExceptionMessage(ex);
this.log.error(`Crash while serving ${reqTag}`, ex);
res.status(500).json({
message: "Internal Server Error",
error: ex?.stack || ex?.message,
});
if (ex instanceof Error) {
res.status(500).json({
message: "Internal Server Error",
error: stack || messages,
});
} else {
res.status(500).json({
message: "Internal Server Error",
error: stack || messages,
});
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { registerWebServiceEndpoint } from "@hyperledger/cactus-core";
import { PluginLedgerConnectorXdai } from "../plugin-ledger-connector-xdai";
import { DeployContractJsonObjectV1Request } from "../generated/openapi/typescript-axios";
import OAS from "../../json/openapi.json";
import { LogHelper } from "@hyperledger/cactus-common";

export interface IDeployContractSolidityBytecodeJsonObjectOptions {
logLevel?: LogLevelDesc;
Expand Down Expand Up @@ -96,12 +97,21 @@ export class DeployContractSolidityBytecodeJsonObjectEndpoint
reqBody,
);
res.json(resBody);
} catch (ex) {
} catch (ex: unknown) {
const stack = LogHelper.getExceptionStack(ex);
const messages = LogHelper.getExceptionMessage(ex);
this.log.error(`Crash while serving ${reqTag}`, ex);
res.status(500).json({
message: "Internal Server Error",
error: ex?.stack || ex?.message,
});
if (ex instanceof Error) {
res.status(500).json({
message: "Internal Server Error",
error: stack || messages,
});
} else {
res.status(500).json({
message: "Internal Server Error",
error: stack || messages,
});
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
LoggerProvider,
Checks,
IAsyncProvider,
LogHelper,
} from "@hyperledger/cactus-common";

import { PluginLedgerConnectorXdai } from "../plugin-ledger-connector-xdai";
Expand Down Expand Up @@ -90,11 +91,19 @@ export class GetPrometheusExporterMetricsEndpointV1
const resBody = await this.options.connector.getPrometheusExporterMetrics();
res.status(200);
res.send(resBody);
} catch (ex) {
} catch (ex: unknown) {
const stack = LogHelper.getExceptionStack(ex);
const messages = LogHelper.getExceptionMessage(ex);
this.log.error(`${fnTag} failed to serve request`, ex);
res.status(500);
res.statusMessage = ex.message;
res.json({ error: ex.stack });
if (ex instanceof Error) {
res.status(500);
res.statusMessage = messages;
res.json({ error: stack });
} else {
res.status(500);
res.statusMessage = messages;
res.json({ error: stack });
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
LogLevelDesc,
LoggerProvider,
IAsyncProvider,
LogHelper,
} from "@hyperledger/cactus-common";
import {
IEndpointAuthzOptions,
Expand Down Expand Up @@ -88,12 +89,21 @@ export class InvokeContractEndpoint implements IWebServiceEndpoint {
try {
const resBody = await this.options.connector.invokeContract(reqBody);
res.json(resBody);
} catch (ex) {
} catch (ex: unknown) {
const stack = LogHelper.getExceptionStack(ex);
const messages = LogHelper.getExceptionMessage(ex);
this.log.error(`Crash while serving ${reqTag}`, ex);
res.status(500).json({
message: "Internal Server Error",
error: ex?.stack || ex?.message,
});
if (ex instanceof Error) {
res.status(500).json({
message: "Internal Server Error",
error: stack || messages,
});
} else {
res.status(500).json({
message: "Internal Server Error",
error: stack || messages,
});
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
LogLevelDesc,
LoggerProvider,
IAsyncProvider,
LogHelper,
} from "@hyperledger/cactus-common";
import {
IEndpointAuthzOptions,
Expand Down Expand Up @@ -93,12 +94,21 @@ export class InvokeContractJsonObjectEndpoint implements IWebServiceEndpoint {
reqBody,
);
res.json(resBody);
} catch (ex) {
} catch (ex: unknown) {
const stack = LogHelper.getExceptionStack(ex);
const messages = LogHelper.getExceptionMessage(ex);
this.log.error(`Crash while serving ${reqTag}`, ex);
res.status(500).json({
message: "Internal Server Error",
error: ex?.stack || ex?.message,
});
if (ex instanceof Error) {
res.status(500).json({
message: "Internal Server Error",
error: stack || messages,
});
} else {
res.status(500).json({
message: "Internal Server Error",
error: stack || messages,
});
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
LogLevelDesc,
LoggerProvider,
IAsyncProvider,
LogHelper,
} from "@hyperledger/cactus-common";
import {
IEndpointAuthzOptions,
Expand All @@ -17,6 +18,7 @@ import { registerWebServiceEndpoint } from "@hyperledger/cactus-core";
import { PluginLedgerConnectorXdai } from "../plugin-ledger-connector-xdai";

import OAS from "../../json/openapi.json";
import axios from "axios";

export interface IRunTransactionEndpointOptions {
logLevel?: LogLevelDesc;
Expand Down Expand Up @@ -88,12 +90,21 @@ export class RunTransactionEndpoint implements IWebServiceEndpoint {
try {
const resBody = await this.options.connector.transact(reqBody);
res.json({ success: true, data: resBody });
} catch (ex) {
} catch (ex: unknown) {
const stack = LogHelper.getExceptionStack(ex);
const messages = LogHelper.getExceptionMessage(ex);
this.log.error(`Crash while serving ${reqTag}`, ex);
res.status(500).json({
message: "Internal Server Error",
error: ex?.stack || ex?.message,
});
if (axios.isAxiosError(ex)) {
res.status(500).json({
message: "Internal Server Error",
error: stack || messages,
});
} else {
res.status(500).json({
message: "Internal Server Error",
error: stack || messages,
});
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import bodyParser from "body-parser";
import http from "http";
import { AddressInfo } from "net";
import { K_CACTUS_XDAI_TOTAL_TX_COUNT } from "../../../main/typescript/prometheus-exporter/metrics";
import axios from "axios";

const testCase = "deploys contract via .json file";
const logLevel: LogLevelDesc = "TRACE";
Expand Down Expand Up @@ -227,12 +228,16 @@ test(testCase, async (t: Test) => {
contractJSON: HelloWorldContractJson,
});
t2.ifError(setNameOutInvalid);
} catch (error) {
t2.notStrictEqual(
error,
"Nonce too low",
"setName() invocation with invalid nonce",
);
} catch (error: unknown) {
if (axios.isAxiosError(error)) {
t2.notStrictEqual(
error,
"Nonce too low",
"setName() invocation with invalid nonce",
);
} else {
t2.fail("expected an axios error, got something else");
}
}
const { callOutput: getNameOut } = await connector.invokeContractJsonObject(
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import bodyParser from "body-parser";
import http from "http";
import { AddressInfo } from "net";
import { K_CACTUS_XDAI_TOTAL_TX_COUNT } from "../../../main/typescript/prometheus-exporter/metrics";
import axios from "axios";

const testCase = "deploys contract via .json file";
describe(testCase, () => {
Expand Down Expand Up @@ -248,8 +249,12 @@ describe(testCase, () => {
nonce: 1,
});
fail("It should not reach here");
} catch (error) {
expect(error).not.toBe("Nonce too low");
} catch (error: unknown) {
if (axios.isAxiosError(error)) {
expect(error).not.toBe("Nonce too low");
} else {
fail("expected an axios error, got something else");
}
}
const { callOutput: getNameOut } = await connector.invokeContract({
contractName,
Expand Down Expand Up @@ -347,8 +352,12 @@ describe(testCase, () => {
nonce: 4,
});
fail("It should not reach here");
} catch (error) {
expect(error).not.toBe("Nonce too low");
} catch (error: unknown) {
if (axios.isAxiosError(error)) {
expect(error).not.toBe("Nonce too low");
} else {
fail("expected an axios error, got something else");
}
}

const { callOutput: getNameOut } = await connector.invokeContract({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { LogLevelDesc } from "@hyperledger/cactus-common";
import HelloWorldContractJson from "../../solidity/hello-world-contract/HelloWorld.json";
import Web3 from "web3";
import { PluginImportType } from "@hyperledger/cactus-core-api";
import axios from "axios";

test("deploys contract via .json file", async (t: Test) => {
const logLevel: LogLevelDesc = "TRACE";
Expand Down Expand Up @@ -196,12 +197,16 @@ test("deploys contract via .json file", async (t: Test) => {
contractJSON: HelloWorldContractJson,
});
t2.ifError(setNameOutInvalid.transactionReceipt);
} catch (error) {
t2.notStrictEqual(
error,
"Nonce too low",
"setName() invocation with invalid nonce",
);
} catch (error: unknown) {
if (axios.isAxiosError(error)) {
t2.notStrictEqual(
error,
"Nonce too low",
"setName() invocation with invalid nonce",
);
} else {
t2.fail("expected an axios error, got something else");
}
}
const { callOutput: getNameOut } = await connector.invokeContractJsonObject(
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import { LogLevelDesc } from "@hyperledger/cactus-common";
import HelloWorldContractJson from "../../solidity/hello-world-contract/HelloWorld.json";
import Web3 from "web3";
import { PluginImportType } from "@hyperledger/cactus-core-api";
import axios from "axios";

const logLevel: LogLevelDesc = "TRACE";
let xdaiTestLedger: OpenEthereumTestLedger;
Expand Down Expand Up @@ -204,8 +205,12 @@ describe(testCase, () => {
nonce: 1,
});
fail("invalid nonce should have thrown");
} catch (error: any) {
expect(error.message).toContain("Transaction nonce is too low.");
} catch (error: unknown) {
if (axios.isAxiosError(error)) {
expect(error.message).toContain("Transaction nonce is too low.");
} else {
fail("expected an axios error, got something else");
}
}
const { callOutput: getNameOut } = await connector.invokeContract({
contractName,
Expand Down Expand Up @@ -302,10 +307,14 @@ describe(testCase, () => {
nonce: 4,
});
fail("invalid nonce should have thrown");
} catch (error: any) {
expect(error.message).toContain(
"Transaction with the same hash was already imported",
);
} catch (error: unknown) {
if (axios.isAxiosError(error)) {
expect(error.message).toContain(
"Transaction with the same hash was already imported",
);
} else {
fail("expected an axios error, got something else");
}
}
const { callOutput: getNameOut } = await connector.invokeContract({
contractName,
Expand Down
Loading

0 comments on commit 5da2b92

Please sign in to comment.