8000 [#267] NodeApp.make_simple does not change 'initdb_params' · postgrespro/testgres@b5b0d2b · GitHub
[go: up one dir, main page]

Skip to content {"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}

Commit b5b0d2b

Browse files
[#267] NodeApp.make_simple does not change 'initdb_params'
- method works with copy of initdb_params - Default value of initdb_params is None
1 parent 1512fe7 commit b5b0d2b

File tree

2 files changed

+114
-7
lines changed

2 files changed

+114
-7
lines changed

testgres/node_app.py

Lines changed: 66 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def make_simple(
8484
port: typing.Optional[int] = None,
8585
set_replication: bool = False,
8686
ptrack_enable: bool = False,
87-
initdb_params: T_LIST_STR = [],
87+
initdb_params: typing.Optional[T_LIST_STR] = None,
8888
pg_options: typing.Optional[T_DICT_STR_STR] = None,
8989
checksum: bool = True,
9090
bin_dir: typing.Optional[str] = None
@@ -93,22 +93,31 @@ def make_simple(
9393
assert port is None or type(port) == int # noqa: E721
9494
assert type(set_replication) == bool # noqa: E721
9595
assert type(ptrack_enable) == bool # noqa: E721
96-
assert type(initdb_params) == list # noqa: E721
96+
assert initdb_params is None or type(initdb_params) == list # noqa: E721
9797
assert pg_options is None or type(pg_options) == dict # noqa: E721
9898
assert type(checksum) == bool # noqa: E721
9999
assert bin_dir is None or type(bin_dir) == str # noqa: E721
100100

101-
if checksum and '--data-checksums' not in initdb_params:
102-
initdb_params.append('--data-checksums')
103-
104101
node = self.make_empty(
105102
base_dir,
106103
port,
107104
bin_dir=bin_dir
108105
)
109106

107+
final_initdb_params = initdb_params
108+
109+
if checksum:
110+
final_initdb_params = __class__._paramlist_append_is_not_exist(
111+
initdb_params,
112+
final_initdb_params,
113+
'--data-checksums'
114+
)
115+
assert final_initdb_params is not initdb_params
116+
assert final_initdb_params is not None
117+
assert '--data-checksums' in final_initdb_params
118+
110119
node.init(
111-
initdb_params=initdb_params,
120+
initdb_params=final_initdb_params,
112121
allow_streaming=set_replication
113122
)
114123

@@ -150,7 +159,7 @@ def make_simple(
150159

151160
# Apply given parameters
152161
if pg_options is not None:
153-
assert type(pg_options) == dict
162+
assert type(pg_options) == dict # noqa: E721
154163
for option_name, option_value in pg_options.items():
155164
options[option_name] = option_value
156165

@@ -169,6 +178,56 @@ def make_simple(
169178

170179
return node
171180

181+
@staticmethod
182+
def _paramlist_has_param(
183+
params: typing.Optional[T_LIST_STR],
184+
param: str
185+
) -> bool:
186+
assert type(param) == str # noqa: E721
187+
188+
if params is None:
189+
return False
190+
191+
assert type(params) == list # noqa: E721
192+
193+
if param in params:
194+
return True
195+
196+
return False
197+
198+
@staticmethod
199+
def _paramlist_append(
200+
user_params: typing.Optional[T_LIST_STR],
201+
updated_params: typing.Optional[T_LIST_STR],
202+
param: str,
203+
) -> T_LIST_STR:
204+
assert user_params is None or type(user_params) == list # noqa: E721
205+
assert updated_params is None or type(updated_params) == list # noqa: E721
206+
assert type(param) == str # noqa: E721
207+
208+
if updated_params is None:
209+
if user_params is None:
210+
return [param]
211+
212+
return [*user_params, param]
213+
214+
assert updated_params is not None
215+
if updated_params is user_params:
216+
return [*user_params, param]
217+
218+
updated_params.append(param)
219+
return updated_params
220+
221+
@staticmethod
222+
def _paramlist_append_is_not_exist(
223+
user_params: typing.Optional[T_LIST_STR],
224+
updated_params: typing.Optional[T_LIST_STR],
225+
param: str,
226+
) -> typing.Optional[T_LIST_STR]:
227+
if __class__._paramlist_has_param(updated_params, param):
228+
return updated_params
229+
return __class__._paramlist_append(user_params, updated_params, param)
230+
172231
@staticmethod
173232
def _gettempdir_for_socket() -> str:
174233
platform_system_name = platform.system().lower()

tests/test_testgres_common.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,6 +1669,54 @@ def test_node_app__make_empty__base_dir_is_Empty(self, node_svc: PostgresNodeSer
16691669
logging.info("temp directory [{}] is deleting".format(tmp_dir))
16701670
node_svc.os_ops.rmdir(tmp_dir)
16711671

1672+
def test_node_app__make_simple__checksum(self, node_svc: PostgresNodeService):
1673+
assert type(node_svc) == PostgresNodeService # noqa: E721
1674+
1675+
assert isinstance(node_svc.os_ops, OsOperations)
1676+
assert node_svc.port_manager is not None
1677+
assert isinstance(node_svc.port_manager, PortManager)
1678+
1679+
tmp_dir = node_svc.os_ops.mkdtemp()
1680+
assert tmp_dir is not None
1681+
assert type(tmp_dir) == str # noqa: E721
1682+
1683+
logging.info("temp directory is [{}]".format(tmp_dir))
1684+
node_app = NodeApp(test_path=tmp_dir, os_ops=node_svc.os_ops)
1685+
1686+
C_NODE = "node"
1687+
1688+
# -----------
1689+
def LOCAL__test(checksum: bool, initdb_params: typing.Optional[list]):
1690+
initdb_params0 = initdb_params
1691+
initdb_params0_copy = initdb_params0.copy() if initdb_params0 is not None else None
1692+
1693+
with node_app.make_simple(C_NODE, checksum=checksum, initdb_params=initdb_params):
1694+
assert initdb_params is initdb_params0
1695+
if initdb_params0 is not None:
1696+
assert initdb_params0 == initdb_params0_copy
1697+
1698+
assert initdb_params is initdb_params0
1699+
if initdb_params0 is not None:
1700+
assert initdb_params0 == initdb_params0_copy
1701+
1702+
# -----------
1703+
LOCAL__test(checksum=False, initdb_params=None)
1704+
LOCAL__test(checksum=True, initdb_params=None)
1705+
1706+
# -----------
1707+
params = []
1708+
LOCAL__test(checksum=False, initdb_params=params)
1709+
LOCAL__test(checksum=True, initdb_params=params)
1710+
1711+
# -----------
1712+
params = ["--no-sync"]
1713+
LOCAL__test(checksum=False, initdb_params=params)
1714+
LOCAL__test(checksum=True, initdb_params=params)
1715+
1716+
# -----------
1717+
logging.info("temp directory [{}] is deleting".format(tmp_dir))
1718+
node_svc.os_ops.rmdir(tmp_dir)
1719+
16721720
@staticmethod
16731721
def helper__get_node(
16741722
node_svc: PostgresNodeService,

0 commit comments

Comments
 (0)
0