Exemplo n.º 1
0
 def setUp(self):
     cleanup_script = "/home/lucas/work/pg/trustas/src/cleanup.sh"
     trustas_start(
     )  # generate all configuration files required and set global parameters
     self.orgs = ORGS_LIST  # update list of organizations
     cli_call([cleanup_script
               ])  # clean docker assets before initializing the network
     super(E2eTest, self).setUp()  # initialize network
Exemplo n.º 2
0
def measure_blockchain_size(peer="peer0.org1.example.com"):
    """Measures blockchain size through a command line call to a container.

    Args:
        peer:   The container name (also full peer name) to consult.
    Returns:
        Integer representing the current ledger size in KB (1024B) on disk.
    """

    output, error, _ = cli_call([
        "docker", "exec", "-it", peer, "du",
        "/var/hyperledger/production/ledgersData/chains/chains/businesschannel"
    ])
    if error:
        return None
    try:
        size = output.decode("utf-8").split()[0]
        size = int(size)
        return size
    except:
        return None
Exemplo n.º 3
0
 def shutdown_test_env(self):
     cli_call(["docker-compose", "-f", self.compose_file_path, "down"])
Exemplo n.º 4
0
 def start_test_env(self):
     cli_call(["docker-compose", "-f", self.compose_file_path, "up", "-d"])
Exemplo n.º 5
0
def create_config_files():
    """Generate Docker Compose YAML and JSON configuration files."""

    global ORGS_LIST
    ORGS_LIST = [
        "org" + str(orgNum) + ".example.com"
        for orgNum in range(1, NUM_ORGS + 1)
    ]
    PORT_INCREMENT = True  # True for localhost deployments
    orderer_name = "orderer.example.com"
    orderer_host = "localhost"
    org_host = "localhost"
    orderer_port = 7050
    base_port = 7051

    WORKING_DIR = "test/fixtures/"
    with open(os.path.join(WORKING_DIR, "trustas-base.json"), "r") as fp:
        net_stats = json.load(fp)
    docker_net = """
# ::: WARNING ::: This file is automatically generated by TrustAS. Any modifications will be overwritten.\n\n
version: '2'  # v3 does not support 'extends' yet
services:\n
    """

    # GENERATE ORDERER JSON

    orderer_dir = os.path.join(
        WORKING_DIR, "trustas/crypto-config/ordererOrganizations/example.com")
    orderer_msp_dir = os.path.join(orderer_dir, "users/[email protected]/msp")
    sk_ord, _, _ = cli_call(["ls", os.path.join(orderer_msp_dir, "keystore")])
    sk_ord = sk_ord.decode().split()[0]
    # orderer organization
    orderer_org = {
        "mspid": "OrdererMSP",
        "orderers": [orderer_name],
        "certificateAuthorities": ["ca-orderer"],
        "users": {
            "Admin": {
                "cert":
                os.path.join(orderer_msp_dir,
                             "signcerts/[email protected]"),
                "private_key":
                os.path.join(orderer_msp_dir, "keystore", sk_ord)
            }
        }
    }
    # orderer description
    orderer_desc = {
        "url": orderer_host + ":" + str(orderer_port),
        "grpcOptions": {
            "ssl-target-name-override": orderer_name,
            "grpc-max-send-message-length": 15
        },
        "tlsCACerts": {
            "path": os.path.join(orderer_dir,
                                 "tlsca/tlsca.example.com-cert.pem")
        }
    }
    # add orderers to base config
    net_stats["organizations"][orderer_name] = orderer_org
    net_stats["orderers"][orderer_name] = orderer_desc

    # GENERATE ORDERER IN DOCKER COMPOSE

    docker_net = docker_net + """orderer.example.com:\n
        extends:
            file: orderer-base.yaml
            service: orderer-base
        container_name: orderer.example.com
        hostname: orderer.example.com
        ports:
            - \"""" + str(orderer_port) + """:""" + str(orderer_port) + """"
        volumes:
            - ./trustas/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block
            - ./trustas/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
            - ./trustas/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
        command: orderer start
    """

    for org in range(1, NUM_ORGS + 1):

        # org properties
        org_name = ORGS_LIST[org - 1]
        org_msp_id = "Org" + str(org) + "MSP"
        peer_name = "peer0." + org_name
        ca_name = "ca-org" + str(org)

        # directories
        users_dir = os.path.join(WORKING_DIR,
                                 "trustas/crypto-config/peerOrganizations",
                                 org_name, "users")
        peers_dir = os.path.join(WORKING_DIR,
                                 "trustas/crypto-config/peerOrganizations",
                                 org_name, "peers")
        msp_adm_dir = os.path.join(users_dir, "Admin@" + org_name, "msp")
        msp_usr_dir = os.path.join(users_dir, "User1@" + org_name, "msp")

        # get private key file names
        sk_adm, _, _ = cli_call(["ls", os.path.join(msp_adm_dir, "keystore")])
        sk_usr, _, _ = cli_call(["ls", os.path.join(msp_usr_dir, "keystore")])
        sk_adm = sk_adm.decode().split()[0]
        sk_usr = sk_usr.decode().split()[0]

        # GENERATE ORG
        org_desc = {
            "mspid": org_msp_id,
            "peers": [peer_name],
            "certificateAuthorities": [ca_name],
            "users": {
                "Admin": {
                    "cert":
                    os.path.join(msp_adm_dir,
                                 "signcerts/Admin@" + org_name + "-cert.pem"),
                    "private_key":
                    os.path.join(msp_adm_dir, "keystore", sk_adm)
                },
                "User1": {
                    "cert":
                    os.path.join(msp_usr_dir,
                                 "signcerts/User1@" + org_name + "-cert.pem"),
                    "private_key":
                    os.path.join(msp_usr_dir, "keystore", sk_usr)
                }
            }
        }

        # GENERATE PEER
        peer_desc = {
            "url": org_host + ":" + str(base_port),  # :7051
            "eventUrl": org_host + ":" + str(base_port + 2),  # :7053
            "grpcOptions": {
                "ssl-target-name-override": peer_name,
                "grpc.http2.keepalive_time": 15
            },
            "tlsCACerts": {
                "path":
                os.path.join(peers_dir, peer_name, "msp/tlscacerts",
                             "tlsca." + org_name + "-cert.pem")
            }
        }

        # GENERATE CA
        ca_desc = {
            "url": "https://" + org_host + ":" + str(base_port + 3),  # :7054
            "grpcOptions": {
                "verify": True
            },
            "tlsCACerts": {
                "path":
                "test/fixtures/trustas/crypto-config/peerOrganizations/" +
                org_name + "/ca/ca." + org_name + "-cert.pem"
            },
            "registrar": [{
                "enrollId": "admin",
                "enrollSecret": "adminpw"
            }]
        }

        # add orgs to base config
        net_stats["organizations"][org_name] = org_desc
        net_stats["peers"][peer_name] = peer_desc
        net_stats["certificateAuthorities"][ca_name] = ca_desc

        # GENERATE DOCKER COMPOSE ENTRY

        docker_net = docker_net + """\n\n    """ + peer_name + """:\n
        extends:
            file: peer-base.yaml
            service: peer-base
        container_name: """ + peer_name + """
        hostname: """ + peer_name + """
        environment:
            - CORE_PEER_ID=""" + peer_name + """
            - CORE_PEER_ADDRESS=""" + peer_name + """:7051
            - CORE_PEER_GOSSIP_EXTERNALENDPOINT=""" + peer_name + """:7051
            - CORE_PEER_CHAINCODELISTENADDRESS=""" + peer_name + """:7052
            - CORE_PEER_GOSSIP_BOOTSTRAP=""" + peer_name + """:7051
            - CORE_PEER_LOCALMSPID=""" + org_msp_id + """
        volumes:
            - ./trustas/crypto-config/peerOrganizations/""" + org_name + """/peers/""" + peer_name + """/msp:/etc/hyperledger/fabric/msp
            - ./trustas/crypto-config/peerOrganizations/""" + org_name + """/peers/""" + peer_name + """/tls:/etc/hyperledger/fabric/tls
        ports:
            - """ + str(base_port) + """:7051
            - """ + str(base_port + 1) + """:7052
            - """ + str(base_port + 2) + """:7053
        command: peer node start
        """

        # increment base_port to avoid conflicts in local deploys
        if PORT_INCREMENT:
            base_port = base_port + 100

    # SAVE TO FILES
    # json
    with open(os.path.join(WORKING_DIR, "trustas-net.json"), "w") as fp:
        json.dump(net_stats, fp)

    # docker compose
    with open(os.path.join(WORKING_DIR, "dc-trustas.yaml"), "w") as fp:
        fp.write(docker_net)
Exemplo n.º 6
0
 def start_test_env(self):
     cli_call(["docker-compose", "-f", self._compose_file_path, "up", "-d"])
     cli_call([
         "docker-compose", "-f", self._couch_compose_file_path, "up", "-d"
     ])
     time.sleep(5)