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
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
def shutdown_test_env(self): cli_call(["docker-compose", "-f", self.compose_file_path, "down"])
def start_test_env(self): cli_call(["docker-compose", "-f", self.compose_file_path, "up", "-d"])
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)
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)