Beispiel #1
0
    def setUp(self):
        """
        启动测试执行的初始化
        """
        # 初始化日志类
        DebugTool.set_debug(False)
        try:
            # 删除临时日志
            FileTool.remove_files(path=os.path.join(
                _TEST_DATA_DIR, 'temp/http_service_log/log'),
                                  regex_str='test_case*')
        except:
            pass

        self.logger = simple_log.Logger(
            conf_file_name=os.path.join(
                _TEST_DATA_DIR, 'tcp_ip_service/test_http_service.json'),
            logger_name=simple_log.EnumLoggerName.ConsoleAndFile,
            config_type=simple_log.EnumLoggerConfigType.JSON_FILE,
            logfile_path=os.path.join(
                _TEST_DATA_DIR, 'temp/http_service_log/log/test_case.log'),
            is_create_logfile_by_day=True)
        self.logger.setLevelWithHandler(simple_log.DEBUG)

        # 启动服务
        self.server = HttpService(
            logger=self.logger,
            server_status_info_fun=self.server_status_info_fun,
            self_tag='UnitTest',
            log_level=simple_log.INFO,
            server_http_deal_fun=self.server_http_deal_fun)
        _server_opts = HttpService.generate_server_opts()
        _server_opts.ip = "127.0.0.1"
        _server_opts.port = 9513
        self.server.start_server(server_opts=_server_opts)
Beispiel #2
0
def test_case2():
    # 测试多个日志类相互影响的情况
    try:
        FileTool.remove_file(_TEMP_DIR + '/test_case2.json')
    except:
        pass
    try:
        FileTool.remove_file(_TEMP_DIR + '/test_case2-1.json')
    except:
        pass

    try:
        FileTool.remove_files(path=_TEMP_DIR + '/log/', regex_str='test_case2*')
    except:
        pass
    try:
        FileTool.remove_files(path=_TEMP_DIR + '/log/', regex_str='test_case2-1*')
    except:
        pass

    _logger = simple_log.Logger(conf_file_name=_TEMP_DIR + '/test_case2.json',
                                logger_name=simple_log.EnumLoggerName.ConsoleAndFile,
                                config_type=simple_log.EnumLoggerConfigType.JSON_FILE,
                                logfile_path=_TEMP_DIR + '/log/test_case2.log')
    # ConsoleAndFile 的配置level为DEBUG,但对应的ConsoleHandler的level为DEBUG,FileHandler的level为INFO
    # 日志是否显示会根据logger的level和handler的level,以级别比较高的匹配输出
    # 注意默认root的handler应该为空,否则无论如何都会执行root的输出,如果自己又另外指定了输出,那就会有2个相同输出日志
    _logger.log(simple_log.DEBUG,
                'test_case2:write_log:DEBUG:1:界面应显示本日志,文件不应显示本日志')
    _logger.debug('test_case2:write_log:DEBUG:1-1:界面应显示本日志,文件不应显示本日志')
    _logger.log(simple_log.INFO,
                'test_case2:write_log:INFO:2:界面应显示本日志,文件应显示本日志')
    _logger.info('test_case2:write_log:INFO:2-1:界面应显示本日志,文件应显示本日志')

    # 新增logger,但与原logger的loggername一样,实际上会互相影响,同时如果handler一样,也会受影响
    _logger1 = simple_log.Logger(conf_file_name=_TEMP_DIR + '/test_case2-1.json',
                                 logger_name=simple_log.EnumLoggerName.ConsoleAndFile,
                                 config_type=simple_log.EnumLoggerConfigType.JSON_FILE,
                                 logfile_path=_TEMP_DIR + '/log/test_case2-1.log')
    _logger1.setLevel(simple_log.DEBUG)

    _logger.log(simple_log.DEBUG,
                'test_case2:write_log:DEBUG:3:界面应显示本日志,文件不应显示本日志,但实际受logger1影响,也记录了日志;本应记录在日志1中,但受影响记录在日志2中')
    _logger.log(simple_log.INFO,
                'test_case2:write_log:INFO:4:界面应显示本日志,文件应显示本日志;本应记录在日志1中,但受影响记录在日志2中')
    _logger1.log(simple_log.DEBUG,
                 'test_case2:write_log:DEBUG:5-1:界面应显示本日志,文件应显示本日志')
    _logger1.log(simple_log.INFO,
                 'test_case2:write_log:INFO:6-1:界面应显示本日志,文件应显示本日志')

    del _logger

    _logger1.log(simple_log.DEBUG,
                 'test_case2:write_log:DEBUG:6-1:界面应显示本日志,文件应显示本日志')
    _logger1.log(simple_log.INFO,
                 'test_case2:write_log:INFO:7-1:界面应显示本日志,文件应显示本日志')

    del _logger1
    def setUp(self):
        """
        启动测试执行的初始化
        """
        # 初始化日志类
        try:
            # 删除临时日志
            FileTool.remove_files(path=_TEMP_DIR + '/log/',
                                  regex_str='test_case1*')
        except:
            pass

        # 初始化日志类
        _logger = simple_log.Logger(
            conf_file_name=_TEMP_DIR +
            '/../../call_chain_tool/test_call_chain.json',
            logger_name=simple_log.EnumLoggerName.ConsoleAndFile,
            config_type=simple_log.EnumLoggerConfigType.JSON_FILE,
            logfile_path=_TEMP_DIR + '/log/test_case1.log',
            is_create_logfile_by_day=True,
        )
        # 设置为全局使用
        RunTool.set_global_logger(_logger)
Beispiel #4
0
    def setUpClass(cls):
        """
        启动测试类执行的初始化,只执行一次
        """
        # 初始化日志类
        DebugTool.set_debug(False)
        try:
            # 删除临时日志
            FileTool.remove_files(path=_TEMP_DIR + '/log/',
                                  regex_str='test_case*')
        except:
            pass

        cls.logger = simple_log.Logger(
            conf_file_name=_TEMP_DIR +
            '/../../simple_grpc/test_simple_grpc.json',
            logger_name=simple_log.EnumLoggerName.ConsoleAndFile,
            config_type=simple_log.EnumLoggerConfigType.JSON_FILE,
            logfile_path=_TEMP_DIR + '/log/test_case_asyn.log',
            is_create_logfile_by_day=True,
        )
        cls.logger.setLevelWithHandler(simple_log.DEBUG)

        # 设置json转换对象的参数映射

        # 日志处理函数
        def _asyn_logging_fun(levelno, topic_name, msg):
            print('haha:%s, %s, %s' % (str(levelno), topic_name, msg))

        # 异步日志
        cls._asyn_logger = CallChainTool.create_call_chain_logger(
            logger=cls.logger,
            asyn_logging=True,
            asyn_logging_fun=_asyn_logging_fun,
            asyn_deal_msg_fun=SimpleGRpcTools.api_call_chain_asyn_deal_msg_fun)

        # 服务端处理类,可以多个服务公用
        cls.servicer_simple_call = SimpleGRpcServicer(logger=cls._asyn_logger)
        cls.servicer_simple_call.add_service(EnumCallMode.Simple,
                                             'service_simple_call_para',
                                             service_simple_call_para)
        cls.servicer_simple_call.add_service(
            EnumCallMode.Simple, 'service_simple_call_no_para_no_return',
            service_simple_call_no_para_no_return)
        cls.servicer_simple_call.add_service(EnumCallMode.Simple,
                                             'service_simple_call_return',
                                             service_simple_call_return)
        cls.servicer_simple_call.add_service(EnumCallMode.Simple,
                                             'service_simple_throw_excepiton',
                                             service_simple_throw_excepiton)
        cls.servicer_simple_call.add_service(EnumCallMode.Simple,
                                             'service_simple_overtime',
                                             service_simple_overtime)
        cls.servicer_simple_call.add_service(EnumCallMode.ClientSideStream,
                                             'service_client_side_stream',
                                             service_client_side_stream)
        cls.servicer_simple_call.add_service(EnumCallMode.ServerSideStream,
                                             'service_server_side_stream',
                                             service_server_side_stream)
        cls.servicer_simple_call.add_service(EnumCallMode.BidirectionalStream,
                                             'service_bidirectional_stream',
                                             service_bidirectional_stream)

        # 初始化并启动服务,简单服务,无SSL,无服务发现
        cls.server_no_ssl_no_zoo_opts = SimpleGRpcServer.generate_server_opts(
            ip='127.0.0.1',
            port=50051,
            max_workers=10,
            max_connect=100,
            is_health_check=True)
        cls.server_no_ssl_no_zoo = SimpleGRpcServer(
            server_name='ServerNoSslNoZoo',
            logger=cls.logger,
            log_level=simple_log.INFO)

        cls.server_no_ssl_no_zoo.start_server(
            server_opts=cls.server_no_ssl_no_zoo_opts,
            servicer_list={'servicer_simple_call': cls.servicer_simple_call},
            is_wait=True)

        # 初始化并启动服务,简单服务,无服务发现,TSL双向认证模式
        _private_key_certificate_chain_pair = SimpleGRpcTools.get_private_key_certificate_chain_pair(
            _TEMP_DIR + '/../../simple_grpc/server.pem',
            _TEMP_DIR + '/../../simple_grpc/server.crt')
        with open(_TEMP_DIR + '/../../simple_grpc/client.crt', 'rb') as f:
            # 根证书
            _root_certificates = f.read()

        cls.server_double_ssl_no_zoo_opts = SimpleGRpcServer.generate_server_opts(
            ip='localhost',
            port=50052,
            max_workers=10,
            max_connect=100,
            is_use_ssl=True,
            private_key_certificate_chain_pairs=(
                _private_key_certificate_chain_pair, ),
            root_certificates=_root_certificates)
        cls.server_double_ssl_no_zoo = SimpleGRpcServer(
            server_name='ServerDoubleSslNoZoo',
            logger=cls.logger,
            log_level=simple_log.INFO)
        cls.server_double_ssl_no_zoo.start_server(
            server_opts=cls.server_double_ssl_no_zoo_opts,
            servicer_list={'servicer_simple_call': cls.servicer_simple_call},
            is_wait=True)

        # 初始化并启动服务,简单服务,无服务发现,TSL单向认证模式(仅验证服务端证书)
        cls.server_server_ssl_no_zoo_opts = SimpleGRpcServer.generate_server_opts(
            ip='localhost',
            port=50053,
            max_workers=10,
            max_connect=100,
            is_use_ssl=True,
            private_key_certificate_chain_pairs=(
                _private_key_certificate_chain_pair, ),
            root_certificates=None)
        cls.server_server_ssl_no_zoo = SimpleGRpcServer(
            server_name='ServerServerSslNoZoo',
            logger=cls.logger,
            log_level=simple_log.INFO)
        cls.server_server_ssl_no_zoo.start_server(
            server_opts=cls.server_server_ssl_no_zoo_opts,
            servicer_list={'servicer_simple_call': cls.servicer_simple_call},
            is_wait=True)
    def setUpClass(cls):
        print("test class start =======>")
        print("初始化日志类")
        try:
            # 删除临时日志
            FileTool.remove_files(path=_log_path, regex_str='.*\\.log')
        except:
            pass

        _logger_conf = os.path.realpath(
            os.path.join(_temp_path, os.path.pardir, os.path.pardir,
                         'file_transfer/test_file_transfer.json'))
        cls.logger = simple_log.Logger(
            conf_file_name=_logger_conf,
            logger_name=simple_log.EnumLoggerName.File,
            config_type=simple_log.EnumLoggerConfigType.JSON_FILE,
            # logfile_path=_TEMP_DIR + '/log/test_case_client.log',
            is_create_logfile_by_day=True,
        )
        cls.logger.setLevelWithHandler(simple_log.DEBUG)

        print('初始化并启动服务,简单服务,无SSL,无服务发现')
        cls.server_no_ssl_no_zoo_opts = SimpleGRpcServer.generate_server_opts(
            ip='127.0.0.1',
            port=50051,
            max_workers=50,
            max_connect=400,
            is_health_check=True)
        cls.server_no_ssl_no_zoo = SimpleGRpcServer(
            server_name='ServerNoSslNoZoo',
            logger=cls.logger,
            log_level=simple_log.INFO)

        _push_services = GRpcPushServicerGenerater(work_dir=_temp_path,
                                                   lock_in_work_dir=True,
                                                   logger=cls.logger,
                                                   is_use_global_logger=False)
        _pull_services = GRpcPullServicerGenerater(work_dir=_temp_path,
                                                   lock_in_work_dir=True,
                                                   logger=cls.logger,
                                                   is_use_global_logger=False)

        cls.server_no_ssl_no_zoo.start_server(
            server_opts=cls.server_no_ssl_no_zoo_opts,
            servicer_list={
                'servicer_file_transfer_push': _push_services.get_servicer(),
                'servicer_file_transfer_pull': _pull_services.get_servicer()
            },
            is_wait=True)

        # 先创建本地随机文件
        print('创建本地随机文件')
        FileTool.create_dir(_temp_path, exist_ok=True)
        if not os.path.exists(_temp_file):
            with open(_temp_file, 'wb') as _file:
                _real_size = 561 * 1024  # 561kb
                _file.truncate(_real_size)  # 对于已存在的文件,有可能比较大,要进行截断处理
                _file.seek(_real_size - 1)  # 跳到指定位置
                _file.write(b'\x00')  # 一定要写入一个字符,否则无效
                _file.seek(random.randint(0, _real_size - 1 - 1024))
                _file.write(bytes('abcdefg', encoding='utf-8'))
                _file.flush()
Beispiel #6
0
def test_case1():
    # 测试单日志最基本功能,日志输出,变更日志级别,修改日志格式
    # 删除临时日志
    try:
        FileTool.remove_file(_TEMP_DIR + '/test_case1.json')
        print('del %s%s' % (_TEMP_DIR, '/test_case1.json'))
    except:
        pass

    try:
        FileTool.remove_files(path=_TEMP_DIR + '/log/', regex_str='test_case1*')
    except:
        pass

    _logger = simple_log.Logger(conf_file_name=_TEMP_DIR + '/test_case1.json',
                                logger_name=simple_log.EnumLoggerName.ConsoleAndFile,
                                config_type=simple_log.EnumLoggerConfigType.JSON_FILE,
                                logfile_path=_TEMP_DIR + '/log/test_case1.log')
    # ConsoleAndFile 的配置level为DEBUG,但对应的ConsoleHandler的level为DEBUG,FileHandler的level为INFO
    # 日志是否显示会根据logger的level和handler的level,以级别比较高的匹配输出
    # 注意默认root的handler应该为空,否则无论如何都会执行root的输出,如果自己又另外指定了输出,那就会有2个相同输出日志
    _logger.log(simple_log.DEBUG,
                'test_case1:write_log:DEBUG:1:界面应显示本日志,文件不应显示本日志')
    _logger.debug('test_case1:write_log:DEBUG:1-1:界面应显示本日志,文件不应显示本日志')
    _logger.log(simple_log.INFO,
                'test_case1:write_log:INFO:2:界面应显示本日志,文件应显示本日志')
    _logger.info('test_case1:write_log:INFO:2-1:界面应显示本日志,文件应显示本日志')

    # 修改ConsoleAndFile的level为INFO,handler仍不变
    _logger.setLevel(simple_log.INFO)
    _logger.log(simple_log.DEBUG,
                'test_case1:write_log:DEBUG:3:界面不应显示本日志,文件不应显示本日志')
    _logger.log(simple_log.INFO,
                'test_case1:write_log:INFO:4:界面应显示本日志,文件应显示本日志')

    # 修改ConsoleAndFile的level为DEBUG, FileHandler的level为WARNING
    _logger.setLevel(simple_log.DEBUG)
    for _handler in _logger.base_logger.handlers:
        if _handler.name == 'FileHandler':
            _logger.set_handler_log_level(_handler, simple_log.WARNING)
    _logger.log(simple_log.DEBUG,
                'test_case1:write_log:DEBUG:5:界面应显示本日志,文件不应显示本日志')
    _logger.log(simple_log.WARNING,
                'test_case1:write_log:WARNING:6:界面应显示本日志,文件应显示本日志')

    #  修改整个日志级别为INFO
    _logger.setLevel(simple_log.INFO)
    _logger.log(simple_log.DEBUG,
                'test_case1:write_log:DEBUG:7:界面不应显示本日志,文件不应显示本日志')
    _logger.log(simple_log.INFO,
                'test_case1:write_log:INFO:8:界面应显示本日志,文件应显示本日志')

    # 修改日志类型为Console,日志级别应根据配置文件恢复原状态(DEBUG)
    _logger.change_logger_name(logger_name=simple_log.EnumLoggerName.Console)
    _logger.log(simple_log.DEBUG,
                'test_case1:write_log:DEBUG:9:界面应显示本日志,文件不应显示本日志')

    # 修改日志输出格式
    _logger.set_logger_formater(format_str='[%(asctime)s]%(message)s')
    _logger.log(simple_log.DEBUG,
                'test_case1:write_log:DEBUG:9:格式发生变化,界面应显示本日志,文件不应显示本日志')

    del _logger
    def setUpClass(cls):
        """
        启动测试类执行的初始化,只执行一次
        """
        # 初始化日志类
        DebugTool.set_debug(False)
        try:
            # 删除临时日志
            FileTool.remove_files(path=_TEMP_DIR + '/log/',
                                  regex_str='test_case_client*')
        except:
            pass

        cls.logger = simple_log.Logger(
            conf_file_name=_TEMP_DIR +
            '/../../simple_grpc/test_simple_grpc.json',
            logger_name=simple_log.EnumLoggerName.ConsoleAndFile,
            config_type=simple_log.EnumLoggerConfigType.JSON_FILE,
            logfile_path=_TEMP_DIR + '/log/test_case_client.log',
            is_create_logfile_by_day=True,
        )
        cls.logger.setLevelWithHandler(simple_log.DEBUG)

        # 设置json转换对象的参数映射

        # 日志处理函数
        def _asyn_logging_fun(levelno, topic_name, msg):
            print('haha client:%s, %s, %s' % (str(levelno), topic_name, msg))

        # 异步日志
        cls._asyn_logger = CallChainTool.create_call_chain_logger(
            logger=cls.logger,
            asyn_logging=False,
            asyn_logging_fun=_asyn_logging_fun,
            asyn_deal_msg_fun=SimpleGRpcTools.api_call_chain_asyn_deal_msg_fun)
        RunTool.set_global_logger(cls._asyn_logger)

        # 服务端处理类,可以多个服务公用
        cls.servicer_simple_call = SimpleGRpcServicer(
            logger=None, is_use_global_logger=False)
        cls.servicer_simple_call.add_service(EnumCallMode.Simple,
                                             'service_simple_call_para',
                                             service_simple_call_para)
        cls.servicer_simple_call.add_service(
            EnumCallMode.Simple, 'service_simple_call_no_para_no_return',
            service_simple_call_no_para_no_return)
        cls.servicer_simple_call.add_service(EnumCallMode.Simple,
                                             'service_simple_call_return',
                                             service_simple_call_return)
        cls.servicer_simple_call.add_service(EnumCallMode.Simple,
                                             'service_simple_throw_excepiton',
                                             service_simple_throw_excepiton)
        cls.servicer_simple_call.add_service(EnumCallMode.Simple,
                                             'service_simple_overtime',
                                             service_simple_overtime)

        # 初始化并启动服务,简单服务,无SSL,无服务发现
        cls.server_no_ssl_no_zoo_opts = SimpleGRpcServer.generate_server_opts(
            ip='127.0.0.1',
            port=50051,
            max_workers=10,
            max_connect=100,
            is_health_check=True)
        cls.server_no_ssl_no_zoo = SimpleGRpcServer(
            server_name='ServerNoSslNoZoo',
            logger=cls._asyn_logger,
            log_level=simple_log.INFO)

        cls.server_no_ssl_no_zoo.start_server(
            server_opts=cls.server_no_ssl_no_zoo_opts,
            servicer_list={'servicer_simple_call': cls.servicer_simple_call},
            is_wait=True)