---
title: End-to-End Test Execution of Trade Finance application
type: article
date: 2018-12-17
source: website
original_url: "https://navveenbalani.dev/index.php/articles/end-to-end-test-execution-of-trade-finance-application/"
topics: ["blockchain"]
legacy_categories: ["blockchain"]
tags: ["blockchain-guide"]
summary: "In this section, we will execute the entire network setup and business workflow using a single script representing our test cases. You can download the source code of the book from GitHub location – https://github.com/enterprise-blockchain-book/first-edition.git, if you haven’t…"
draft: false
---

In this section, we will execute the entire network setup and business
workflow using a single script representing our test cases.

You can download the source code of the book from GitHub location –
https://github.com/enterprise-blockchain-book/first-edition.git, if you haven’t
downloaded it yet.

Go to hyperledger-fabric folder. The following shows the structure of
the hyperledger-fabric folder

- The docker file 
  - docker-trade-finance.yaml, discussed earlier that sets up the trade
  finance blockchain network, resides in the root folder.
- The chaincode folder contains our trade finance
  chaincode - tradefinancecontract.go.
- The crypto-config.yaml, explained in Defining
  Network Topology section earlier, is used for generating cryptographic
  artifacts for our entire network.
- The script folder contains the script file
  script.sh, which runs the end-to-end trade finance application. The script is
  bootstrapped in docker-trade-finance.yaml and executed upon the network
  startup.
- The tradee2e.sh script is the entry point to the
  application, which has commands to generate certificates and execute the
  end-to-end trade application using docker runtime.

To start with, change directory to hyperledger-fabric and download the
IBM Hyperledger platform specific binaries by using the following command

curl -SSL https://goo.gl/QM1M4b | bash

You would see a bin folder created, which contains platform-specific
binaries, namely cryptogen and configtxgen which are used for generating
certificates and channel artifacts respectively

Let’s generate the certificates and channel artifacts for our
blockchain network using the following command.

./tradee2e.sh -m generate

The generate option calls the cryptogen for generating certificates
and configtxgen for channel artifacts based on our configuration file.  We had explained the command and
configuration earlier in Application Deployment section.

You should see the following output.

This would generate the crypto artifacts in the crypto-config folder
and channel artifacts in the channel-artifacts folder.

If you inspect the crypto-config folder, you would see "ordererOrganizations" and "peerOrganizations" folder. If you navigate to the peerOrganizations-> bnk.com and drill down to respective folders, you would see the following structure as shown below.

The msp folder contains cryptographic credentials for [User1@bnk.com](mailto:User1@bnk.com). The keystore folder contains the
User1 private key and signcerts contains the public key certificate for
verification. We pass this msp path of [User1@bnk.com](mailto:User1@bnk.com)
in our script file (script.sh) to invoke functions on behalf of this user and
artifacts under this path are used for identification and verification.
Similarly, for all peers and users, we have a similar configuration and are
being referenced in the script.sh file.

Next, we would execute the application by running the following
script:

./trade2e.sh -m up

As discussed earlier, this would set up
the network using docker files and execute the script.sh file. The following
shows the output of running the script

- First, you would see channel -“tradechannel,” being created as shown in the figure below.

- Next, all peers would join the channel one by one. The following shows peer 0 joining the network. Similar messages would be displayed for peer 1, peer 2, peer 3, peer 4 and peer 5.

- Next, the chain code would be deployed on all peers. You would see a message – “Chaincode is installed on remote peer.”
- Next, the chain code would be instantiated on peer 1. You should see a message – “Chaincode Instantiation on PEER 1 on channel 'tradechannel' is successful.”
- Next, we would query the initial state after instantiation on different peers, say peer 2, which shows that chaincode is instantiated on all other peers as well.

- Next, we would execute the *createLOC* command using importer bank user (i.e., User1@bnk.com). Following shows the output of invocation. A successful message stating –“ Invoke:createLOC transaction on PEER PEER2 on channel 'tradechannel' is successful.” should be printed.
- Next, we execute the *approveLOC* method using [User2@bnk.com](mailto:User2@bnk.com) (exporter bank), *initiateShipment* method using [User2@app.fte.com](mailto:User2@app.fte.com) (Seller) , *deliverGoods* method using [User1@shp.com](mailto:User1@shp.com) (Shipment Org user) and *shipmentDelivered* method using [User1@app.fte.com](mailto:User1@app.fte.com) (Buyer). After every method invocation, we query the ledger to verify the trade status,
- At the final step, we query the status of the trade, which shows the expected output as ‘Trade completed” as shown below.

This completes an end-to-end invocation of trade finance blockchain application from grounds up. Another approach of building the blockchain application could be through an open development framework called Hyperledger Composer. Hyperledger Composer is an extensive, open development toolset and framework that makes developing blockchain applications easier. You can use Hyperledger Composer to quickly model assets, business networks, and transactions methods. The Hyperledger Composer generates an archive file that can be deployed to the blockchain network. Hyperledger Composer is under active development, and we would revisit the tooling environment in a later edition. For more details, refer to - https://hyperledger.github.io/composer/