userver: en/testsuite/environment/utils.py Source File
Loading...
Searching...
No Matches
utils.py
1import os
2import socket
3import time
4
5DOCKERTEST_WORKER = os.getenv('DOCKERTEST_WORKER', '')
6
7
8class BaseError(Exception):
9 pass
10
11
13 pass
14
15
17 pass
18
19
20def test_tcp_connection(host: str, port: int, timeout: float = 1.0) -> bool:
21 try:
22 with socket.create_connection((host, port), timeout=timeout):
23 return True
24 except OSError:
25 return False
26
27
28def wait_tcp_connection(host: str, port: int, timeout: float = 1.0) -> bool:
29 start_time = time.perf_counter()
30 while True:
31 time_passed = time.perf_counter() - start_time
32 if time_passed >= timeout:
33 return False
34
35 if test_tcp_connection(
36 host=host,
37 port=port,
38 timeout=timeout - time_passed,
39 ):
40 return True
41
42 time.sleep(0.1)
43
44
45def ensure_non_root_user() -> None:
46 if not os.getenv('TESTSUITE_ALLOW_ROOT') and os.getuid() == 0:
47 raise RootUserForbiddenError('Running testsuite as root is forbidden')
48
49
50def getenv_str(key: str, default: str) -> str:
51 env_value = os.getenv(key)
52 if env_value is None:
53 return default
54 return env_value
55
56
57def getenv_int(key: str, default: int) -> int:
58 env_value = os.getenv(key)
59 if env_value is None:
60 return default
61 try:
62 result = int(env_value)
63 except ValueError as err:
64 raise EnvironmentVariableError(
65 f'{key} environment variable is expected to have integer value. '
66 f'Actual value: {env_value}',
67 ) from err
68 else:
69 return result
70
71
72def getenv_float(key: str, default: float) -> float:
73 env_value = os.getenv(key)
74 if env_value is None:
75 return default
76 try:
77 result = float(env_value)
78 except ValueError as err:
79 raise EnvironmentVariableError(
80 f'{key} environment variable is expected to have float value. '
81 f'Actual value: {env_value}',
82 ) from err
83 else:
84 return result
85
86
87def getenv_ints(
88 key: str,
89 default: tuple[int, ...],
90) -> tuple[int, ...]:
91 env_value = os.getenv(key, None)
92 if env_value is None:
93 return default
94 try:
95 result = tuple(int(value) for value in env_value.split(','))
96 except ValueError as err:
97 raise EnvironmentVariableError(
98 f'{key} environment variable is expected to be a comma-separated '
99 f'list of integers. Actual value: {env_value}',
100 ) from err
101 else:
102 return result