Skip to content

Commit 0aaea16

Browse files
fix: default_username does not respect os_ops (#389)
* fix: default_username does not respect os_ops default_username: - new signature is: def default_username(os_ops: typing.Optional[OsOperations] = None) -> str: new: default_username2 is added: - signature is: def default_username2(os_ops: OsOperations) -> str: NodeConnection::__init__: - uses default_username2(node.os_ops) Publication::__init__: - uses default_username2(node.os_ops) Subscription::__init__: - uses default_username2(node.os_ops) Amen. * tests for default_username and default_username2 are added
1 parent 63df626 commit 0aaea16

4 files changed

Lines changed: 84 additions & 7 deletions

File tree

src/connection.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
from .defaults import \
1616
default_dbname, \
17-
default_username
17+
default_username2
1818

1919
from .exceptions import QueryException
2020

@@ -38,7 +38,7 @@ def __init__(self,
3838

3939
# Set default arguments
4040
dbname = dbname or default_dbname()
41-
username = username or default_username()
41+
username = username or default_username2(node.os_ops)
4242

4343
self._node = node
4444

src/defaults.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import datetime
22
import struct
33
import uuid
4+
import typing
5+
6+
from testgres.operations.os_ops import OsOperations
47

58
from .config import testgres_config as tconf
69

@@ -13,11 +16,30 @@ def default_dbname():
1316
return 'postgres'
1417

1518

16-
def default_username():
19+
def default_username(os_ops: typing.Optional[OsOperations] = None) -> str:
1720
"""
1821
Return default username (current user).
1922
"""
20-
return tconf.os_ops.get_user()
23+
assert os_ops is None or isinstance(os_ops, OsOperations)
24+
25+
if os_ops is None:
26+
os_ops = tconf.os_ops
27+
28+
assert isinstance(os_ops, OsOperations)
29+
result = default_username2(os_ops)
30+
assert type(result) is str
31+
return result
32+
33+
34+
def default_username2(os_ops: OsOperations) -> str:
35+
"""
36+
Return default username (current user).
37+
"""
38+
assert isinstance(os_ops, OsOperations)
39+
40+
result = os_ops.get_user()
41+
assert type(result) is str
42+
return result
2143

2244

2345
def generate_app_name():

src/pubsub.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
from six import raise_from
4646

4747
from .consts import LOGICAL_REPL_MAX_CATCHUP_ATTEMPTS
48-
from .defaults import default_dbname, default_username
48+
from .defaults import default_dbname, default_username2
4949
from .exceptions import CatchUpException
5050
from .utils import options_string
5151

@@ -72,7 +72,7 @@ def __init__(self, name, node, tables=None, dbname=None, username=None):
7272
self.name = name
7373
self.node = node
7474
self.dbname = dbname or default_dbname()
75-
self.username = username or default_username()
75+
self.username = username or default_username2(node.os_ops)
7676

7777
# create publication in database
7878
t = "table " + ", ".join(tables) if tables else "all tables"
@@ -167,7 +167,7 @@ def __init__(self,
167167
self.node = node
168168
self.pub = publication
169169
self.dbname = dbname or default_dbname()
170-
self.username = username or default_username()
170+
self.username = username or default_username2(node.os_ops)
171171

172172
# connection info
173173
conninfo = {

tests/test_testgres_common.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from __future__ import annotations
22

3+
from .helpers.global_data import OsOpsDescrs
4+
from .helpers.global_data import OsOpsDescr
35
from .helpers.global_data import PostgresNodeService
46
from .helpers.global_data import PostgresNodeServices
57
from .helpers.global_data import OsOperations
@@ -16,6 +18,9 @@
1618
from src.utils import file_tail
1719
from src.utils import get_bin_path2
1820
from src.utils import execute_utility2
21+
from src.defaults import default_username
22+
from src.defaults import default_username2
23+
from src.config import testgres_config as tconf
1924
from src import ProcessType
2025
from src import NodeStatus
2126
from src import IsolationLevel
@@ -71,6 +76,25 @@ def removing(os_ops: OsOperations, f):
7176

7277

7378
class TestTestgresCommon:
79+
sm_os_ops_descrs: typing.List[OsOpsDescr] = [
80+
OsOpsDescrs.sm_local_os_ops_descr,
81+
OsOpsDescrs.sm_remote_os_ops_descr
82+
]
83+
84+
@pytest.fixture(
85+
params=[
86+
pytest.param(
87+
descr,
88+
id=descr.sign,
89+
)
90+
for descr in sm_os_ops_descrs
91+
],
92+
)
93+
def os_ops_descr(self, request: pytest.FixtureRequest) -> OsOpsDescr:
94+
assert isinstance(request, pytest.FixtureRequest)
95+
assert isinstance(request.param, OsOpsDescr)
96+
return request.param
97+
7498
sm_node_svcs: typing.List[PostgresNodeService] = [
7599
PostgresNodeServices.sm_local,
76100
PostgresNodeServices.sm_local2,
@@ -133,6 +157,37 @@ def test_version_management(self, node_svc: PostgresNodeService):
133157
assert (isinstance(node.version, PgVer))
134158
assert (node.version == PgVer(version))
135159

160+
def test_default_username(
161+
self,
162+
os_ops_descr: OsOpsDescr,
163+
):
164+
assert type(os_ops_descr) is OsOpsDescr
165+
assert isinstance(os_ops_descr.os_ops, OsOperations)
166+
167+
os_ops = os_ops_descr.os_ops
168+
assert isinstance(os_ops, OsOperations)
169+
170+
assert default_username(os_ops) == os_ops.get_user()
171+
assert default_username(os_ops) == os_ops.username
172+
173+
assert default_username() == tconf.os_ops.username
174+
assert default_username() == tconf.os_ops.get_user()
175+
return
176+
177+
def test_default_username2(
178+
self,
179+
os_ops_descr: OsOpsDescr,
180+
):
181+
assert type(os_ops_descr) is OsOpsDescr
182+
assert isinstance(os_ops_descr.os_ops, OsOperations)
183+
184+
os_ops = os_ops_descr.os_ops
185+
assert isinstance(os_ops, OsOperations)
186+
187+
assert default_username2(os_ops) == os_ops.get_user()
188+
assert default_username2(os_ops) == os_ops.username
189+
return
190+
136191
def test_node_constructor__default(self):
137192
node = PostgresNode()
138193
assert node._os_ops is not None

0 commit comments

Comments
 (0)