Beispiel #1
0
    async def build_get_claim_req(args, data):
        """
        Build GET claim request.

        :param args: arguments to build GET claim request.
        :param data: ADD claim request info.
        :return: GET claim request.
        """
        if not data:
            return ''
        submitter_did = args['submitter_did']
        try:
            if isinstance(data, str):
                data = json.loads(data)
            if isinstance(data, str):
                data = json.loads(data)
            if data['kind'] != 'claim':
                return ''

            utils.print_header_for_step('Build get schema request')
            issuer_did = data['data']['issuer_did']
            seq_no = data['data']['seq_no']
            signature_type = data['data']['signature_type']
            get_claim_req = await ledger.build_get_claim_def_txn(
                submitter_did, seq_no, signature_type, issuer_did)

            return get_claim_req
        except Exception as e:
            utils.force_print_error_to_console(
                "Cannot build get claim request. Skip building...")
            utils.force_print_error_to_console(str(e))
            return ''
Beispiel #2
0
    async def build_get_attribute_req(args, data):
        """
        Build GET attribute request.

        :param args: arguments to build GET attribute request.
        :param data: ADD attribute request info.
        :return: GET attribute request.
        """

        if not data:
            return ''
        submitter_did = args['submitter_did']
        try:
            if isinstance(data, str):
                data = json.loads(data)
            if isinstance(data, str):
                data = json.loads(data)
            if data['kind'] != 'attribute':
                return ''

            utils.print_header_for_step('Build get attribute request')
            target_did = data['data']['target_did']
            raw_name = data['data']['raw_name']
            get_attr_req = await ledger.build_get_attrib_request(submitter_did,
                                                                 target_did,
                                                                 raw_name)
            return get_attr_req
        except Exception as e:
            utils.force_print_error_to_console(
                "Cannot build get attribute request. Skip building...")
            utils.force_print_error_to_console(str(e))
            return ''
Beispiel #3
0
    async def build_get_schema_req(args, data):
        """
        Build GET schema request.

        :param args: arguments to build GET schema request.
        :param data: ADD schema request info.
        :return: GET schema request.
        """
        if not data:
            return ''
        submitter_did = args['submitter_did']
        try:
            if isinstance(data, str):
                data = json.loads(data)
            if isinstance(data, str):
                data = json.loads(data)
            if data['kind'] != 'schema':
                return ''

            utils.print_header_for_step('Build get schema request')
            dest = data['data']['dest']
            schema_data = {'name': data['data']['name'],
                           'version': data['data']['version']}
            get_schema_req = await ledger.build_get_schema_request(
                submitter_did, dest, json.dumps(schema_data))

            return get_schema_req
        except Exception as e:
            utils.force_print_error_to_console(
                "Cannot build get schema request. Skip building...")
            utils.force_print_error_to_console(str(e))
            return ''
Beispiel #4
0
    async def build_nym_req(args: dict):
        """
        Build ADD nym request.

        :param args: arguments for building ADD nym request.
        :return: nym request, request info.
        """
        wallet_handle = args['wallet_handle']
        submitter_did = args['submitter_did']
        try:
            utils.print_header_for_step('Create did')
            did, _, = await signus.create_and_store_my_did(wallet_handle, '{}')

            # Send NYM to ledger
            utils.print_header("\n======== Build NYM request ========")
            nym_req = await ledger.build_nym_request(submitter_did, did, None,
                                                     None, None)
            req_info = json.dumps({'kind': 'nym', 'data': {'target_did': did}})
            req = json.dumps({'request': nym_req})

            return req, req_info

        except Exception as e:
            utils.force_print_error_to_console(
                "Cannot build nym request. Skip building...")
            utils.force_print_error_to_console(str(e))
            return ""
Beispiel #5
0
    async def build_schema_req(args: dict):
        """
        Build ADD schema request.

        :param args: arguments for building ADD schema request.
        :return: schema request, request info.
        """
        submitter_did = args['submitter_did']
        try:
            data = {
                'name': utils.generate_random_string(prefix='test'),
                'version': '1.0',
                'attr_names': ['test']
            }

            utils.print_header("\n======= Build schema request =======")
            schema_req = await ledger.build_schema_request(submitter_did,
                                                           json.dumps(data))

            del data['attr_names']
            data['dest'] = submitter_did
            req_info = json.dumps({'kind': 'schema', 'data': data})
            req = json.dumps({'request': schema_req})

            return req, req_info

        except Exception as e:
            utils.force_print_error_to_console(
                "Cannot build schema request. Skip building...")
            utils.force_print_error_to_console(str(e))
            return ""
Beispiel #6
0
    async def _test(self):
        """
        Override from "Tester" class to implement testing steps.
        """
        # 1. Create pool config.
        # 2. Open pool ledger
        # 3. Create My Wallet and Get Wallet Handle
        # 4 Create and sender DID

        args = {'wallet_handle': self.wallet_handle,
                'pool_handle': self.pool_handle,
                'submitter_did': self.submitter_did}

        # 5. Build requests and save them in to files.
        builder = requests_builder.RequestBuilder(self.info_file_path,
                                                  self.log)

        req_files = await builder.build_several_adding_req_to_files(
            args, self.req_kind, self.thread_num, self.req_num)

        # 6. Sign and submit several request into ledger.
        sender = requests_sender.RequestsSender(self.log)
        try:
            await sender.sign_and_submit_several_reqs_from_files(
                args, req_files, self.req_kind)
        except Exception as e:
            utils.force_print_error_to_console(str(e) + "\n")
        self.passed_req, self.failed_req = sender.passed_req, sender.failed_req

        self.start_time, self.finish_time = (sender.start_time,
                                             sender.finish_time)
        self.fastest_txn = sender.fastest_txn
        self.lowest_txn = sender.lowest_txn
    def submit_reqs_in_thread(self, args, file, kind):
        """
        Thread function that submit request from one request file.

        :param args: arguments to submit requests.
        :param file: request file (store all request you want to submit).
        :param kind: kind of request.
        """
        start_time = finish_time = 0
        with open(file, "r") as req_file:
            loop = asyncio.new_event_loop()
            asyncio.set_event_loop(loop)
            for line in req_file:
                response_time = utils.run_async_method(loop, self.submit_req,
                                                       args, kind, line)
                if start_time == 0:
                    start_time = response_time
                if response_time > finish_time:
                    finish_time = response_time
            loop.close()
        try:
            os.remove(file)
        except IOError as e:
            utils.force_print_error_to_console(str(e) + "\n")

        self.update_start_and_finish_time(start_time, finish_time)
Beispiel #8
0
    async def build_claim_req(args: dict):
        """
        Build ADD claim request.

        :param args: arguments to build ADD claim request.
        :return: claim request, request info.
        """
        import string
        import random
        pool_handle = args['pool_handle']
        wallet_handle = args['wallet_handle']
        submitter_did = args['submitter_did']
        try:
            utils.print_header("\n======= Create did =======")
            did, verkey = await signus.create_and_store_my_did(wallet_handle,
                                                               '{}')

            utils.print_header("\n======= Build nym request =======")
            nym_req = await ledger.build_nym_request(submitter_did, did,
                                                     verkey,
                                                     None, None)

            utils.print_header("\n======= Send nym request =======")
            await ledger.sign_and_submit_request(pool_handle, wallet_handle,
                                                 submitter_did, nym_req)

            seq_no = random.randint(1, 1000000)
            signature_type = 'CL'
            data = {"primary": {
                "n": utils.generate_random_string(characters=string.digits),
                "s": utils.generate_random_string(characters=string.digits),
                "rms": utils.generate_random_string(characters=string.digits),
                "r": {"name": utils.generate_random_string(
                    characters=string.digits)},
                "rctxt": utils.generate_random_string(
                    characters=string.digits),
                "z": utils.generate_random_string(characters=string.digits)}}

            utils.print_header("\n======= Build claim request =======")
            claim_req = await ledger.build_claim_def_txn(did, seq_no,
                                                         signature_type,
                                                         json.dumps(data))

            req_info = json.dumps({'kind': 'claim',
                                   'data': {'issuer_did': did,
                                            'seq_no': seq_no,
                                            'signature_type': signature_type}})
            req = json.dumps({'request': claim_req, 'submitter_did': did})

            return req, req_info

        except Exception as e:
            utils.force_print_error_to_console(
                "Cannot build claim request. Skip building...")
            utils.force_print_error_to_console(str(e))
            return ""
Beispiel #9
0
    def __collect_requests_info_files(self):
        """
        Collect all request info file from directory.

        :return: list of file name.
        """
        lst_files = glob.glob(
            os.path.join(self.info_dir,
                         '{}_requests_info*{}'.format(self.req_kind, '.txt')))
        if not lst_files:
            utils.force_print_error_to_console(
                'Cannot found any request info. '
                'Skip sending get request... Abort')
            sys.exit(1)

        return lst_files
Beispiel #10
0
    def __collect_requests_info_files(self):
        """
        Collect all request info file from directory.

        :return: list of file name.
        """
        lst_files = glob.glob(os.path.join(
            self.info_dir, '{}_requests_info*{}'.format(self.req_kind,
                                                        '.txt')))
        if not lst_files:
            utils.force_print_error_to_console(
                'Cannot found any request info. '
                'Skip sending get request... Abort')
            sys.exit(1)

        return lst_files
Beispiel #11
0
    async def build_attribute_req(args: dict):
        """
        Build ADD attribute request.

        :param args: arguments to build ADD attribute request.
        :return: attribute request, request info.
        """
        pool_handle = args['pool_handle']
        wallet_handle = args['wallet_handle']
        submitter_did = args['submitter_did']
        try:
            utils.print_header("\n======= Create did =======")
            did, verkey = await signus.create_and_store_my_did(wallet_handle,
                                                               '{}')

            utils.print_header("\n======= Build nym request =======")
            nym_req = await ledger.build_nym_request(submitter_did, did,
                                                     verkey,
                                                     None, None)

            utils.print_header("\n======= Send nym request =======")
            await ledger.sign_and_submit_request(pool_handle, wallet_handle,
                                                 submitter_did, nym_req)

            data = {'endpoint': {'ha': '127.0.0.1:5555'}}

            utils.print_header("\n======= Build attribute request =======")
            attr_req = await ledger.build_attrib_request(did, did, None,
                                                         json.dumps(data),
                                                         None)

            req_info = json.dumps({'kind': 'attribute',
                                   'data': {'target_did': did,
                                            'raw_name': 'endpoint'}})
            req = json.dumps({'request': attr_req, 'submitter_did': did})

            return req, req_info

        except Exception as e:
            utils.force_print_error_to_console(
                "Cannot build attribute request. Skip building...")
            utils.force_print_error_to_console(str(e))
            return ""
Beispiel #12
0
    def __init__(self):
        self.options = Options().args

        self.tester = None

        temp = 0
        for mode in PerformanceTestRunner.modes:
            if mode in sys.argv:
                temp += 1

        if temp == 0:
            utils.print_error(
                'Cannot determine any kind of request for testing')
            utils.print_error(
                'May be you missing arguments "-a" or "-b" or "-t" or "-l"')
            sys.exit(1)

        if temp > 1:
            utils.force_print_error_to_console(
                '"-a" and "-g" and "-t" and "-l" '
                'cannot exist at the same time\n')
            sys.exit(1)

        self.list_tester = list()

        self.start_time = self.finish_time = 0
        self.lowest = self.fastest = 0
        self.passed_req = self.failed_req = 0
        self.result_path = os.path.join(os.path.dirname(__file__), 'results')
        utils.create_folder(self.result_path)
        log_path = os.path.join(os.path.dirname(__file__), 'logs')
        utils.create_folder(log_path)

        now = time.strftime("%d-%m-%Y_%H-%M-%S")
        self.result_path = os.path.join(self.result_path,
                                        'result_{}.txt'.format(now))

        log_path = os.path.join(
            log_path, self.create_log_file_name())
        requests_sender.RequestsSender.init_log_file(log_path)
        utils.create_folder(self.options.info_dir)
Beispiel #13
0
    async def sign_and_submit_req(self, args, kind, data):
        """
        Sign and submit one request to ledger.

        :param args: arguments to sign and submit requests.
        :param kind: kind of request.
        :param data: request info.
        """
        wallet_handle = args['wallet_handle']
        pool_handle = args['pool_handle']
        submitter_did = args['submitter_did']

        req_data = json.loads(data)
        if 'submitter_did' in req_data:
            submitter_did = req_data['submitter_did']

        req = req_data['request']

        elapsed_time = 0
        response_time = None

        try:
            utils.print_header_for_step('Sending {} request'.format(kind))
            start_time = time.time()
            response = await ledger.sign_and_submit_request(
                pool_handle, wallet_handle, submitter_did, req)
            response_time = time.time()
            elapsed_time = response_time - start_time
            self.update_fastest_and_lowest_txn(elapsed_time)
            self.passed_req += 1
            self.print_success_msg(kind, response)
            status = True
        except Exception as e:
            self.print_error_msg(kind, req)
            utils.force_print_error_to_console(str(e) + "\n")
            self.failed_req += 1
            status = False

        RequestsSender.print_log(status, elapsed_time, req)

        return response_time
Beispiel #14
0
    def __init__(self):
        self.options = Options().args

        self.tester = None

        temp = 0
        for mode in PerformanceTestRunner.modes:
            if mode in sys.argv:
                temp += 1

        if temp == 0:
            utils.print_error(
                'Cannot determine any kind of request for testing')
            utils.print_error(
                'May be you missing arguments "-a" or "-b" or "-t" or "-l"')
            sys.exit(1)

        if temp > 1:
            utils.force_print_error_to_console(
                '"-a" and "-g" and "-t" and "-l" '
                'cannot exist at the same time\n')
            sys.exit(1)

        self.list_tester = list()

        self.start_time = self.finish_time = 0
        self.lowest = self.fastest = 0
        self.passed_req = self.failed_req = 0
        self.result_path = os.path.join(os.path.dirname(__file__), 'results')
        utils.create_folder(self.result_path)
        log_path = os.path.join(os.path.dirname(__file__), 'logs')
        utils.create_folder(log_path)

        now = time.strftime("%d-%m-%Y_%H-%M-%S")
        self.result_path = os.path.join(self.result_path,
                                        'result_{}.txt'.format(now))

        log_path = os.path.join(log_path, self.create_log_file_name())
        requests_sender.RequestsSender.init_log_file(log_path)
        utils.create_folder(self.options.info_dir)
Beispiel #15
0
    async def submit_req(self, args, kind, data):
        """
        Submit one request to ledger.

        :param args: arguments to submit requests.
        :param kind: kind of request.
        :param data: request info.
        :return:
        """
        pool_handle = args['pool_handle']

        req = data

        elapsed_time = 0

        response_time = None

        try:
            utils.print_header_for_step('Sending get {} request'.format(kind))
            start_time = time.time()
            response = await ledger.submit_request(pool_handle, req)
            response_time = time.time()
            elapsed_time = response_time - start_time

            self.passed_req += 1
            self.update_fastest_and_lowest_txn(elapsed_time)
            self.print_success_msg(kind, response)
            status = True
        except Exception as e:
            self.print_error_msg(kind, req)
            utils.force_print_error_to_console(str(e) + "\n")
            self.failed_req += 1
            status = False

        RequestsSender.print_log(status, elapsed_time, req)

        return response_time
Beispiel #16
0
 def print_error_msg(kind, request):
     """
     Print error message to console.
     """
     utils.force_print_error_to_console(
         '\nCannot submit {} request:\n{}'.format(kind, request))