def step_impl(context, userName, secret): assert 'compose_containers' in context, "compose_containers not found in context" assert 'table' in context, "table (of peers) not found in context" # Get list of IPs to login to aliases = context.table.headings containerDataList = bdd_test_util.getContainerDataValuesFromContext(context, aliases, lambda containerData: containerData) secretMsg = { "enrollId": userName, "enrollSecret" : secret } # Login to each container specified for containerData in containerDataList: request_url = buildUrl(context, containerData.ipAddress, "/registrar") bdd_log("POSTing path = {}".format(request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(secretMsg), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp bdd_log("message = {0}".format(resp.json())) # Create new User entry bdd_test_util.registerUser(context, secretMsg, containerData.composeService) # Store the username in the context context.userName = userName # if we already have the chaincodeSpec, change secureContext if 'chaincodeSpec' in context: context.chaincodeSpec["secureContext"] = context.userName
def invokeUsingChaincodeService(context, devopsFunc, functionName, containerAlias): # Invoke the POST chaincodeOpPayload = createChaincodeOpPayload(devopsFunc, context.chaincodeSpec) ipAddress = context.containerAliasMap[containerAlias].ipAddress request_url = buildUrl(context, ipAddress, "/chaincode") bdd_log("POSTing path = {}".format(request_url)) bdd_log("Using attributes {0}".format(context.chaincodeSpec['attributes'])) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeOpPayload), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" % (request_url, resp.text) context.response = resp bdd_log("RESULT from {0} of chaincode from peer {1}".format( functionName, containerAlias)) bdd_log(json.dumps(context.response.json(), indent=4)) if 'result' in resp.json(): result = resp.json()['result'] if 'message' in result: transactionID = result['message'] context.transactionID = transactionID
def query_common(context, chaincodeName, functionName, value, failOnError): assert 'chaincodeSpec' in context, "chaincodeSpec not found in context" assert 'compose_containers' in context, "compose_containers not found in context" assert 'table' in context, "table (of peers) not found in context" assert 'peerToSecretMessage' in context, "peerToSecretMessage map not found in context" aliases = context.table.headings containerDataList = bdd_test_util.getContainerDataValuesFromContext(context, aliases, lambda containerData: containerData) # Update the chaincodeSpec ctorMsg for invoke context.chaincodeSpec['ctorMsg']['args'] = [functionName, value] # Invoke the POST # Make deep copy of chaincodeSpec as we will be changing the SecurityContext per call. chaincodeOpPayload = createChaincodeOpPayload("query", copy.deepcopy(context.chaincodeSpec)) responses = [] for container in containerDataList: # Change the SecurityContext per call chaincodeOpPayload['params']["secureContext"] = context.peerToSecretMessage[container.composeService]['enrollId'] bdd_log("Container {0} enrollID = {1}".format(container.containerName, container.getEnv("CORE_SECURITY_ENROLLID"))) request_url = buildUrl(context, container.ipAddress, "/chaincode") bdd_log("POSTing path = {}".format(request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeOpPayload), timeout=30, verify=False) if failOnError: assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) bdd_log("RESULT from {0} of chaincode from peer {1}".format(functionName, container.containerName)) bdd_log(json.dumps(resp.json(), indent = 4)) responses.append(resp) context.responses = responses
def query_common(context, chaincodeName, functionName, value, failOnError): assert 'chaincodeSpec' in context, "chaincodeSpec not found in context" assert 'compose_containers' in context, "compose_containers not found in context" assert 'table' in context, "table (of peers) not found in context" assert 'peerToSecretMessage' in context, "peerToSecretMessage map not found in context" aliases = context.table.headings containerDataList = bdd_test_util.getContainerDataValuesFromContext(context, aliases, lambda containerData: containerData) # Update the chaincodeSpec ctorMsg for invoke context.chaincodeSpec['ctorMsg']['args'] = [functionName, value] # Invoke the POST # Make deep copy of chaincodeSpec as we will be changing the SecurityContext per call. chaincodeOpPayload = createChaincodeOpPayload("query", copy.deepcopy(context.chaincodeSpec)) responses = [] for container in containerDataList: # Change the SecurityContext per call chaincodeOpPayload['params']["secureContext"] = context.peerToSecretMessage[container.composeService]['enrollId'] print("Container {0} enrollID = {1}".format(container.containerName, container.getEnv("CORE_SECURITY_ENROLLID"))) request_url = buildUrl(context, container.ipAddress, "/chaincode") print("{0} POSTing path = {1}".format(currentTime(), request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeOpPayload), timeout=30, verify=False) if failOnError: assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) print("RESULT from {0} of chaincode from peer {1}".format(functionName, container.containerName)) print(json.dumps(resp.json(), indent = 4)) responses.append(resp) context.responses = responses
def step_impl(context, seconds): assert 'transactionID' in context, "transactionID not found in context" assert 'compose_containers' in context, "compose_containers not found in context" # Build map of "containerName" : resp.statusCode respMap = {container.containerName:0 for container in context.compose_containers} # Set the max time before stopping attempts maxTime = datetime.now() + timedelta(seconds = int(seconds)) for container in context.compose_containers: ipAddress = container.ipAddress request_url = buildUrl(context, ipAddress, "/transactions/{0}".format(context.transactionID)) # Loop unless failure or time exceeded while (datetime.now() < maxTime): bdd_log("GETing path = {}".format(request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) if resp.status_code == 404: # Pause then try again respMap[container.containerName] = 404 time.sleep(1) continue elif resp.status_code == 200: # Success, continue respMap[container.containerName] = 200 break else: raise Exception("Error requesting {0}, returned result code = {1}".format(request_url, resp.status_code)) else: raise Exception("Max time exceeded waiting for transactions with current response map = {0}".format(respMap)) bdd_log("Result of request to all peers = {0}".format(respMap)) bdd_log("")
def invokeMasterChaincode(context, devopsFunc, chaincodeName, functionName, containerName): args = [] if 'table' in context: args = context.table[0].cells args = prepend(functionName, args) typeGolang = 1 chaincodeSpec = { "type": typeGolang, "chaincodeID": { "name" : chaincodeName }, "ctorMsg": { "args" : args } } if 'userName' in context: chaincodeSpec["secureContext"] = context.userName chaincodeOpPayload = createChaincodeOpPayload(devopsFunc, chaincodeSpec) ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, "/chaincode") print("{0} POSTing path = {1}".format(currentTime(), request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeOpPayload), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp print("RESULT from {0} of chaincode from peer {1}".format(functionName, containerName)) print(json.dumps(context.response.json(), indent = 4)) if 'result' in resp.json(): result = resp.json()['result'] if 'message' in result: transactionID = result['message'] context.transactionID = transactionID
def step_impl(context, seconds): assert 'transactionID' in context, "transactionID not found in context" assert 'compose_containers' in context, "compose_containers not found in context" # Build map of "containerName" : resp.statusCode respMap = {container.containerName:0 for container in context.compose_containers} # Set the max time before stopping attempts maxTime = datetime.now() + timedelta(seconds = int(seconds)) for container in context.compose_containers: ipAddress = container.ipAddress request_url = buildUrl(context, ipAddress, "/transactions/{0}".format(context.transactionID)) # Loop unless failure or time exceeded while (datetime.now() < maxTime): print("{0} GETing path = {1}".format(currentTime(), request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) if resp.status_code == 404: # Pause then try again respMap[container.containerName] = 404 time.sleep(1) continue elif resp.status_code == 200: # Success, continue respMap[container.containerName] = 200 break else: raise Exception("Error requesting {0}, returned result code = {1}".format(request_url, resp.status_code)) else: raise Exception("Max time exceeded waiting for transactions with current response map = {0}".format(respMap)) print("Result of request to all peers = {0}".format(respMap)) print("")
def invokeMasterChaincode(context, devopsFunc, chaincodeName, functionName, containerName): args = [] if 'table' in context: args = context.table[0].cells args = prepend(functionName, args) typeGolang = 1 chaincodeSpec = { "type": typeGolang, "chaincodeID": { "name" : chaincodeName }, "ctorMsg": { "args" : args } } if 'userName' in context: chaincodeSpec["secureContext"] = context.userName chaincodeOpPayload = createChaincodeOpPayload(devopsFunc, chaincodeSpec) ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, "/chaincode") bdd_log("POSTing path = {}".format(request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeOpPayload), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp bdd_log("RESULT from {0} of chaincode from peer {1}".format(functionName, containerName)) bdd_log(json.dumps(context.response.json(), indent = 4)) if 'result' in resp.json(): result = resp.json()['result'] if 'message' in result: transactionID = result['message'] context.transactionID = transactionID
def step_impl(context): assert 'compose_containers' in context, "compose_containers not found in context" assert 'table' in context, "table (of peers, username, secret) not found in context" peerToSecretMessage = {} # Login to each container specified using username and secret for row in context.table.rows: peer, userName, secret = row['peer'], row['username'], row['secret'] secretMsg = {"enrollId": userName, "enrollSecret": secret} ipAddress = context.containerAliasMap[peer].ipAddress request_url = buildUrl(context, ipAddress, "/registrar") bdd_log("POSTing to service = {0}, path = {1}".format( peer, request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(secretMsg), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" % ( request_url, resp.text) context.response = resp bdd_log("message = {0}".format(resp.json())) peerToSecretMessage[peer] = secretMsg context.peerToSecretMessage = peerToSecretMessage
def step_impl(context, chaincodeName, functionName): assert 'chaincodeSpec' in context, "chaincodeSpec not found in context" assert 'compose_containers' in context, "compose_containers not found in context" # Update the chaincodeSpec ctorMsg for invoke args = [] if 'table' in context: # There is ctor arguments args = context.table[0].cells args = prepend(functionName, args) context.chaincodeSpec['ctorMsg'][ 'args'] = args #context.table[0].cells if ('table' in context) else [] # Invoke the POST chaincodeOpPayload = createChaincodeOpPayload("query", context.chaincodeSpec) responses = [] for container in context.compose_containers: request_url = buildUrl(context, container.ipAddress, "/chaincode") bdd_log("POSTing path = {}".format(request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeOpPayload), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" % ( request_url, resp.text) responses.append(resp) context.responses = responses
def step_impl(context, userName, secret): assert 'compose_containers' in context, "compose_containers not found in context" assert 'table' in context, "table (of peers) not found in context" # Get list of IPs to login to aliases = context.table.headings containerDataList = bdd_test_util.getContainerDataValuesFromContext(context, aliases, lambda containerData: containerData) secretMsg = { "enrollId": userName, "enrollSecret" : secret } # Login to each container specified for containerData in containerDataList: request_url = buildUrl(context, containerData.ipAddress, "/registrar") print("{0} POSTing path = {1}".format(currentTime(), request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(secretMsg), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp print("message = {0}".format(resp.json())) # Create new User entry bdd_test_util.registerUser(context, secretMsg, containerData.composeService) # Store the username in the context context.userName = userName # if we already have the chaincodeSpec, change secureContext if 'chaincodeSpec' in context: context.chaincodeSpec["secureContext"] = context.userName
def step_impl(context, path, containerName): ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, path) bdd_log("Requesting path = {0}".format(request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) assert resp.status_code == 200, "Failed to GET url %s: %s" % (request_url,resp.text) context.response = resp bdd_log("")
def getConnectedPeersFromPeer(context, thisPeer): url = buildUrl(context, thisPeer.ipAddress, "/network/peers") response = requests.get(url, headers={'Accept': 'application/json'}, verify=False) if response.status_code != 200: return None return getAttributeFromJSON("peers", response.json(), "There should be a peer json attribute")
def step_impl(context, path, containerName): ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, path) print("Requesting path = {0}".format(request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) assert resp.status_code == 200, "Failed to GET url %s: %s" % (request_url,resp.text) context.response = resp print("")
def step_impl(context, path, containerAlias): ipAddress = context.containerAliasMap[containerAlias].ipAddress request_url = buildUrl(context, ipAddress, path) bdd_log("Requesting path = {0}".format(request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) assert resp.status_code == 200, "Failed to GET url %s: %s" % (request_url,resp.text) context.response = resp bdd_log("")
def step_impl(context, seconds, containerName): assert 'transactionID' in context, "transactionID not found in context" ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, "/transactions/{0}".format(context.transactionID)) bdd_log("GETing path = {}".format(request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp
def step_impl(context, seconds, containerAlias): assert 'transactionID' in context, "transactionID not found in context" ipAddress = context.containerAliasMap[containerAlias].ipAddress request_url = buildUrl(context, ipAddress, "/transactions/{0}".format(context.transactionID)) bdd_log("GETing path = {}".format(request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp
def step_impl(context, seconds, containerName): assert 'transactionID' in context, "transactionID not found in context" ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, "/transactions/{0}".format(context.transactionID)) print("{0} GETing path = {1}".format(currentTime(), request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp
def step_impl(context, chaincodeName, functionName, containerName, times): assert 'chaincodeSpec' in context, "chaincodeSpec not found in context" ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, "/chain") resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) assert resp.status_code == 200, "Failed to get chain height %s: %s" % (request_url,resp.text) context.chainheight = getAttributeFromJSON("height", resp.json(), "Height not found in response.") context.txcount = times for i in range(int(times)): invokeChaincode(context, "invoke", functionName, containerName)
def step_impl(context, chaincodeName, functionName, containerName, times): assert 'chaincodeSpec' in context, "chaincodeSpec not found in context" ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, "/chain") resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) assert resp.status_code == 200, "Failed to get chain height %s: %s" % (request_url,resp.text) context.chainheight = getAttributeFromJSON("height", resp.json(), "Height not found in response.") context.txcount = times for i in range(int(times)): invokeChaincode(context, "invoke", functionName, containerName)
def getConnectedPeersFromPeer(context, thisPeer): url = buildUrl(context, thisPeer.ipAddress, "/network/peers") response = requests.get(url, headers={'Accept': 'application/json'}, verify=False) if response.status_code != 200: return None return getAttributeFromJSON("peers", response.json(), "There should be a peer json attribute")
def step_impl(context, path, containerAlias): ipAddress = context.containerAliasMap[containerAlias].ipAddress request_url = buildUrl(context, ipAddress, path) bdd_log("Requesting path = {0}".format(request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) assert resp.status_code == 200, "Failed to GET url %s: %s" % (request_url, resp.text) context.response = resp bdd_log("")
def deployChainCodeToContainer(context, chaincode, containerName): ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, "/chaincode") bdd_log("Requesting path = {0}".format(request_url)) chaincodeSpec = createChaincodeSpec(context, chaincode) chaincodeOpPayload = createChaincodeOpPayload("deploy", chaincodeSpec) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeOpPayload), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp chaincodeName = resp.json()['result']['message'] chaincodeSpec['chaincodeID']['name'] = chaincodeName context.chaincodeSpec = chaincodeSpec bdd_log(json.dumps(chaincodeSpec, indent=4)) bdd_log("")
def deployChainCodeToContainer(context, chaincode, containerName): ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, "/chaincode") print("Requesting path = {0}".format(request_url)) chaincodeSpec = createChaincodeSpec(context, chaincode) chaincodeOpPayload = createChaincodeOpPayload("deploy", chaincodeSpec) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeOpPayload), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp chaincodeName = resp.json()['result']['message'] chaincodeSpec['chaincodeID']['name'] = chaincodeName context.chaincodeSpec = chaincodeSpec print(json.dumps(chaincodeSpec, indent=4)) print("")
def step_impl(context, seconds): assert 'chainheight' in context, "chainheight not found in context" assert 'txcount' in context, "txcount not found in context" assert 'compose_containers' in context, "compose_containers not found in context" assert 'table' in context, "table (of peers) not found in context" # Set the max time before stopping attempts maxTime = datetime.now() + timedelta(seconds=int(seconds)) responseStatusCodeMap = {} aliases = context.table.headings for containerAlias in aliases: container = context.containerAliasMap[containerAlias] ipAddress = container.ipAddress request_url = buildUrl(context, ipAddress, "/chain") # Loop unless failure or time exceeded while (datetime.now() < maxTime): bdd_log("GETing path = {}".format(request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) if resp.status_code == 404: # Pause then try again responseStatusCodeMap[container.name] = 404 time.sleep(1) continue elif resp.status_code == 200: height = getAttributeFromJSON("height", resp.json(), "Height not found in response.") if height >= int(context.chainheight) + int(context.txcount): # Success, continue responseStatusCodeMap[container.name] = 200 break else: continue else: raise Exception( "Error requesting {0}, returned result code = {1}".format( request_url, resp.status_code)) else: raise Exception( "Max time exceeded waiting for transactions with current response map = {0}" .format(respMap)) bdd_log( "Result of request to all peers = {0}".format(responseStatusCodeMap)) bdd_log("")
def multiRequest(context, seconds, containerDataList, pathBuilderFunc): """Perform a multi request against the system""" # Build map of "containerName" : response respMap = {container.containerName:None for container in containerDataList} # Set the max time before stopping attempts maxTime = datetime.now() + timedelta(seconds = int(seconds)) for container in containerDataList: ipAddress = container.ipAddress request_url = buildUrl(context, ipAddress, pathBuilderFunc(context, container)) # Loop unless failure or time exceeded while (datetime.now() < maxTime): bdd_log("GETing path = {}".format(request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) respMap[container.containerName] = resp else: raise Exception("Max time exceeded waiting for multiRequest with current response map = {0}".format(respMap))
def multiRequest(context, seconds, containerDataList, pathBuilderFunc): """Perform a multi request against the system""" # Build map of "containerName" : response respMap = {container.containerName:None for container in containerDataList} # Set the max time before stopping attempts maxTime = datetime.now() + timedelta(seconds = int(seconds)) for container in containerDataList: ipAddress = container.ipAddress request_url = buildUrl(context, ipAddress, pathBuilderFunc(context, container)) # Loop unless failure or time exceeded while (datetime.now() < maxTime): print("{0} GETing path = {1}".format(currentTime(), request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) respMap[container.containerName] = resp else: raise Exception("Max time exceeded waiting for multiRequest with current response map = {0}".format(respMap))
def invokeUsingDevopsService(context, devopsFunc, functionName, containerName, idGenAlg): # Invoke the POST chaincodeInvocationSpec = { "chaincodeSpec" : context.chaincodeSpec } ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) if idGenAlg is not None: chaincodeInvocationSpec['idGenerationAlg'] = idGenAlg request_url = buildUrl(context, ipAddress, "/devops/{0}".format(devopsFunc)) bdd_log("POSTing path = {}".format(request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeInvocationSpec), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp bdd_log("RESULT from {0} of chaincode from peer {1}".format(functionName, containerName)) bdd_log(json.dumps(context.response.json(), indent = 4)) if 'message' in resp.json(): transactionID = context.response.json()['message'] context.transactionID = transactionID
def invokeUsingDevopsService(context, devopsFunc, functionName, containerName, idGenAlg): # Invoke the POST chaincodeInvocationSpec = { "chaincodeSpec" : context.chaincodeSpec } ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) if idGenAlg is not None: chaincodeInvocationSpec['idGenerationAlg'] = idGenAlg request_url = buildUrl(context, ipAddress, "/devops/{0}".format(devopsFunc)) print("{0} POSTing path = {1}".format(currentTime(), request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeInvocationSpec), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp print("RESULT from {0} of chaincode from peer {1}".format(functionName, containerName)) print(json.dumps(context.response.json(), indent = 4)) if 'message' in resp.json(): transactionID = context.response.json()['message'] context.transactionID = transactionID
def invokeUsingChaincodeService(context, devopsFunc, functionName, containerName): # Invoke the POST chaincodeOpPayload = createChaincodeOpPayload(devopsFunc, context.chaincodeSpec) ipAddress = bdd_test_util.ipFromContainerNamePart(containerName, context.compose_containers) request_url = buildUrl(context, ipAddress, "/chaincode") print("{0} POSTing path = {1}".format(currentTime(), request_url)) print("Using attributes {0}".format(context.chaincodeSpec['attributes'])) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeOpPayload), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp print("RESULT from {0} of chaincode from peer {1}".format(functionName, containerName)) print(json.dumps(context.response.json(), indent = 4)) if 'result' in resp.json(): result = resp.json()['result'] if 'message' in result: transactionID = result['message'] context.transactionID = transactionID
def step_impl(context, seconds): assert 'chainheight' in context, "chainheight not found in context" assert 'txcount' in context, "txcount not found in context" assert 'compose_containers' in context, "compose_containers not found in context" assert 'table' in context, "table (of peers) not found in context" aliases = context.table.headings containerDataList = bdd_test_util.getContainerDataValuesFromContext(context, aliases, lambda containerData: containerData) # Build map of "containerName" : resp.statusCode respMap = {container.containerName:0 for container in containerDataList} # Set the max time before stopping attempts maxTime = datetime.now() + timedelta(seconds = int(seconds)) for container in containerDataList: ipAddress = container.ipAddress request_url = buildUrl(context, ipAddress, "/chain") # Loop unless failure or time exceeded while (datetime.now() < maxTime): print("{0} GETing path = {1}".format(currentTime(), request_url)) resp = requests.get(request_url, headers={'Accept': 'application/json'}, verify=False) if resp.status_code == 404: # Pause then try again respMap[container.containerName] = 404 time.sleep(1) continue elif resp.status_code == 200: height = getAttributeFromJSON("height", resp.json(), "Height not found in response.") if height >= int(context.chainheight) + int(context.txcount): # Success, continue respMap[container.containerName] = 200 break else: continue else: raise Exception("Error requesting {0}, returned result code = {1}".format(request_url, resp.status_code)) else: raise Exception("Max time exceeded waiting for transactions with current response map = {0}".format(respMap)) print("Result of request to all peers = {0}".format(respMap)) print("")
def step_impl(context, chaincodeName, functionName): assert 'chaincodeSpec' in context, "chaincodeSpec not found in context" assert 'compose_containers' in context, "compose_containers not found in context" # Update the chaincodeSpec ctorMsg for invoke args = [] if 'table' in context: # There is ctor arguments args = context.table[0].cells args = prepend(functionName, args) context.chaincodeSpec['ctorMsg']['args'] = args #context.table[0].cells if ('table' in context) else [] # Invoke the POST chaincodeOpPayload = createChaincodeOpPayload("query", context.chaincodeSpec) responses = [] for container in context.compose_containers: request_url = buildUrl(context, container.ipAddress, "/chaincode") print("{0} POSTing path = {1}".format(currentTime(), request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeOpPayload), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) responses.append(resp) context.responses = responses
def step_impl(context): assert 'compose_containers' in context, "compose_containers not found in context" assert 'table' in context, "table (of peers, username, secret) not found in context" peerToSecretMessage = {} # Login to each container specified using username and secret for row in context.table.rows: peer, userName, secret = row['peer'], row['username'], row['secret'] secretMsg = { "enrollId": userName, "enrollSecret" : secret } ipAddress = bdd_test_util.ipFromContainerNamePart(peer, context.compose_containers) request_url = buildUrl(context, ipAddress, "/registrar") print("POSTing to service = {0}, path = {1}".format(peer, request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(secretMsg), verify=False) assert resp.status_code == 200, "Failed to POST to %s: %s" %(request_url, resp.text) context.response = resp print("message = {0}".format(resp.json())) peerToSecretMessage[peer] = secretMsg context.peerToSecretMessage = peerToSecretMessage