From 6efbb3bf2f6ccc20e6993a0b10dc3675f4512999 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 13 Jun 2025 13:43:33 +0800 Subject: [PATCH] test: dispersal with mod da images --- src/env_vars.py | 6 +++++- src/node/node_vars.py | 14 ++++++++++++- src/steps/common.py | 20 +++++++++++++++++- .../test_dispersal_resilience.py | 21 +++++++++++++++++++ 4 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 tests/dispersal_resilience/test_dispersal_resilience.py diff --git a/src/env_vars.py b/src/env_vars.py index 8a2358e..28b2c59 100644 --- a/src/env_vars.py +++ b/src/env_vars.py @@ -15,8 +15,10 @@ def get_env_var(var_name, default=None): # Configuration constants. Need to be upercase to appear in reports -DEFAULT_NOMOS_IMAGE = "ghcr.io/logos-co/nomos:testnet" +DEFAULT_NOMOS_IMAGE = "nomos:testnet" NOMOS_IMAGE = get_env_var("NOMOS_IMAGE", DEFAULT_NOMOS_IMAGE) +NOMOS_MOD_DA_IMAGE = "nomos-mod-da:testnet" +NOMOS_EXECUTOR_MOD_DA_IMAGE = "nomos-executor-mod-da:testnet" DEFAULT_PROXY_IMAGE = "bitnami/configurable-http-proxy:latest" HTTP_PROXY_IMAGE = get_env_var("HTTP_PROXY_IMAGE", DEFAULT_PROXY_IMAGE) @@ -25,6 +27,8 @@ NOMOS_CUSTOM = "nomos_custom" NOMOS = "nomos" NOMOS_EXECUTOR = "nomos_executor" CFGSYNC = "cfgsync" +NOMOS_MOD_DA = "nomos_mod_da" +NOMOS_EXECUTOR_MOD_DA = "nomos_executor_mod_da" NODE_1 = get_env_var("NODE_1", NOMOS) NODE_2 = get_env_var("NODE_2", NOMOS_EXECUTOR) diff --git a/src/node/node_vars.py b/src/node/node_vars.py index 6b1f71f..f45530a 100644 --- a/src/node/node_vars.py +++ b/src/node/node_vars.py @@ -1,6 +1,18 @@ -from src.env_vars import NOMOS_IMAGE +from src.env_vars import NOMOS_IMAGE, NOMOS_MOD_DA_IMAGE, NOMOS_EXECUTOR_MOD_DA_IMAGE nomos_nodes = { + "nomos_mod_da": { + "image": NOMOS_MOD_DA_IMAGE, + "volumes": ["cluster_config:/etc/nomos", "./kzgrs/kzgrs_test_params:/kzgrs_test_params:z"], + "ports": ["3000/udp", "18080/tcp"], + "entrypoint": "/etc/nomos/scripts/run_nomos_node.sh", + }, + "nomos_executor_mod_da": { + "image": NOMOS_EXECUTOR_MOD_DA_IMAGE, + "volumes": ["cluster_config:/etc/nomos", "./kzgrs/kzgrs_test_params:/kzgrs_test_params:z"], + "ports": ["3000/udp", "18080/tcp"], + "entrypoint": "/etc/nomos/scripts/run_nomos_executor.sh", + }, "nomos_custom": { "image": NOMOS_IMAGE, "volumes": ["cluster_config:/etc/nomos", "./kzgrs/kzgrs_test_params:/kzgrs_test_params:z"], diff --git a/src/steps/common.py b/src/steps/common.py index 89671eb..eaf9db9 100644 --- a/src/steps/common.py +++ b/src/steps/common.py @@ -4,7 +4,7 @@ import os import pytest from src.client.proxy_client import ProxyClient -from src.env_vars import CFGSYNC, NOMOS, NOMOS_EXECUTOR, CONSENSUS_SLOT_TIME +from src.env_vars import CFGSYNC, NOMOS, NOMOS_EXECUTOR, CONSENSUS_SLOT_TIME, NOMOS_MOD_DA, NOMOS_EXECUTOR_MOD_DA from src.libs.common import delay from src.libs.custom_logger import get_custom_logger from src.node.nomos_node import NomosNode @@ -112,3 +112,21 @@ class StepsCommon: @pytest.fixture(params=["setup_2_node_cluster", "setup_4_node_cluster"]) def setup_cluster_variant(self, request): return request.getfixturevalue(request.param) + + @pytest.fixture(scope="function") + def setup_2_node_mod_da_cluster(self, request): + logger.debug(f"Running fixture setup: {inspect.currentframe().f_code.co_name}") + + subnet_size = get_param_or_default(request, "subnet_size", 2) + dispersal_factor = get_param_or_default(request, "dispersal_factor", 2) + min_dispersal_peers = get_param_or_default(request, "min_dispersal_peers", 1) + prepare_cluster_config(2, subnet_size, dispersal_factor, min_dispersal_peers) + + self.node1 = NomosNode(CFGSYNC, "cfgsync") + self.node2 = NomosNode(NOMOS_MOD_DA, "nomos_node_0") + self.node3 = NomosNode(NOMOS_EXECUTOR_MOD_DA, "nomos_node_1") + self.main_nodes.extend([self.node1, self.node2, self.node3]) + start_nodes(self.main_nodes) + ensure_nodes_ready(self.main_nodes[1:]) + + delay(CONSENSUS_SLOT_TIME) diff --git a/tests/dispersal_resilience/test_dispersal_resilience.py b/tests/dispersal_resilience/test_dispersal_resilience.py new file mode 100644 index 0000000..e3ce060 --- /dev/null +++ b/tests/dispersal_resilience/test_dispersal_resilience.py @@ -0,0 +1,21 @@ +import pytest + +from src.env_vars import CONSENSUS_SLOT_TIME +from src.libs.common import to_app_id, to_index, delay +from src.steps.da import StepsDataAvailability +from src.test_data import DATA_TO_DISPERSE + + +class TestDispersalResilience(StepsDataAvailability): + main_nodes = [] + + @pytest.mark.usefixtures("setup_2_node_mod_da_cluster") + def test_integrity_kzg_commitments(self): + # Confirm validator node has rejected dispersal request from executor - there is a mismatch between + # column data and proofs. + self.disperse_data(DATA_TO_DISPERSE[3], to_app_id(1), to_index(0)) + delay(CONSENSUS_SLOT_TIME) + try: + _rcv_data = self.get_data_range(self.node2, to_app_id(1), to_index(0), to_index(5)) + except AssertionError as ae: + assert "Get data range response is empty" in str(ae), "Get data range response should be empty"