Skip to content

Commit

Permalink
test(ethereum): refactor jest test negative test cases
Browse files Browse the repository at this point in the history
Primary Changes
---------------
1. Refactored negative test case exception assertions for cactus-plugin-ledger-connector-ethereum.
Removed try-catch blocks, replaced with declarations through jest-extended's own API.
2. Made comments on specific tests where the tests should fail but are actually passing
and thus cannot be refactored before being investigated further.
 
Fixes #3475

Signed-off-by: ashnashahgrover <[email protected]>
  • Loading branch information
ashnashahgrover committed Sep 21, 2024
1 parent 299af74 commit c034070
Show file tree
Hide file tree
Showing 4 changed files with 175 additions and 120 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
LogLevelDesc,
IListenOptions,
Servers,
LoggerProvider,
} from "@hyperledger/cactus-common";
import { PluginRegistry } from "@hyperledger/cactus-core";
import { Configuration, Constants } from "@hyperledger/cactus-core-api";
Expand All @@ -50,6 +51,12 @@ const containerImageName = "ghcr.io/hyperledger/cacti-geth-all-in-one";
const containerImageVersion = "2023-07-27-2a8c48ed6";

describe("Ethereum contract deploy and invoke using keychain tests", () => {
const logLevel: LogLevelDesc = "info";
const log = LoggerProvider.getOrCreate({
label: "geth-contract-deploy-and-invoke-using-json-object-v1.test.ts",
level: logLevel,
});

const keychainEntryKey = uuidV4();
let testEthAccount: {
address: HexString;
Expand Down Expand Up @@ -227,24 +234,46 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
});

test("deployContract without contractJSON should fail", async () => {
try {
await apiClient.deployContract({
await expect(
apiClient.deployContract({
contract: {} as ContractJsonDefinition,
web3SigningCredential: {
ethAccount: WHALE_ACCOUNT_ADDRESS,
secret: "",
type: Web3SigningCredentialType.GethKeychainPassword,
},
});
fail("Expected deployContract call to fail but it succeeded.");
} catch (error) {
console.log("deployContract failed as expected");
}
}),
).rejects.toThrow();

log.info("deployContract failed as expected");
});

test("deployContract with additional parameters should fail", async () => {
try {
await apiClient.deployContract({
// this try-catch statement was not refactored because calling deployContract with additional parameters is actually not
// causing an error.

// try {
// await apiClient.deployContract({
// contract: {
// contractJSON: HelloWorldContractJson,
// },
// web3SigningCredential: {
// ethAccount: WHALE_ACCOUNT_ADDRESS,
// secret: "",
// type: Web3SigningCredentialType.GethKeychainPassword,
// },
// gas: 1000000,
// fake: 4,
// } as DeployContractV1Request);
// //test is failing because "fail" is not defined. Without the fail statement, the test actually passes.
// fail("Expected deployContract call to fail but it succeeded.");
// } catch (error) {
// console.log("deployContract failed as expected");
// }

// have the left the original assertion above as a comment for additional context, this can be removed once this test is debugged.
await expect(
apiClient.deployContract({
contract: {
contractJSON: HelloWorldContractJson,
},
Expand All @@ -255,11 +284,11 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
},
gas: 1000000,
fake: 4,
} as DeployContractV1Request);
fail("Expected deployContract call to fail but it succeeded.");
} catch (error) {
console.log("deployContract failed as expected");
}
} as DeployContractV1Request)
).rejects.toThrow();

log.info("deployContract failed as expected");

});

//////////////////////////////////
Expand All @@ -285,8 +314,8 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
expect(setNameOut).toBeTruthy();
expect(setNameOut.data).toBeTruthy();

try {
await apiClient.invokeContractV1({
await expect(
apiClient.invokeContractV1({
contract: {
contractJSON: HelloWorldContractJson,
contractAddress,
Expand All @@ -299,11 +328,8 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
secret: "",
type: Web3SigningCredentialType.GethKeychainPassword,
},
});
fail("Expected getContractInfoKeychain call to fail but it succeeded.");
} catch (error) {
expect(error).toBeTruthy();
}
}),
).rejects.toBeTruthy();

const getNameOut = await apiClient.invokeContractV1({
contract: {
Expand Down Expand Up @@ -366,8 +392,8 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
expect(setNameOut).toBeTruthy();
expect(setNameOut.data).toBeTruthy();

try {
await apiClient.invokeContractV1({
await expect(
apiClient.invokeContractV1({
contract: {
contractJSON: HelloWorldContractJson,
contractAddress,
Expand All @@ -383,11 +409,8 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
secret: testEthAccount.privateKey,
type: Web3SigningCredentialType.PrivateKeyHex,
},
});
fail("Expected getContractInfoKeychain call to fail but it succeeded.");
} catch (error) {
expect(error).toBeTruthy();
}
}),
).rejects.toBeTruthy();

const invokeGetNameOut = await apiClient.invokeContractV1({
contract: {
Expand All @@ -410,8 +433,8 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
});

test("invokeContractV1 without methodName should fail", async () => {
try {
await apiClient.invokeContractV1({
await expect(
apiClient.invokeContractV1({
contract: {
contractJSON: HelloWorldContractJson,
contractAddress,
Expand All @@ -423,12 +446,9 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
secret: "",
type: Web3SigningCredentialType.GethKeychainPassword,
},
} as InvokeContractV1Request);
fail(
"Expected deployContractSolBytecodeV1 call to fail but it succeeded.",
);
} catch (error) {
console.log("deployContractSolBytecodeV1 failed as expected");
}
} as InvokeContractV1Request),
).rejects.toThrow();

log.info("deployContractSolBytecodeV1 failed as expected");
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
LogLevelDesc,
IListenOptions,
Servers,
LoggerProvider,
} from "@hyperledger/cactus-common";
import { PluginRegistry } from "@hyperledger/cactus-core";
import { Configuration, Constants } from "@hyperledger/cactus-core-api";
Expand Down Expand Up @@ -54,6 +55,11 @@ const containerImageName = "ghcr.io/hyperledger/cacti-geth-all-in-one";
const containerImageVersion = "2023-07-27-2a8c48ed6";

describe("Ethereum contract deploy and invoke using keychain tests", () => {
const log = LoggerProvider.getOrCreate({
label: "geth-contract-deploy-and-invoke-using-keychain-v1.test.ts",
level: testLogLevel,
});

const keychainEntryKey = uuidV4();
let testEthAccount: {
address: HexString;
Expand Down Expand Up @@ -230,8 +236,8 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
});

test("deployContract without contractName should fail", async () => {
try {
await apiClient.deployContract({
await expect(
apiClient.deployContract({
contract: {
keychainId: keychainPlugin.getKeychainId(),
} as ContractKeychainDefinition,
Expand All @@ -240,16 +246,41 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
secret: "",
type: Web3SigningCredentialType.GethKeychainPassword,
},
});
fail("Expected deployContract call to fail but it succeeded.");
} catch (error) {
console.log("deployContract failed as expected");
}
}),
).rejects.toThrow();

log.info("deployContract failed as expected");
});

test("deployContract with additional parameters should fail", async () => {
try {
await apiClient.deployContract({
// did not refactor because the test is not actually failing
// it returns a message saying: INFO (PluginLedgerConnectorEthereum): Contract deployed successfully, saving address in keychain entry
// it only hits the catch statement because "fail is not defined"

// try {
// await apiClient.deployContract({
// contract: {
// contractName: HelloWorldContractJson.contractName,
// keychainId: keychainPlugin.getKeychainId(),
// },
// web3SigningCredential: {
// ethAccount: WHALE_ACCOUNT_ADDRESS,
// secret: "",
// type: Web3SigningCredentialType.GethKeychainPassword,
// },
// gas: 1000000,
// fake: 4,
// } as DeployContractV1Request);
// fail("Expected deployContract call to fail but it succeeded.");
// } catch (error) {
// log.info("error message:");
// log.info(error.message);
// log.info("deployContract failed as expected");
// }

// have the left the original assertion above as a comment for additional context, this can be removed once this test is debugged.
await expect(
apiClient.deployContract({
contract: {
contractName: HelloWorldContractJson.contractName,
keychainId: keychainPlugin.getKeychainId(),
Expand All @@ -261,11 +292,11 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
},
gas: 1000000,
fake: 4,
} as DeployContractV1Request);
fail("Expected deployContract call to fail but it succeeded.");
} catch (error) {
console.log("deployContract failed as expected");
}
} as DeployContractV1Request)
).rejects.toThrow();

log.info("deployContract failed as expected");

});

//////////////////////////////////
Expand All @@ -291,8 +322,8 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
expect(setNameOut).toBeTruthy();
expect(setNameOut.data).toBeTruthy();

try {
await apiClient.invokeContractV1({
await expect(
apiClient.invokeContractV1({
contract: {
contractName: HelloWorldContractJson.contractName,
keychainId: keychainPlugin.getKeychainId(),
Expand All @@ -305,11 +336,10 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
secret: "",
type: Web3SigningCredentialType.GethKeychainPassword,
},
});
fail("Expected invokeContractV1 call to fail but it succeeded.");
} catch (error) {
expect(error).toBeTruthy();
}
}),
).rejects.toThrow();

log.info("invokeContractV1 failed as expected");

const getNameOut = await apiClient.invokeContractV1({
contract: {
Expand Down Expand Up @@ -385,16 +415,15 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
});

test("runTransactionV1 without transaction config should fail", async () => {
try {
await apiClient.runTransactionV1({
await expect(
apiClient.runTransactionV1({
web3SigningCredential: {
type: Web3SigningCredentialType.None,
},
} as RunTransactionRequest);
fail("Expected runTransactionV1 call to fail but it succeeded.");
} catch (error) {
console.log("runTransactionV1 failed as expected");
}
} as RunTransactionRequest),
).rejects.toThrow();

log.info("runTransactionV1 failed as expected");
});

test("invoke Web3SigningCredentialType.PrivateKeyHex", async () => {
Expand All @@ -420,8 +449,8 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
expect(setNameOut).toBeTruthy();
expect(setNameOut.data).toBeTruthy();

try {
await apiClient.invokeContractV1({
await expect(
apiClient.invokeContractV1({
contract: {
contractName: HelloWorldContractJson.contractName,
keychainId: keychainPlugin.getKeychainId(),
Expand All @@ -437,11 +466,10 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
secret: testEthAccount.privateKey,
type: Web3SigningCredentialType.PrivateKeyHex,
},
});
fail("Expected invokeContractV1 call to fail but it succeeded.");
} catch (error) {
expect(error).toBeTruthy();
}
}),
).rejects.toThrow();

log.info("invokeContractV1 failed as expected");

const invokeGetNameOut = await apiClient.invokeContractV1({
contract: {
Expand Down Expand Up @@ -490,8 +518,8 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
expect(setNameOut).toBeTruthy();
expect(setNameOut.data).toBeTruthy();

try {
await apiClient.invokeContractV1({
await expect(
apiClient.invokeContractV1({
contract: {
contractName: HelloWorldContractJson.contractName,
keychainId: keychainPlugin.getKeychainId(),
Expand All @@ -507,11 +535,10 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
secret: "",
type: Web3SigningCredentialType.GethKeychainPassword,
},
});
fail("Expected invokeContractV1 call to fail but it succeeded.");
} catch (error) {
expect(error).toBeTruthy();
}
}),
).rejects.toThrow();

log.info("invokeContractV1 failed as expected");

const invokeGetNameOut = await apiClient.invokeContractV1({
contract: {
Expand All @@ -530,8 +557,8 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
});

test("invokeContractV1 without methodName should fail", async () => {
try {
await apiClient.invokeContractV1({
await expect(
apiClient.invokeContractV1({
contract: {
contractName: HelloWorldContractJson.contractName,
keychainId: keychainPlugin.getKeychainId(),
Expand All @@ -543,11 +570,10 @@ describe("Ethereum contract deploy and invoke using keychain tests", () => {
secret: "",
type: Web3SigningCredentialType.GethKeychainPassword,
},
} as InvokeContractV1Request);
fail("Expected invokeContractV1 call to fail but it succeeded.");
} catch (error) {
console.log("invokeContractV1 failed as expected");
}
} as InvokeContractV1Request),
).rejects.toThrow();

log.info("invokeContractV1 failed as expected");
});

// @todo - move to separate test suite
Expand Down
Loading

0 comments on commit c034070

Please sign in to comment.