Skip to content

Commit da219df

Browse files
test(db-sync config): Add db-sync test for governance option
1 parent 1a27e31 commit da219df

File tree

3 files changed

+133
-10
lines changed

3 files changed

+133
-10
lines changed

cardano_node_tests/tests/test_dbsync_config.py

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from cardano_node_tests.utils import cluster_nodes
1515
from cardano_node_tests.utils import configuration
1616
from cardano_node_tests.utils import dbsync_service_manager as db_sync
17+
from cardano_node_tests.utils import dbsync_queries
1718
from cardano_node_tests.utils import dbsync_utils
1819
from cardano_node_tests.utils import helpers
1920

@@ -177,6 +178,125 @@ def basic_tx_out(
177178

178179
yield basic_tx_out
179180

181+
def governance(
182+
db_sync_manager: db_sync.DBSyncManager,
183+
):
184+
"""Test `governance` option."""
185+
db_config = db_sync_manager.get_config_builder()
186+
187+
# Test governance : enable
188+
db_sync_manager.restart_with_config(
189+
custom_config=db_config.with_governance(
190+
value=db_sync.SettingState.ENABLE
191+
)
192+
)
193+
# Offchain vote data is inserted into database few minutes after start of a cluster
194+
def _query_func():
195+
off_chain_vote_data = next(
196+
iter(dbsync_queries.query_off_chain_vote_data()), None
197+
)
198+
if off_chain_vote_data is None:
199+
msg = f"no any off-chain vota data record found id db-sync database"
200+
raise dbsync_utils.DbSyncNoResponseError(msg)
201+
return off_chain_vote_data
202+
# Left temporarirly for debugging purposes
203+
off_chain_vote_data_content = dbsync_utils.retry_query(query_func=_query_func, timeout=360)
204+
from IPython import embed; embed()
205+
206+
check_dbsync_state(
207+
expected_state={
208+
db_sync.Table.COMMITTEE_DE_REGISTRATION: TableCondition.EXISTS,
209+
db_sync.Table.COMMITTEE_DE_REGISTRATION: TableCondition.NOT_EMPTY,
210+
db_sync.Table.COMMITTEE_MEMBER: TableCondition.EXISTS,
211+
db_sync.Table.COMMITTEE_MEMBER: TableCondition.NOT_EMPTY,
212+
db_sync.Table.COMMITTEE_REGISTRATION: TableCondition.EXISTS,
213+
db_sync.Table.COMMITTEE_REGISTRATION: TableCondition.NOT_EMPTY,
214+
db_sync.Table.COMMITTEE: TableCondition.EXISTS,
215+
db_sync.Table.COMMITTEE: TableCondition.NOT_EMPTY,
216+
db_sync.Table.CONSTITUTION: TableCondition.EXISTS,
217+
db_sync.Table.CONSTITUTION: TableCondition.NOT_EMPTY,
218+
db_sync.Table.DELEGATION_VOTE: TableCondition.EXISTS,
219+
db_sync.Table.DELEGATION_VOTE: TableCondition.NOT_EMPTY,
220+
db_sync.Table.DREP_DISTR: TableCondition.EXISTS,
221+
db_sync.Table.DREP_DISTR: TableCondition.NOT_EMPTY,
222+
db_sync.Table.DREP_REGISTRATION: TableCondition.EXISTS,
223+
db_sync.Table.DREP_REGISTRATION: TableCondition.NOT_EMPTY,
224+
db_sync.Table.EPOCH_STATE: TableCondition.EXISTS,
225+
db_sync.Table.EPOCH_STATE: TableCondition.NOT_EMPTY,
226+
db_sync.Table.GOV_ACTION_PROPOSAL: TableCondition.EXISTS,
227+
db_sync.Table.GOV_ACTION_PROPOSAL: TableCondition.NOT_EMPTY,
228+
db_sync.Table.OFF_CHAIN_VOTE_DATA: TableCondition.EXISTS,
229+
db_sync.Table.OFF_CHAIN_VOTE_DATA: TableCondition.NOT_EMPTY,
230+
db_sync.Table.OFF_CHAIN_VOTE_DREP_DATA: TableCondition.EXISTS,
231+
db_sync.Table.OFF_CHAIN_VOTE_DREP_DATA: TableCondition.NOT_EMPTY,
232+
db_sync.Table.OFF_CHAIN_VOTE_EXTERNAL_UPDATE: TableCondition.EXISTS,
233+
db_sync.Table.OFF_CHAIN_VOTE_EXTERNAL_UPDATE: TableCondition.NOT_EMPTY,
234+
db_sync.Table.OFF_CHAIN_VOTE_FETCH_ERROR: TableCondition.EXISTS,
235+
db_sync.Table.OFF_CHAIN_VOTE_FETCH_ERROR: TableCondition.NOT_EMPTY,
236+
db_sync.Table.OFF_CHAIN_VOTE_GOV_ACTION_DATA: TableCondition.EXISTS,
237+
db_sync.Table.OFF_CHAIN_VOTE_GOV_ACTION_DATA: TableCondition.NOT_EMPTY,
238+
db_sync.Table.OFF_CHAIN_VOTE_REFERENCE: TableCondition.EXISTS,
239+
db_sync.Table.OFF_CHAIN_VOTE_REFERENCE: TableCondition.NOT_EMPTY,
240+
db_sync.Table.VOTING_ANCHOR: TableCondition.EXISTS,
241+
db_sync.Table.VOTING_ANCHOR: TableCondition.NOT_EMPTY,
242+
db_sync.Table.VOTING_PROCEDURE: TableCondition.EXISTS,
243+
db_sync.Table.VOTING_PROCEDURE: TableCondition.NOT_EMPTY,
244+
db_sync.Table.TREASURY_WITHDRAWAL: TableCondition.EXISTS,
245+
db_sync.Table.TREASURY_WITHDRAWAL: TableCondition.NOT_EMPTY,
246+
}
247+
)
248+
249+
# Test governance : disable
250+
db_sync_manager.restart_with_config(
251+
custom_config=db_config.with_governance(
252+
value=db_sync.SettingState.DISABLE
253+
)
254+
)
255+
check_dbsync_state(
256+
expected_state={
257+
db_sync.Table.COMMITTEE_DE_REGISTRATION: TableCondition.EXISTS,
258+
db_sync.Table.COMMITTEE_DE_REGISTRATION: TableCondition.EMPTY,
259+
db_sync.Table.COMMITTEE_MEMBER: TableCondition.EXISTS,
260+
db_sync.Table.COMMITTEE_MEMBER: TableCondition.EMPTY,
261+
db_sync.Table.COMMITTEE_REGISTRATION: TableCondition.EXISTS,
262+
db_sync.Table.COMMITTEE_REGISTRATION: TableCondition.EMPTY,
263+
db_sync.Table.COMMITTEE: TableCondition.EXISTS,
264+
db_sync.Table.COMMITTEE: TableCondition.EMPTY,
265+
db_sync.Table.CONSTITUTION: TableCondition.EXISTS,
266+
db_sync.Table.CONSTITUTION: TableCondition.EMPTY,
267+
db_sync.Table.DELEGATION_VOTE: TableCondition.EXISTS,
268+
db_sync.Table.DELEGATION_VOTE: TableCondition.EMPTY,
269+
db_sync.Table.DREP_DISTR: TableCondition.EXISTS,
270+
db_sync.Table.DREP_DISTR: TableCondition.EMPTY,
271+
db_sync.Table.DREP_REGISTRATION: TableCondition.EXISTS,
272+
db_sync.Table.DREP_REGISTRATION: TableCondition.EMPTY,
273+
db_sync.Table.EPOCH_STATE: TableCondition.EXISTS,
274+
db_sync.Table.EPOCH_STATE: TableCondition.EMPTY,
275+
db_sync.Table.GOV_ACTION_PROPOSAL: TableCondition.EXISTS,
276+
db_sync.Table.GOV_ACTION_PROPOSAL: TableCondition.EMPTY,
277+
db_sync.Table.OFF_CHAIN_VOTE_DATA: TableCondition.EXISTS,
278+
db_sync.Table.OFF_CHAIN_VOTE_DATA: TableCondition.EMPTY,
279+
db_sync.Table.OFF_CHAIN_VOTE_DREP_DATA: TableCondition.EXISTS,
280+
db_sync.Table.OFF_CHAIN_VOTE_DREP_DATA: TableCondition.EMPTY,
281+
db_sync.Table.OFF_CHAIN_VOTE_EXTERNAL_UPDATE: TableCondition.EXISTS,
282+
db_sync.Table.OFF_CHAIN_VOTE_EXTERNAL_UPDATE: TableCondition.EMPTY,
283+
db_sync.Table.OFF_CHAIN_VOTE_FETCH_ERROR: TableCondition.EXISTS,
284+
db_sync.Table.OFF_CHAIN_VOTE_FETCH_ERROR: TableCondition.EMPTY,
285+
db_sync.Table.OFF_CHAIN_VOTE_GOV_ACTION_DATA: TableCondition.EXISTS,
286+
db_sync.Table.OFF_CHAIN_VOTE_GOV_ACTION_DATA: TableCondition.EMPTY,
287+
db_sync.Table.OFF_CHAIN_VOTE_REFERENCE: TableCondition.EXISTS,
288+
db_sync.Table.OFF_CHAIN_VOTE_REFERENCE: TableCondition.EMPTY,
289+
db_sync.Table.VOTING_ANCHOR: TableCondition.EXISTS,
290+
db_sync.Table.VOTING_ANCHOR: TableCondition.EMPTY,
291+
db_sync.Table.VOTING_PROCEDURE: TableCondition.EXISTS,
292+
db_sync.Table.VOTING_PROCEDURE: TableCondition.EMPTY,
293+
db_sync.Table.TREASURY_WITHDRAWAL: TableCondition.EXISTS,
294+
db_sync.Table.TREASURY_WITHDRAWAL: TableCondition.EMPTY,
295+
}
296+
)
297+
298+
yield governance
299+
180300
def tx_cbor_value_enable(
181301
db_sync_manager: db_sync.DBSyncManager,
182302
):

cardano_node_tests/utils/dbsync_queries.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1465,7 +1465,7 @@ def query_treasury_withdrawal(txhash: str) -> tp.Generator[TreasuryWithdrawalDBR
14651465
yield TreasuryWithdrawalDBRow(*result)
14661466

14671467

1468-
def query_off_chain_vote_data(data_hash: str) -> tp.Generator[OffChainVoteDataDBRow, None, None]:
1468+
def query_off_chain_vote_data(data_hash: tp.Optional[str] = None) -> tp.Generator[OffChainVoteDataDBRow, None, None]:
14691469
"""Query the off chain vote data in db-sync."""
14701470
query = (
14711471
"SELECT"
@@ -1482,11 +1482,16 @@ def query_off_chain_vote_data(data_hash: str) -> tp.Generator[OffChainVoteDataDB
14821482
"LEFT JOIN off_chain_vote_gov_action_data gov ON data.id = gov.off_chain_vote_data_id "
14831483
"LEFT JOIN off_chain_vote_reference ref ON data.id = ref.off_chain_vote_data_id "
14841484
"LEFT JOIN voting_anchor va ON data.voting_anchor_id = va.id "
1485-
"WHERE data.hash = %s "
1486-
"ORDER BY va.id, ref.id, auth.id, updt.id;"
14871485
)
14881486

1489-
with execute(query=query, vars=(rf"\x{data_hash}",)) as cur:
1487+
query_params = ()
1488+
if data_hash is not None:
1489+
query += "WHERE data.hash = %s "
1490+
query_params = (rf"\x{data_hash}",)
1491+
1492+
query += "ORDER BY va.id, ref.id, auth.id, updt.id;"
1493+
1494+
with execute(query=query, vars=query_params) as cur:
14901495
while (result := cur.fetchone()) is not None:
14911496
yield OffChainVoteDataDBRow(*result)
14921497

cardano_node_tests/utils/dbsync_service_manager.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -358,14 +358,12 @@ def recreate_database(self) -> None:
358358
This is a DESTRUCTIVE operation!
359359
It will delete existing data and recreate the database from scratch.
360360
"""
361-
scripts_dir = cluster_scripts.get_testnet_variant_scriptdir(
362-
testnet_variant=configuration.TESTNET_VARIANT
363-
)
364-
if not scripts_dir:
365-
err = f"Testnet variant '{configuration.TESTNET_VARIANT}' scripts directory not found."
361+
common_scripts_dir = cluster_scripts.COMMON_DIR
362+
if not common_scripts_dir:
363+
err = f"Common scripts directory '{common_scripts_dir}' not found."
366364
raise RuntimeError(err)
367365

368-
db_script_template = scripts_dir / "postgres-setup.sh"
366+
db_script_template = common_scripts_dir / "postgres-setup.sh"
369367
if not db_script_template.exists() and configuration.BOOTSTRAP_DIR:
370368
db_script_template = pl.Path(configuration.BOOTSTRAP_DIR) / "postgres-setup.sh"
371369

0 commit comments

Comments
 (0)