github.com/leonlxy/hyperledger@v1.0.0-alpha.0.20170427033203-34922035d248/examples/e2e_cli/scripts/script.sh (about)

     1  #!/bin/bash
     2  
     3  CHANNEL_NAME="$1"
     4  : ${CHANNEL_NAME:="mychannel"}
     5  : ${TIMEOUT:="60"}
     6  COUNTER=0
     7  MAX_RETRY=5
     8  ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/orderer/localMspConfig/cacerts/ordererOrg0.pem
     9  
    10  echo "Channel name : "$CHANNEL_NAME
    11  
    12  verifyResult () {
    13  	if [ $1 -ne 0 ] ; then
    14  		echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!"
    15                  echo "================== ERROR !!! FAILED to execute End-2-End Scenario =================="
    16  		echo
    17     		exit 1
    18  	fi
    19  }
    20  
    21  setGlobals () {
    22  
    23  	CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peer/peer$1/localMspConfig
    24  	CORE_PEER_ADDRESS=peer$1:7051
    25  
    26  	if [ $1 -eq 0 -o $1 -eq 1 ] ; then
    27  		CORE_PEER_LOCALMSPID="Org0MSP"
    28  		CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peer/peer$1/localMspConfig/cacerts/peerOrg0.pem
    29  	else
    30  		CORE_PEER_LOCALMSPID="Org1MSP"
    31  		CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peer/peer$1/localMspConfig/cacerts/peerOrg1.pem
    32  	fi
    33  	env |grep CORE
    34  }
    35  
    36  createChannel() {
    37  	CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peer/peer0/localMspConfig
    38  	CORE_PEER_LOCALMSPID="Org0MSP"
    39  
    40          if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
    41  		peer channel create -o orderer0:7050 -c $CHANNEL_NAME -f crypto/orderer/channel.tx >&log.txt
    42  	else
    43  		peer channel create -o orderer0:7050 -c $CHANNEL_NAME -f crypto/orderer/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt
    44  	fi
    45  	res=$?
    46  	cat log.txt
    47  	verifyResult $res "Channel creation failed"
    48  	echo "===================== Channel \"$CHANNEL_NAME\" is created successfully ===================== "
    49  	echo
    50  }
    51  
    52  updateAnchorPeers() {
    53          PEER=$1
    54          setGlobals $PEER
    55  
    56          if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
    57  		peer channel create -o orderer0:7050 -c $CHANNEL_NAME -f crypto/orderer/${CORE_PEER_LOCALMSPID}anchors.tx >&log.txt
    58  	else
    59  		peer channel create -o orderer0:7050 -c $CHANNEL_NAME -f crypto/orderer/${CORE_PEER_LOCALMSPID}anchors.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt
    60  	fi
    61  	res=$?
    62  	cat log.txt
    63  	verifyResult $res "Anchor peer update failed"
    64  	echo "===================== Anchor peers for org \"$CORE_PEER_LOCALMSPID}\" on \"$CHANNEL_NAME\" is updated successfully ===================== "
    65  	echo
    66  }
    67  
    68  ## Sometimes Join takes time hence RETRY atleast for 5 times
    69  joinWithRetry () {
    70  	peer channel join -b $CHANNEL_NAME.block  >&log.txt
    71  	res=$?
    72  	cat log.txt
    73  	if [ $res -ne 0 -a $COUNTER -lt $MAX_RETRY ]; then
    74  		COUNTER=` expr $COUNTER + 1`
    75  		echo "PEER$1 failed to join the channel, Retry after 2 seconds"
    76  		sleep 2
    77  		joinWithRetry $1
    78  	else
    79  		COUNTER=0
    80  	fi
    81          verifyResult $res "After $MAX_RETRY attempts, PEER$ch has failed to Join the Channel"
    82  }
    83  
    84  joinChannel () {
    85  	for ch in 0 1 2 3; do
    86  		setGlobals $ch
    87  		joinWithRetry $ch
    88  		echo "===================== PEER$ch joined on the channel \"$CHANNEL_NAME\" ===================== "
    89  		sleep 2
    90  		echo
    91  	done
    92  }
    93  
    94  installChaincode () {
    95  	PEER=$1
    96  	setGlobals $PEER
    97  	peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 >&log.txt
    98  	res=$?
    99  	cat log.txt
   100          verifyResult $res "Chaincode installation on remote peer PEER$PEER has Failed"
   101  	echo "===================== Chaincode is installed on remote peer PEER$PEER ===================== "
   102  	echo
   103  }
   104  
   105  instantiateChaincode () {
   106  	PEER=$1
   107  	setGlobals $PEER
   108          if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
   109  		peer chaincode instantiate -o orderer0:7050 -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR	('Org0MSP.member','Org1MSP.member')" >&log.txt
   110  	else
   111  		peer chaincode instantiate -o orderer0:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR	('Org0MSP.member','Org1MSP.member')" >&log.txt
   112  	fi
   113  	res=$?
   114  	cat log.txt
   115  	verifyResult $res "Chaincode instantiation on PEER$PEER on channel '$CHANNEL_NAME' failed"
   116  	echo "===================== Chaincode Instantiation on PEER$PEER on channel '$CHANNEL_NAME' is successful ===================== "
   117  	echo
   118  }
   119  
   120  chaincodeQuery () {
   121    PEER=$1
   122    echo "===================== Querying on PEER$PEER on channel '$CHANNEL_NAME'... ===================== "
   123    setGlobals $PEER
   124    local rc=1
   125    local starttime=$(date +%s)
   126  
   127    # continue to poll
   128    # we either get a successful response, or reach TIMEOUT
   129    while test "$(($(date +%s)-starttime))" -lt "$TIMEOUT" -a $rc -ne 0
   130    do
   131       sleep 3
   132       echo "Attempting to Query PEER$PEER ...$(($(date +%s)-starttime)) secs"
   133       peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' >&log.txt
   134       test $? -eq 0 && VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}')
   135       test "$VALUE" = "$2" && let rc=0
   136    done
   137    echo
   138    cat log.txt
   139    if test $rc -eq 0 ; then
   140  	echo "===================== Query on PEER$PEER on channel '$CHANNEL_NAME' is successful ===================== "
   141    else
   142  	echo "!!!!!!!!!!!!!!! Query result on PEER$PEER is INVALID !!!!!!!!!!!!!!!!"
   143          echo "================== ERROR !!! FAILED to execute End-2-End Scenario =================="
   144  	echo
   145    fi
   146  }
   147  
   148  chaincodeInvoke () {
   149          PEER=$1
   150          if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
   151  		peer chaincode invoke -o orderer0:7050 -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}' >&log.txt
   152  	else
   153  		peer chaincode invoke -o orderer0:7050  --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}' >&log.txt
   154  	fi
   155  	res=$?
   156  	cat log.txt
   157  	verifyResult $res "Invoke execution on PEER$PEER failed "
   158  	echo "===================== Invoke transaction on PEER$PEER on channel '$CHANNEL_NAME' is successful ===================== "
   159  	echo
   160  }
   161  
   162  ## Create channel
   163  createChannel
   164  
   165  ## Join all the peers to the channel
   166  joinChannel
   167  
   168  ## Set the anchor peers for each org in the channel
   169  updateAnchorPeers 0
   170  updateAnchorPeers 2
   171  
   172  ## Install chaincode on Peer0/Org0 and Peer2/Org1
   173  installChaincode 0
   174  installChaincode 2
   175  
   176  #Instantiate chaincode on Peer2/Org1
   177  echo "Instantiating chaincode on Peer2/Org1 ..."
   178  instantiateChaincode 2
   179  
   180  #Query on chaincode on Peer0/Org0
   181  chaincodeQuery 0 100
   182  
   183  #Invoke on chaincode on Peer0/Org0
   184  echo "send Invoke transaction on Peer0/Org0 ..."
   185  chaincodeInvoke 0
   186  
   187  ## Install chaincode on Peer3/Org1
   188  installChaincode 3
   189  
   190  #Query on chaincode on Peer3/Org1, check if the result is 90
   191  chaincodeQuery 3 90
   192  
   193  echo
   194  echo "===================== All GOOD, End-2-End execution completed ===================== "
   195  echo
   196  exit 0