Skip to content

Commit c24db5b

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

File tree

7 files changed

+100
-17
lines changed

7 files changed

+100
-17
lines changed

cardano_node_tests/tests/test_dbsync_config.py

Lines changed: 74 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from cardano_node_tests.tests import common
1414
from cardano_node_tests.utils import cluster_nodes
1515
from cardano_node_tests.utils import configuration
16+
from cardano_node_tests.utils import dbsync_queries
1617
from cardano_node_tests.utils import dbsync_service_manager as db_sync
1718
from cardano_node_tests.utils import dbsync_utils
1819
from cardano_node_tests.utils import helpers
@@ -143,7 +144,6 @@ def basic_tx_out(
143144
"""Test `tx_out` option."""
144145
db_config = db_sync_manager.get_config_builder()
145146

146-
# Test tx_out : enable
147147
db_sync_manager.restart_with_config(
148148
custom_config=db_config.with_tx_out(
149149
value=db_sync.TxOutMode.ENABLE, force_tx_in=False, use_address_table=False
@@ -158,7 +158,6 @@ def basic_tx_out(
158158
}
159159
)
160160

161-
# Test tx_out : disable
162161
db_sync_manager.restart_with_config(
163162
custom_config=db_config.with_tx_out(
164163
value=db_sync.TxOutMode.DISABLE, force_tx_in=True, use_address_table=True
@@ -177,6 +176,79 @@ def basic_tx_out(
177176

178177
yield basic_tx_out
179178

179+
def governance(
180+
db_sync_manager: db_sync.DBSyncManager,
181+
):
182+
"""Test `governance` option."""
183+
db_config = db_sync_manager.get_config_builder()
184+
185+
db_sync_manager.restart_with_config(
186+
custom_config=db_config.with_governance(value=db_sync.SettingState.ENABLE)
187+
)
188+
189+
# Off-chain data is inserted into the DB a few minutes after the restart of db-sync
190+
def _query_func():
191+
off_chain_vote_data = next(iter(dbsync_queries.query_off_chain_vote_data()), None)
192+
if off_chain_vote_data is None:
193+
msg = "No off-chain vota data record found in db-sync database"
194+
raise dbsync_utils.DbSyncNoResponseError(msg)
195+
return off_chain_vote_data
196+
197+
dbsync_utils.retry_query(query_func=_query_func, timeout=360)
198+
199+
check_dbsync_state(
200+
expected_state={
201+
db_sync.Table.COMMITTEE_DE_REGISTRATION: TableCondition.NOT_EMPTY,
202+
db_sync.Table.COMMITTEE_MEMBER: TableCondition.NOT_EMPTY,
203+
db_sync.Table.COMMITTEE_REGISTRATION: TableCondition.NOT_EMPTY,
204+
db_sync.Table.COMMITTEE: TableCondition.NOT_EMPTY,
205+
db_sync.Table.CONSTITUTION: TableCondition.NOT_EMPTY,
206+
db_sync.Table.DELEGATION_VOTE: TableCondition.NOT_EMPTY,
207+
db_sync.Table.DREP_DISTR: TableCondition.NOT_EMPTY,
208+
db_sync.Table.DREP_REGISTRATION: TableCondition.NOT_EMPTY,
209+
db_sync.Table.EPOCH_STATE: TableCondition.NOT_EMPTY,
210+
db_sync.Table.GOV_ACTION_PROPOSAL: TableCondition.NOT_EMPTY,
211+
db_sync.Table.OFF_CHAIN_VOTE_DATA: TableCondition.NOT_EMPTY,
212+
db_sync.Table.OFF_CHAIN_VOTE_DREP_DATA: TableCondition.NOT_EMPTY,
213+
db_sync.Table.OFF_CHAIN_VOTE_EXTERNAL_UPDATE: TableCondition.NOT_EMPTY,
214+
db_sync.Table.OFF_CHAIN_VOTE_FETCH_ERROR: TableCondition.NOT_EMPTY,
215+
db_sync.Table.OFF_CHAIN_VOTE_GOV_ACTION_DATA: TableCondition.NOT_EMPTY,
216+
db_sync.Table.OFF_CHAIN_VOTE_REFERENCE: TableCondition.NOT_EMPTY,
217+
db_sync.Table.VOTING_ANCHOR: TableCondition.NOT_EMPTY,
218+
db_sync.Table.VOTING_PROCEDURE: TableCondition.NOT_EMPTY,
219+
db_sync.Table.TREASURY_WITHDRAWAL: TableCondition.NOT_EMPTY,
220+
}
221+
)
222+
223+
db_sync_manager.restart_with_config(
224+
custom_config=db_config.with_governance(value=db_sync.SettingState.DISABLE)
225+
)
226+
check_dbsync_state(
227+
expected_state={
228+
db_sync.Table.COMMITTEE_DE_REGISTRATION: TableCondition.EMPTY,
229+
db_sync.Table.COMMITTEE_MEMBER: TableCondition.EMPTY,
230+
db_sync.Table.COMMITTEE_REGISTRATION: TableCondition.EMPTY,
231+
db_sync.Table.COMMITTEE: TableCondition.EMPTY,
232+
db_sync.Table.CONSTITUTION: TableCondition.EMPTY,
233+
db_sync.Table.DELEGATION_VOTE: TableCondition.EMPTY,
234+
db_sync.Table.DREP_DISTR: TableCondition.EMPTY,
235+
db_sync.Table.DREP_REGISTRATION: TableCondition.EMPTY,
236+
db_sync.Table.EPOCH_STATE: TableCondition.EMPTY,
237+
db_sync.Table.GOV_ACTION_PROPOSAL: TableCondition.EMPTY,
238+
db_sync.Table.OFF_CHAIN_VOTE_DATA: TableCondition.EMPTY,
239+
db_sync.Table.OFF_CHAIN_VOTE_DREP_DATA: TableCondition.EMPTY,
240+
db_sync.Table.OFF_CHAIN_VOTE_EXTERNAL_UPDATE: TableCondition.EMPTY,
241+
db_sync.Table.OFF_CHAIN_VOTE_FETCH_ERROR: TableCondition.EMPTY,
242+
db_sync.Table.OFF_CHAIN_VOTE_GOV_ACTION_DATA: TableCondition.EMPTY,
243+
db_sync.Table.OFF_CHAIN_VOTE_REFERENCE: TableCondition.EMPTY,
244+
db_sync.Table.VOTING_ANCHOR: TableCondition.EMPTY,
245+
db_sync.Table.VOTING_PROCEDURE: TableCondition.EMPTY,
246+
db_sync.Table.TREASURY_WITHDRAWAL: TableCondition.EMPTY,
247+
}
248+
)
249+
250+
yield governance
251+
180252
def tx_cbor_value_enable(
181253
db_sync_manager: db_sync.DBSyncManager,
182254
):

cardano_node_tests/tests/tests_conway/test_committee.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,7 @@ def test_update_committee_action(
550550
@allure.link(helpers.get_vcs_link())
551551
@pytest.mark.long
552552
@pytest.mark.dbsync
553+
@pytest.mark.dbsync_config
553554
def test_add_rm_committee_members( # noqa: C901
554555
self,
555556
cluster_lock_governance: governance_utils.GovClusterT,

cardano_node_tests/tests/tests_conway/test_drep.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,7 @@ def test_drep_id_is_blake2b_224_of_drep_vkey(
318318
@submit_utils.PARAM_SUBMIT_METHOD
319319
@common.PARAM_USE_BUILD_CMD
320320
@pytest.mark.dbsync
321+
@pytest.mark.dbsync_config
321322
@pytest.mark.testnets
322323
@pytest.mark.smoke
323324
@pytest.mark.parametrize(

cardano_node_tests/tests/tests_conway/test_info.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@
2222
LOGGER = logging.getLogger(__name__)
2323
DATA_DIR = pl.Path(__file__).parent.parent / "data"
2424

25-
pytestmark = pytest.mark.skipif(
26-
VERSIONS.transaction_era < VERSIONS.CONWAY,
27-
reason="runs only with Tx era >= Conway",
28-
)
25+
pytestmark = [
26+
pytest.mark.skipif(
27+
VERSIONS.transaction_era < VERSIONS.CONWAY,
28+
reason="runs only with Tx era >= Conway",
29+
),
30+
pytest.mark.dbsync_config,
31+
]
2932

3033

3134
@pytest.fixture

cardano_node_tests/tests/tests_conway/test_treasury_withdrawals.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ class TestTreasuryWithdrawals:
9393

9494
@allure.link(helpers.get_vcs_link())
9595
@pytest.mark.dbsync
96+
@pytest.mark.dbsync_config
9697
@pytest.mark.long
9798
@pytest.mark.upgrade_step3
9899
def test_enact_treasury_withdrawals(

cardano_node_tests/utils/dbsync_queries.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,7 @@ class DrepDistributionDBRow:
602602
class EpochStateDBRow:
603603
id: int
604604
committee_id: int
605-
no_confidence_id: tp.Optional[int]
605+
no_confidence_id: int | None
606606
constitution_id: int
607607
epoch_no: int
608608

@@ -1465,7 +1465,9 @@ 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(
1469+
data_hash: str | None = None,
1470+
) -> tp.Generator[OffChainVoteDataDBRow, None, None]:
14691471
"""Query the off chain vote data in db-sync."""
14701472
query = (
14711473
"SELECT"
@@ -1482,11 +1484,16 @@ def query_off_chain_vote_data(data_hash: str) -> tp.Generator[OffChainVoteDataDB
14821484
"LEFT JOIN off_chain_vote_gov_action_data gov ON data.id = gov.off_chain_vote_data_id "
14831485
"LEFT JOIN off_chain_vote_reference ref ON data.id = ref.off_chain_vote_data_id "
14841486
"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;"
14871487
)
14881488

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

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)