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 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']['function'] = functionName context.chaincodeSpec['ctorMsg']['args'] = [value] # Invoke the POST # Make deep copy of chaincodeSpec as we will be changing the SecurityContext per call. chaincodeInvocationSpec = { "chaincodeSpec" : copy.deepcopy(context.chaincodeSpec) } responses = [] for container in containerDataList: # Change the SecurityContext per call chaincodeInvocationSpec['chaincodeSpec']["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, "/devops/{0}".format(functionName)) print("{0} POSTing path = {1}".format(currentTime(), request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeInvocationSpec), 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, enrollId, enrollSecret, composeService): assert 'compose_containers' in context, "compose_containers not found in context" # Get the sampleApp IP Address containerDataList = bdd_test_util.getContainerDataValuesFromContext(context, [composeService], lambda containerData: containerData) sampleAppIpAddress = containerDataList[0].ipAddress secretMsg = { "enrollId": enrollId, "enrollSecret" : enrollSecret } request_url = buildUrl(context, sampleAppIpAddress, "/") 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): assert 'transactionID' in context, "transactionID 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, "/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 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']['function'] = functionName context.chaincodeSpec['ctorMsg']['args'] = [value] # Invoke the POST # Make deep copy of chaincodeSpec as we will be changing the SecurityContext per call. chaincodeInvocationSpec = { "chaincodeSpec": copy.deepcopy(context.chaincodeSpec) } responses = [] for container in containerDataList: # Change the SecurityContext per call chaincodeInvocationSpec['chaincodeSpec'][ "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, "/devops/{0}".format(functionName)) print("{0} POSTing path = {1}".format(currentTime(), request_url)) resp = requests.post(request_url, headers={'Content-type': 'application/json'}, data=json.dumps(chaincodeInvocationSpec), 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 '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("")