userver
C++ Async Framework
Toggle main menu visibility
Loading...
Searching...
No Matches
net.py
1
# pylint: disable=no-member
2
import
asyncio
3
import
dataclasses
4
import
logging
5
6
# @cond
7
8
9
logger = logging.getLogger(__name__)
10
11
12
# @endcond
13
14
15
@dataclasses.dataclass(frozen=True)
16
class
HostPort
:
17
"""
18
Class that holds a host and port.
19
20
@ingroup userver_testsuite
21
"""
22
23
host: str
24
port: int
25
26
27
@dataclasses.dataclass(frozen=False)
28
class
HealthChecks
:
29
"""
30
Class that holds all the info for health checks.
31
32
@ingroup userver_testsuite
33
"""
34
35
tcp: list[HostPort] = dataclasses.field(default_factory=list)
36
37
38
async def
_check_tcp_port_availability(tcp: HostPort) -> bool:
39
try
:
40
_, writer = await asyncio.open_connection(tcp.host, tcp.port)
41
writer.close()
42
await writer.wait_closed()
43
except
(OSError, asyncio.TimeoutError):
44
return
False
45
return
True
46
47
48
async def
check_availability
(checks: HealthChecks) -> bool:
49
"""
50
Checks availability for each provided entry.
51
52
@ingroup userver_testsuite
53
"""
54
assert
checks.tcp
55
done, pending = await asyncio.wait(
56
[asyncio.Task(_check_tcp_port_availability(val))
for
val
in
checks.tcp],
57
timeout=25.0,
58
return_when=asyncio.ALL_COMPLETED,
59
)
60
61
for
task
in
pending:
62
task.cancel()
63
64
for
task
in
pending:
65
await task
66
67
return
not
pending
and
all(task.result()
for
task
in
done)
68
69
70
def
get_health_checks_info
(service_config: dict) -> HealthChecks:
71
"""
72
Returns a health checks info that for server.listener, grpc-server.port
73
and server.listener-monitor.
74
75
@see pytest_userver.plugins.base.service_non_http_health_checks()
76
77
@ingroup userver_testsuite
78
"""
79
checks =
HealthChecks
()
80
81
components = service_config[
'components_manager'
][
'components'
]
82
server = components.get(
'server'
)
83
if
server:
84
for
listener_name
in
(
'listener-monitor'
,
'listener'
):
85
listener_config = server.get(listener_name, {})
86
port = int(listener_config.get(
'port'
, 0))
87
if
port:
88
host = listener_config.get(
'address'
,
'localhost'
)
89
if
host ==
'::'
:
90
host =
'localhost'
91
checks.tcp.append(
HostPort
(host, port))
92
93
port = int(components.get(
'grpc-server'
, {}).get(
'port'
, 0))
94
if
port:
95
checks.tcp.append(
HostPort
(
'localhost'
, port))
96
97
return
checks
testsuite
pytest_plugins
pytest_userver
utils
net.py
Generated on
for userver by
Doxygen
1.17.0