This project has been frozen. Please see https://github.com/CodeChain-io/codechain/tree/master/test/src/helper/mock for the latest implementation.
CodeChain test helper is a library for unit test of the CodeChain core. Written in TypeScript, it is designed to send a sequece of p2p messages to the CodeChain node efficiently and conveniently as if it were a node
Download codechain-test-helper
git clone https://github.com/CodeChain-io/codechain-test-helper-js.git cd codechain-test-helper-jsBuild
yarn build cd libyou can use test-helper class in testHelper.js
Add this line to your package.json in your project directory
"dependencies": { ... "codechain-test-helper": "https://github.com/CodeChain-io/codechain-test-helper-js.git#a4a9c26635a52395dfd17733eef66b18a144fd00" ... } than you can use test-helper in your project by adding this line infront of your code
import { TestHelper } from "codechain-test-helper/lib/testHelper";yarn fmtasync function sendBlock() { // The argument of TestHelper class is an ip and port of the target CodeChain node. // If the CodeChain node is running on your local machine, use IP as "0.0.0.0". const TH = new TestHelper("0.0.0.0", 3485); // If you set log mode, all the log below the session message will be printed. // The defualt is off. TH.setLog(); // Establish connection with the target node. // If establishment is completed, you can send sync messages. await TH.establish(); // Hardcoded Genesis block const header = TH.soloGenesisBlockHeader(); // The hardcoded block get the parent hash as an argument. // Hardcoded Block 1 const header1 = TH.soloBlock1(header.hashing()); // Hardcoded Block 2 const header2 = TH.soloBlock2(header1.hashing()); // First argument is block headers. You have to send a valid sequence of headers. If you do not, this function will not end. // Second argument is for block body. you have to send a valid sequence of parcels of each block. If you do not, the blocks are not accepted // Third argument is a besthash and Fourth argument is best block's score. await TH.sendBlock( [ header, header1, header2 ], [[], []], header2.hashing(), header2.getScore() ); // Send FIN packet to the target node await TH.end(); } sendBlock();async function sendParcel() { const TH = new TestHelper("0.0.0.0", 3485); TH.setLog(); await TH.establish(); const sdk = new SDK({ server: process.env.CODECHAIN_RPC_HTTP || "http://localhost:8080", networkId: process.env.CODECHAIN_NETWORK_ID || "tc" }); const ACCOUNT_SECRET = process.env.ACCOUNT_SECRET || "ede1d4ccb4ec9a8bbbae9a13db3f4a7b56ea04189be86ac3a6a439d9a0a1addd"; const parcel = sdk.core.createPaymentParcel({ recipient: "tccqruq09sfgax77nj4gukjcuq69uzeyv0jcs7vzngg", amount: 10000 }); const signedparcel = parcel.sign({ secret: ACCOUNT_SECRET, fee: 10, nonce: 0 }); // You can send a sequence of any kinds of parcels defined in CodeChain-sdk. await TH.sendParcel([signedparcel]); await TH.end(); } sendParcel();You can make an arbitrary block header by your own.
// You should import the Header class in your project import { Header } from "codechain-test-helper/lib/cHeader"; const header = new Header( parentHash, timestamp, number, author, extraData, parcelsRoot, stateRoot, invoiceRoot, score, seal ); ```