github.com/leonlxy/hyperledger@v1.0.0-alpha.0.20170427033203-34922035d248/examples/dchackfest/samples/e2e/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/ordererOrganizations/example.com/orderers/orderer.example.com/cacerts/example.com-cert.pem
     9  
    10  echo "Channel name : "$CHANNEL_NAME
    11  
    12  
    13  verifyResult () {
    14  	if [ $1 -ne 0 ] ; then
    15  		echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!"
    16                  echo "================== ERROR !!! FAILED to execute End-2-End Scenario =================="
    17  		echo
    18     		exit 1
    19  	fi
    20  }
    21  
    22  setGlobals () {
    23  
    24  	if [ $1 -eq 0 -o $1 -eq 1 ] ; then
    25  		CORE_PEER_LOCALMSPID="Org0MSP"
    26  		if [ $1 -eq 0 ]; then
    27  			CORE_PEER_ADDRESS=peer0.org1.example.com:7051
    28  			CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/cacerts/org1.example.com-cert.pem
    29  			CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com
    30  		else 
    31  			CORE_PEER_ADDRESS=peer1.org1.example.com:7051
    32  			CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/cacerts/org1.example.com-cert.pem
    33  			CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com
    34  		fi 
    35  	else
    36  		CORE_PEER_LOCALMSPID="Org1MSP"
    37  		if [ $1 -eq 2 ]; then
    38  			CORE_PEER_ADDRESS=peer0.org2.example.com:7051
    39  			CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/cacerts/org2.example.com-cert.pem
    40  			CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com
    41  		else 
    42  			CORE_PEER_ADDRESS=peer1.org2.example.com:7051
    43  			CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/cacerts/org2.example.com-cert.pem
    44  			CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer1.org2.example.com
    45  		fi 
    46  
    47  	fi
    48  	env |grep CORE
    49  }
    50  
    51  createChannel() {
    52  	CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com
    53  	CORE_PEER_LOCALMSPID="OrdererMSP"
    54  	env |grep CORE
    55  
    56          if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
    57  		peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f channel.tx >&log.txt
    58  	else
    59  		peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt
    60  	fi
    61  	res=$?
    62  	cat log.txt
    63  	verifyResult $res "Channel creation failed"
    64  	echo "===================== Channel \"$CHANNEL_NAME\" is created 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 orderer.example.com: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 orderer.example.com: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  	exit 1
   146    fi
   147  }
   148  
   149  chaincodeInvoke () {
   150          PEER=$1
   151          setGlobals $PEER
   152          if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
   153  		peer chaincode invoke -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}' >&log.txt
   154  	else
   155  		peer chaincode invoke -o orderer.example.com:7050  --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}' >&log.txt
   156  	fi
   157  	res=$?
   158  	cat log.txt
   159  	verifyResult $res "Invoke execution on PEER$PEER failed "
   160  	echo "===================== Invoke transaction on PEER$PEER on channel '$CHANNEL_NAME' is successful ===================== "
   161  	echo
   162  }
   163  
   164  #downloadChaincodes () {
   165  #	CURRENT_DIR=$PWD
   166  #	mkdir -p /opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02/
   167  #        cd /opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02/
   168  #	wget https://raw.githubusercontent.com/hyperledger/fabric/master/examples/chaincode/go/chaincode_example02/chaincode_example02.go
   169  
   170  #	mkdir -p /opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go/marbles02/
   171  #	cd /opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go/marbles02/
   172  #	wget https://raw.githubusercontent.com/hyperledger/fabric/master/examples/chaincode/go/marbles02/marbles_chaincode.go
   173  #	cd $CURRENT_DIR
   174  #}
   175  
   176  #downloadChaincodes
   177  
   178  ## Create channel
   179  createChannel
   180  
   181  ## Join all the peers to the channel
   182  joinChannel
   183  
   184  
   185  ## Install chaincode on Peer0/Org0 and Peer2/Org1
   186  installChaincode 0
   187  installChaincode 2
   188  
   189  #Instantiate chaincode on Peer2/Org1
   190  echo "Instantiating chaincode on Peer2/Org1 ..."
   191  instantiateChaincode 2
   192  
   193  #Query on chaincode on Peer0/Org0
   194  chaincodeQuery 0 100
   195  
   196  #Invoke on chaincode on Peer0/Org0
   197  echo "send Invoke transaction on Peer0/Org0 ..."
   198  chaincodeInvoke 0
   199  
   200  ## Install chaincode on Peer3/Org1
   201  installChaincode 3
   202  
   203  #Query on chaincode on Peer3/Org1, check if the result is 90
   204  chaincodeQuery 3 90
   205  
   206  echo
   207  echo "===================== All GOOD, End-2-End execution completed ===================== "
   208  echo
   209  exit 0