diff --git a/src/client/nomos_cli.py b/src/client/nomos_cli.py index 15817a8..8f1ed58 100644 --- a/src/client/nomos_cli.py +++ b/src/client/nomos_cli.py @@ -77,15 +77,18 @@ class NomosCli: return def reconstruct(self, decode_only=False): - keywords = ["Reconstructed data"] + keyword = "Reconstructed data" + keywords = [keyword] log_stream = self._container.logs(stream=True) matches = self._docker_manager.search_log_for_keywords(self._log_path, keywords, False, log_stream) - assert len(matches) > 0, f"Reconstructed data not found {matches}" + assert len(matches[keyword]) > 0, f"Reconstructed data not found {matches[keyword]}" + + logger.debug(f"Reconstructed data match found {matches[keyword]}") # Use regular expression that captures the byte list after "Reconstructed data" - result = re.sub(r".*Reconstructed data\s*(\[[^\]]+\]).*", r"\1", matches[keywords[0]][0]) + result = re.sub(r".*Reconstructed data\s*(\[[^\]]+\]).*", r"\1", matches[keyword][0]) result_bytes = [] try: diff --git a/src/docker_manager.py b/src/docker_manager.py index 4f5fd8b..22dc71f 100644 --- a/src/docker_manager.py +++ b/src/docker_manager.py @@ -142,35 +142,35 @@ class DockerManager: for keyword in keywords: if use_regex: if re.search(keyword, line, re.IGNORECASE): - matches[keyword].append(line.strip()) + matches[keyword].append(line) else: if keyword.lower() in line.lower(): - matches[keyword].append(line.strip()) + matches[keyword].append(line) return matches def search_log_for_keywords(self, log_path, keywords, use_regex=False, log_stream=None): - matches = {} + matches = {keyword: [] for keyword in keywords} # Read from stream if log_stream is not None: for line in log_stream: - matches = self.find_keywords_in_line(keywords, line.decode("utf-8"), use_regex=use_regex) + line_matches = self.find_keywords_in_line(keywords, line.decode("utf-8"), use_regex=use_regex) + for keyword, result in line_matches.items(): + matches[keyword].extend(result) else: # Open the log file and search line by line with open(log_path, "r") as log_file: for line in log_file: - matches = self.find_keywords_in_line(keywords, line, use_regex=use_regex) + line_matches = self.find_keywords_in_line(keywords, line, use_regex=use_regex) + for keyword, result in line_matches.items(): + matches[keyword].extend(result) # Check if there were any matches - if any(matches[keyword] for keyword in keywords): - for keyword, lines in matches.items(): - if lines: - logger.debug(f"Found matches for keyword '{keyword}': {lines}") + if any(matches_list for matches_list in matches.values()): return matches else: - logger.debug("No keywords found in the nomos logs.") return None diff --git a/src/node/nomos_node.py b/src/node/nomos_node.py index 4921a13..3547fa4 100644 --- a/src/node/nomos_node.py +++ b/src/node/nomos_node.py @@ -142,8 +142,16 @@ class NomosNode: if whitelist: keywords = [keyword for keyword in keywords if keyword not in whitelist] - matches = self._docker_manager.search_log_for_keywords(self._log_path, keywords, False) - assert not matches, f"Found errors {matches}" + matches_found = self._docker_manager.search_log_for_keywords(self._log_path, keywords, False) + + logger.info(f"Printing log matches for {self.name()}") + if matches_found: + for match in matches_found: + if len(matches_found[match]) != 0: + for log_line in matches_found[match]: + logger.debug(f"Log line matching keyword '{match}': {log_line}") + else: + logger.debug("No keyword matches found in the logs.") def send_dispersal_request(self, data): return self._api.send_dispersal_request(data) diff --git a/src/test_data.py b/src/test_data.py index de36752..1293358 100644 --- a/src/test_data.py +++ b/src/test_data.py @@ -23,6 +23,8 @@ LOG_ERROR_KEYWORDS = [ "goexit", "race condition", "double free", + "error", + "warn", ] DATA_TO_DISPERSE = [ diff --git a/tests/conftest.py b/tests/conftest.py index dd418c0..abcc9b7 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -97,7 +97,7 @@ def close_open_nodes(attach_logs_on_fail): @pytest.fixture(scope="function", autouse=True) -def check_nomos_log_errors(): +def check_nomos_log_errors(request): yield logger.debug(f"Running fixture teardown: {inspect.currentframe().f_code.co_name}") for node in DS.nomos_nodes: