Example #1
0
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
Example #2
0
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
Example #3
0
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("")
Example #4
0
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("")
Example #5
0
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
Example #6
0
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("")