github.com/kchristidis/fabric@v1.0.4-0.20171028114726-837acd08cde1/test/regression/daily/chaincodeTests/envsetup/testYourChaincode.py (about) 1 # Copyright IBM Corp. All Rights Reserved. 2 # 3 # SPDX-License-Identifier: Apache-2.0 4 # 5 6 #!/usr/bin/python2.7 7 import subprocess 8 import unittest 9 from subprocess import check_output 10 11 class ChaincodeAPI(unittest.TestCase): 12 13 @classmethod 14 def setUpClass(cls): 15 cls.CHANNEL_NAME = "channel" 16 cls.CHANNELS = '2' 17 cls.CHAINCODES = '1' 18 cls.ENDORSERS = '4' 19 check_output(["./network_setup.sh up {0} {1} {2} {3}".format(cls.CHANNEL_NAME, cls.CHANNELS, cls.CHAINCODES, cls.ENDORSERS)], 20 shell=True) 21 22 @classmethod 23 def tearDownClass(cls): 24 check_output(["./network_setup.sh down"], shell=True) 25 26 ################################################################################# 27 28 def runIt(self, command, scriptName): 29 cmd = "/opt/gopath/src/github.com/hyperledger/fabric/test/regression/daily/chaincodeTests/%s %s %s %s %s %s"% (scriptName, self.CHANNEL_NAME, self.CHANNELS, self.CHAINCODES, self.ENDORSERS, command) 30 output = check_output(["docker exec cli {0}".format(cmd)], shell=True) 31 return output 32 33 #####Begin tests for different chaincode samples that exist in fabricExamples folder ################### 34 def test_AFAB3843_Create_Join_Channel(self): 35 ''' Create_Join_Channel must be run as the first test. Each chaincode test is dependent on this test 36 So make sure when adding new tests this is picked up as the first one by py.test 37 ''' 38 output = self.runIt("create", "fabricFeatureChaincodes/create_join_channel.sh") 39 self.assertIn('Channel "channel0" is created successfully', output) 40 self.assertIn('Channel "channel1" is created successfully', output) 41 42 output = self.runIt("join", "fabricFeatureChaincodes/create_join_channel.sh") 43 self.assertIn('PEER0 joined on the channel "channel0" successfully', output) 44 self.assertIn('PEER0 joined on the channel "channel1" successfully', output) 45 self.assertIn('PEER1 joined on the channel "channel0" successfully', output) 46 self.assertIn('PEER1 joined on the channel "channel1" successfully', output) 47 self.assertIn('PEER2 joined on the channel "channel0" successfully', output) 48 self.assertIn('PEER2 joined on the channel "channel1" successfully', output) 49 self.assertIn('PEER3 joined on the channel "channel0" successfully', output) 50 self.assertIn('PEER3 joined on the channel "channel1" successfully', output) 51 52 #@unittest.skip("skipping") 53 def test_FAB3794_example02_invoke_query_inaloop_onallpeers(self): 54 ''' This tests example02 chaincode where transfer values from assets 55 "a" and "b" via Invoke and then verify values by Querying on Ledger. 56 ''' 57 output = self.runIt("install", "fabricFeatureChaincodes/e2e_test_example02.sh") 58 self.assertIn("Chaincode 'myccex020' is installed on PEER0 successfully", output) 59 self.assertIn("Chaincode 'myccex020' is installed on PEER1 successfully", output) 60 self.assertIn("Chaincode 'myccex020' is installed on PEER2 successfully", output) 61 self.assertIn("Chaincode 'myccex020' is installed on PEER3 successfully", output) 62 63 output = self.runIt("instantiate", "fabricFeatureChaincodes/e2e_test_example02.sh") 64 self.assertIn("Chaincode 'myccex020' Instantiation on PEER2 on 'channel0' is successful", output) 65 self.assertIn("Chaincode 'myccex020' Instantiation on PEER2 on 'channel1' is successful", output) 66 67 output = self.runIt("invokeQuery", "fabricFeatureChaincodes/e2e_test_example02.sh") 68 self.assertIn('Query on PEER0 on channel0/myccex020 is successful', output) 69 countPeer0Ch0 = output.count('Query on PEER0 on channel0/myccex020 is successful') 70 self.assertEquals(countPeer0Ch0, 2) 71 self.assertIn('Query on PEER1 on channel0/myccex020 is successful', output) 72 countPeer1Ch0 = output.count('Query on PEER1 on channel0/myccex020 is successful') 73 self.assertEquals(countPeer1Ch0, 2) 74 self.assertIn('Query on PEER2 on channel0/myccex020 is successful', output) 75 countPeer2Ch0 = output.count('Query on PEER2 on channel0/myccex020 is successful') 76 self.assertEquals(countPeer2Ch0, 2) 77 self.assertIn('Query on PEER3 on channel0/myccex020 is successful', output) 78 countPeer3Ch0 = output.count('Query on PEER3 on channel0/myccex020 is successful') 79 self.assertEquals(countPeer3Ch0, 2) 80 self.assertIn('Query on PEER0 on channel1/myccex020 is successful', output) 81 countPeer0Ch1 = output.count('Query on PEER0 on channel1/myccex020 is successful') 82 self.assertEquals(countPeer0Ch1, 2) 83 self.assertIn('Query on PEER1 on channel1/myccex020 is successful', output) 84 countPeer1Ch1 = output.count('Query on PEER1 on channel1/myccex020 is successful') 85 self.assertEquals(countPeer1Ch1, 2) 86 self.assertIn('Query on PEER2 on channel1/myccex020 is successful', output) 87 countPeer2Ch1 = output.count('Query on PEER2 on channel1/myccex020 is successful') 88 self.assertEquals(countPeer2Ch1, 2) 89 self.assertIn('Query on PEER3 on channel1/myccex020 is successful', output) 90 countPeer3Ch1 = output.count('Query on PEER3 on channel1/myccex020 is successful') 91 self.assertEquals(countPeer3Ch1, 2) 92 self.assertIn('Invoke transaction on PEER0 on channel0/myccex020 is successful', output) 93 self.assertIn('Invoke transaction on PEER1 on channel0/myccex020 is successful', output) 94 self.assertIn('Invoke transaction on PEER2 on channel0/myccex020 is successful', output) 95 self.assertIn('Invoke transaction on PEER3 on channel0/myccex020 is successful', output) 96 self.assertIn('Invoke transaction on PEER0 on channel1/myccex020 is successful', output) 97 self.assertIn('Invoke transaction on PEER1 on channel1/myccex020 is successful', output) 98 self.assertIn('Invoke transaction on PEER2 on channel1/myccex020 is successful', output) 99 self.assertIn('Invoke transaction on PEER3 on channel1/myccex020 is successful', output) 100 self.assertIn('End-2-End for chaincode example02 completed successfully', output) 101 102 @unittest.skip("skipping") 103 def test_FAB3791_example03_negative_test_disallow_write_attempt_in_query(self): 104 ''' Test writing to ledger via query fails as expected 105 ''' 106 output = self.runIt("install", "fabricFeatureChaincodes/e2e_test_example03.sh") 107 self.assertIn("successfully", output) 108 output = self.runIt("instantiate", "fabricFeatureChaincodes/e2e_test_example03.sh") 109 self.assertIn("successfully", output) 110 output = self.runIt("invokeQuery", "fabricFeatureChaincodes/e2e_test_example03.sh") 111 self.assertIn('Query result on PEER0 is INVALID', output) 112 113 @unittest.skip("skipping") 114 def test_FAB3796_example04_chaincode_to_chaincode_call_on_occurrence_of_an_event(self): 115 ''' Test chaincode to chaincode calling when an event is generated. 116 ''' 117 output = self.runIt("install", "fabricFeatureChaincodes/e2e_test_example04.sh") 118 self.assertIn("successfully", output) 119 output = self.runIt("instantiate", "fabricFeatureChaincodes/e2e_test_example04.sh") 120 self.assertIn("successfully", output) 121 output = self.runIt("invokeQuery", "fabricFeatureChaincodes/e2e_test_example04.sh") 122 self.assertIn("successfully", output) 123 124 @unittest.skip("skipping") 125 def test_FAB3797_example05_chaincode_to_chaincode_call_on_same_and_different_channel(self): 126 ''' Test chaincode to chaincode calling, when second chaincode exists 127 on a different channel. 128 ''' 129 output = self.runIt("install", "fabricFeatureChaincodes/e2e_test_example05.sh") 130 self.assertIn("Chaincode 'myccex05' is installed on PEER0 successfully", output) 131 self.assertIn("Chaincode 'myccex05' is installed on PEER1 successfully", output) 132 self.assertIn("Chaincode 'myccex05' is installed on PEER2 successfully", output) 133 self.assertIn("Chaincode 'myccex05' is installed on PEER3 successfully", output) 134 self.assertIn("Chaincode 'ex02_b' is installed on PEER0 successfully", output) 135 self.assertIn("Chaincode 'ex02_b' is installed on PEER1 successfully", output) 136 self.assertIn("Chaincode 'ex02_b' is installed on PEER2 successfully", output) 137 self.assertIn("Chaincode 'ex02_b' is installed on PEER3 successfully", output) 138 output = self.runIt("instantiate", "fabricFeatureChaincodes/e2e_test_example05.sh") 139 self.assertIn("successfully", output) 140 output = self.runIt("invokeQuery", "fabricFeatureChaincodes/e2e_test_example05.sh") 141 self.assertIn("successfully", output) 142 143 @unittest.skip("skipping") 144 def test_FAB3792_marbles02_init_query_transfer_marbles(self): 145 ''' This test few basic operations from marbles02 chaincode. 146 ''' 147 output = self.runIt("install", "fabricFeatureChaincodes/e2e_test_marbles02.sh") 148 self.assertIn("successfully", output) 149 output = self.runIt("instantiate", "fabricFeatureChaincodes/e2e_test_marbles02.sh") 150 self.assertIn("successfully", output) 151 output = self.runIt("initMarble1", "fabricFeatureChaincodes/e2e_test_marbles02.sh") 152 self.assertIn("successful", output) 153 output = self.runIt("queryMarble1", "fabricFeatureChaincodes/e2e_test_marbles02.sh") 154 self.assertIn("successful", output) 155 output = self.runIt("initMarble2", "fabricFeatureChaincodes/e2e_test_marbles02.sh") 156 self.assertIn("successful", output) 157 output = self.runIt("queryMarble2", "fabricFeatureChaincodes/e2e_test_marbles02.sh") 158 self.assertIn("Query marble2 on PEER2 on channel0 on chaincode mymarbles020 is successful", output) 159 output = self.runIt("txfrMarble", "fabricFeatureChaincodes/e2e_test_marbles02.sh") 160 self.assertIn("Txfr marble1 on PEER2 on channel0 on chaincode mymarbles020 to JERRY is successful", output) 161 output = self.runIt("queryAfterTxfrMarble", "fabricFeatureChaincodes/e2e_test_marbles02.sh") 162 self.assertIn("Query marble1 on PEER2 on channel0 on chaincode mymarbles020 is successful", output) 163 164 @unittest.skip("skipping") 165 def test_FAB3793_chaincodeAPIDriver_exercise_chaincode_api_calls_as_invoke_functions(self): 166 ''' Calling functions in shim/chaincode.go. 167 ''' 168 output = self.runIt("install", "fabricFeatureChaincodes/e2e_test_ccapidriver.sh") 169 self.assertIn("successfully", output) 170 output = self.runIt("instantiate", "fabricFeatureChaincodes/e2e_test_ccapidriver.sh") 171 self.assertIn("successfully", output) 172 output = self.runIt("invoke_getTxTimeStamp", "fabricFeatureChaincodes/e2e_test_ccapidriver.sh") 173 self.assertIn("successful", output) 174 output = self.runIt("invoke_getBinding", "fabricFeatureChaincodes/e2e_test_ccapidriver.sh") 175 self.assertIn("successful", output) 176 output = self.runIt("invoke_getCreator", "fabricFeatureChaincodes/e2e_test_ccapidriver.sh") 177 self.assertIn("successful", output) 178 output = self.runIt("invoke_getSignedProposal", "fabricFeatureChaincodes/e2e_test_ccapidriver.sh") 179 self.assertIn("successful", output) 180 output = self.runIt("invoke_getTransient", "fabricFeatureChaincodes/e2e_test_ccapidriver.sh") 181 self.assertIn("successful", output) 182 183 @unittest.skip("skipping") 184 def test_FAB3793_chaincodeAPIDriver_2_exercise_chaincode_api_calls_as_direct_calls(self): 185 ''' Calling functions in shim/chaincode.go. 186 ''' 187 output = self.runIt("install", "fabricFeatureChaincodes/e2e_test_ccapidriver_two.sh") 188 self.assertIn("successfully", output) 189 output = self.runIt("instantiate", "fabricFeatureChaincodes/e2e_test_ccapidriver_two.sh") 190 self.assertIn("successfully", output) 191 output = self.runIt("invoke_getTxTimeStamp", "fabricFeatureChaincodes/e2e_test_ccapidriver_two.sh") 192 self.assertIn("successful", output) 193 output = self.runIt("invoke_getBinding", "fabricFeatureChaincodes/e2e_test_ccapidriver_two.sh") 194 self.assertIn("successful", output) 195 output = self.runIt("invoke_getCreator", "fabricFeatureChaincodes/e2e_test_ccapidriver_two.sh") 196 self.assertIn("successful", output) 197 output = self.runIt("invoke_getSignedProposal", "fabricFeatureChaincodes/e2e_test_ccapidriver_two.sh") 198 self.assertIn("successful", output) 199 output = self.runIt("invoke_getTransient", "fabricFeatureChaincodes/e2e_test_ccapidriver_two.sh") 200 self.assertIn("successful", output) 201 202 @unittest.skip("skipping") 203 def test_FABXXXX_Laurie_Chaincode(self): 204 ''' Calling functions in shim/chaincode.go. 205 ''' 206 pass 207 208 @unittest.skip("skipping") 209 def test_FABXXXX_Alpha_Chaincode(self): 210 ''' Calling functions in shim/chaincode.go. 211 ''' 212 pass 213 214 @unittest.skip("skipping") 215 def test_FABXXXX_XYZ_Chaincode(self): 216 ''' Calling functions in shim/chaincode.go. 217 ''' 218 pass 219 220 @unittest.skip("skipping") 221 def test_FABXXXX_ABC_Chaincode(self): 222 ''' Calling functions in shim/chaincode.go. 223 ''' 224 pass