9logger = logging.getLogger(__name__)
15@dataclasses.dataclass(frozen=True)
18 Class that holds a host and port.
20 @ingroup userver_testsuite
27@dataclasses.dataclass(frozen=False)
30 Class that holds all the info for health checks.
32 @ingroup userver_testsuite
35 tcp: list[HostPort] = dataclasses.field(default_factory=list)
38async def _check_tcp_port_availability(tcp: HostPort) -> bool:
40 _, writer = await asyncio.open_connection(tcp.host, tcp.port)
42 await writer.wait_closed()
43 except (OSError, asyncio.TimeoutError):
50 Checks availability for each provided entry.
52 @ingroup userver_testsuite
55 done, pending = await asyncio.wait(
56 [asyncio.Task(_check_tcp_port_availability(val))
for val
in checks.tcp],
58 return_when=asyncio.ALL_COMPLETED,
67 return not pending
and all(task.result()
for task
in done)
72 Returns a health checks info that for server.listener, grpc-server.port
73 and server.listener-monitor.
75 @see pytest_userver.plugins.base.service_non_http_health_checks()
77 @ingroup userver_testsuite
81 components = service_config[
'components_manager'][
'components']
82 server = components.get(
'server')
84 for listener_name
in (
'listener-monitor',
'listener'):
85 listener_config = server.get(listener_name, {})
86 port = int(listener_config.get(
'port', 0))
88 host = listener_config.get(
'address',
'localhost')
91 checks.tcp.append(
HostPort(host, port))
93 port = int(components.get(
'grpc-server', {}).get(
'port', 0))
95 checks.tcp.append(
HostPort(
'localhost', port))