mirror of
https://github.com/logos-blockchain/logos-blockchain-e2e-tests.git
synced 2026-01-03 05:33:10 +00:00
test: nomos cli wrapper
This commit is contained in:
parent
3ee98528c2
commit
f3a5117b96
0
src/cli/__init__.py
Normal file
0
src/cli/__init__.py
Normal file
11
src/cli/cli_vars.py
Normal file
11
src/cli/cli_vars.py
Normal file
@ -0,0 +1,11 @@
|
||||
from src.env_vars import NOMOS_IMAGE
|
||||
|
||||
nomos_cli = {
|
||||
"reconstruct": {
|
||||
"image": NOMOS_IMAGE,
|
||||
"flags": [{"--app-blobs": [0]}], # Value [] is a list of indexes into list of values required for the flag
|
||||
"volumes": [],
|
||||
"ports": [],
|
||||
"entrypoint": "",
|
||||
},
|
||||
}
|
||||
67
src/cli/nomos_cli.py
Normal file
67
src/cli/nomos_cli.py
Normal file
@ -0,0 +1,67 @@
|
||||
import os
|
||||
|
||||
from src.libs.common import generate_log_prefix
|
||||
from src.libs.custom_logger import get_custom_logger
|
||||
from tenacity import retry, stop_after_delay, wait_fixed
|
||||
|
||||
from src.cli.cli_vars import nomos_cli
|
||||
from src.node.docker_mananger import DockerManager
|
||||
from src.env_vars import DOCKER_LOG_DIR, NOMOS_CLI
|
||||
|
||||
logger = get_custom_logger(__name__)
|
||||
|
||||
|
||||
class NomosCli:
|
||||
def __init__(self, command=""):
|
||||
logger.debug(f"Cli is going to be initialized with this config {nomos_cli[command]}")
|
||||
self._command = command
|
||||
self._image_name = nomos_cli[command]["image"]
|
||||
self._internal_ports = nomos_cli[command]["ports"]
|
||||
self._volumes = nomos_cli[command]["volumes"]
|
||||
self._entrypoint = nomos_cli[command]["entrypoint"]
|
||||
|
||||
container_name = "nomos-cli-" + generate_log_prefix()
|
||||
self._log_path = os.path.join(DOCKER_LOG_DIR, f"{container_name}__{self._image_name.replace('/', '_')}.log")
|
||||
self._docker_manager = DockerManager(self._image_name)
|
||||
self._container_name = container_name
|
||||
self._container = None
|
||||
|
||||
cwd = os.getcwd()
|
||||
self._volumes = [cwd + "/" + volume for volume in self._volumes]
|
||||
|
||||
def run(self, input_values=None, **kwargs):
|
||||
logger.debug(f"NomosCli initialized with log path {self._log_path}")
|
||||
|
||||
cmd = [NOMOS_CLI, self._command]
|
||||
for flag in nomos_cli[self._command]["flags"]:
|
||||
for f, indexes in flag:
|
||||
flag_values_str = f
|
||||
for j in range(len(indexes)):
|
||||
flag_values_str = flag_values_str + "'" + input_values[j] + "'"
|
||||
cmd = cmd + flag_values_str
|
||||
|
||||
logger.debug(f"NomosCli command to run {cmd}")
|
||||
|
||||
# self._container = self._docker_manager.start_container(
|
||||
# self._docker_manager.image,
|
||||
# port_bindings=self._port_map,
|
||||
# args=None,
|
||||
# log_path=self._log_path,
|
||||
# volumes=self._volumes,
|
||||
# entrypoint=self._entrypoint,
|
||||
# remove_container=True,
|
||||
# name=self._container_name,
|
||||
# command=cmd
|
||||
# )
|
||||
|
||||
@retry(stop=stop_after_delay(5), wait=wait_fixed(0.1), reraise=True)
|
||||
def kill(self):
|
||||
if self._container:
|
||||
logger.debug(f"Killing container with id {self._container.short_id}")
|
||||
self._container.kill()
|
||||
try:
|
||||
self._container.remove()
|
||||
except:
|
||||
pass
|
||||
self._container = None
|
||||
logger.debug("Container killed.")
|
||||
@ -27,7 +27,7 @@ NODE_3 = get_env_var("NODE_3", CFGSYNC)
|
||||
|
||||
NOMOS_IMAGE = get_env_var("NOMOS_IMAGE", DEFAULT_IMAGE)
|
||||
|
||||
NOMOS_CLI = 'docker run --rm --entrypoint "" ' + NOMOS_IMAGE + " /usr/bin/nomos-cli"
|
||||
NOMOS_CLI = "/usr/bin/nomos-cli"
|
||||
|
||||
ADDITIONAL_NODES = get_env_var("ADDITIONAL_NODES", f"{NOMOS},{NOMOS}")
|
||||
# more nodes need to follow the NODE_X pattern
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
import random
|
||||
import string
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
from time import sleep
|
||||
@ -20,3 +22,7 @@ def delay(num_seconds):
|
||||
|
||||
def gen_step_id():
|
||||
return f"{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}__{str(uuid.uuid4())}"
|
||||
|
||||
|
||||
def generate_log_prefix():
|
||||
return "".join(random.choices(string.ascii_lowercase, k=4))
|
||||
|
||||
@ -35,15 +35,18 @@ class DockerManager:
|
||||
logger.debug(f"Network {network_name} created")
|
||||
return network
|
||||
|
||||
def start_container(self, image_name, port_bindings, args, log_path, volumes, entrypoint, remove_container=True, name=None):
|
||||
cli_args = []
|
||||
for key, value in args.items():
|
||||
if isinstance(value, list): # Check if value is a list
|
||||
cli_args.extend([f"--{key}={item}" for item in value]) # Add a command for each item in the list
|
||||
elif value is None:
|
||||
cli_args.append(f"{key}") # Add simple command as it is passed in the key
|
||||
else:
|
||||
cli_args.append(f"--{key}={value}") # Add a single command
|
||||
def start_container(self, image_name, port_bindings, args, log_path, volumes, entrypoint, remove_container=True, name=None, command=None):
|
||||
if command is None:
|
||||
cli_args = []
|
||||
for key, value in args.items():
|
||||
if isinstance(value, list): # Check if value is a list
|
||||
cli_args.extend([f"--{key}={item}" for item in value]) # Add a command for each item in the list
|
||||
elif value is None:
|
||||
cli_args.append(f"{key}") # Add simple command as it is passed in the key
|
||||
else:
|
||||
cli_args.append(f"--{key}={value}") # Add a single command
|
||||
else:
|
||||
cli_args = command
|
||||
|
||||
cli_args_str_for_log = " ".join(cli_args)
|
||||
logger.debug(f"docker run -i -t {port_bindings} {image_name} {cli_args_str_for_log}")
|
||||
|
||||
@ -3,6 +3,7 @@ import subprocess
|
||||
|
||||
import pytest
|
||||
|
||||
from src.cli.nomos_cli import NomosCli
|
||||
from src.env_vars import NOMOS_CLI
|
||||
from src.libs.common import delay
|
||||
from src.libs.custom_logger import get_custom_logger
|
||||
@ -35,17 +36,8 @@ class TestDataIntegrity(StepsDataAvailability):
|
||||
delay(10)
|
||||
received_data = self.get_data_range(self.node2, [0] * 31 + [1], [0] * 8, [0] * 7 + [5])
|
||||
rcv_data_json = json.dumps(received_data)
|
||||
cmd = str(NOMOS_CLI + " reconstruct --app-blobs " + "'" + str(rcv_data_json) + "'")
|
||||
|
||||
logger.debug(f"Command to run {cmd}")
|
||||
|
||||
cmd_type = type(cmd)
|
||||
logger.debug(f"Command type {cmd_type}")
|
||||
|
||||
try:
|
||||
completed_cmd = subprocess.run(cmd, shell=True, capture_output=True, text=True, check=True)
|
||||
logger.debug(f"Command finished with output {completed_cmd.stdout}")
|
||||
except subprocess.CalledProcessError as e:
|
||||
logger.error(f"Error occurred while running nomos-cli {e.stderr}")
|
||||
# cmd = str(NOMOS_CLI + " reconstruct --app-blobs " + "'" + str(rcv_data_json) + "'")
|
||||
cli = NomosCli(command="reconstruct")
|
||||
cli.run(input_values=[str(rcv_data_json)])
|
||||
|
||||
# assert DATA_TO_DISPERSE[0] == bytes(received_data[0][1]).decode("utf-8")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user