From 8096d102765032954344d7acbcb8ec088e6b6394 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Thu, 1 Aug 2024 09:51:27 -0700 Subject: [PATCH] Do code coverage testing on analysis (using stored device data) --- meshtastic/analysis/__main__.py | 11 +- .../tests/slog-test-input/power.feather | Bin 0 -> 22258 bytes meshtastic/tests/slog-test-input/raw.txt | 349 ++++++++++++++++++ meshtastic/tests/slog-test-input/slog.feather | Bin 0 -> 6282 bytes meshtastic/tests/test_analysis.py | 25 ++ 5 files changed, 384 insertions(+), 1 deletion(-) create mode 100644 meshtastic/tests/slog-test-input/power.feather create mode 100644 meshtastic/tests/slog-test-input/raw.txt create mode 100644 meshtastic/tests/slog-test-input/slog.feather create mode 100644 meshtastic/tests/test_analysis.py diff --git a/meshtastic/analysis/__main__.py b/meshtastic/analysis/__main__.py index 993f04b..c4d79e9 100644 --- a/meshtastic/analysis/__main__.py +++ b/meshtastic/analysis/__main__.py @@ -125,6 +125,12 @@ def create_argparser() -> argparse.ArgumentParser: "--slog", help="Specify the structured-logs directory (defaults to latest log directory)", ) + group.add_argument( + "--no-server", + action="store_true", + help="Exit immediately, without running the visualization web server", + ) + return parser @@ -190,7 +196,10 @@ def main(): port = 8051 logging.info(f"Running Dash visualization of {args.slog} (publicly accessible)") - app.run_server(debug=True, host="0.0.0.0", port=port) + if not args.no_server: + app.run_server(debug=True, host="0.0.0.0", port=port) + else: + logging.info("Exiting without running visualization server") if __name__ == "__main__": diff --git a/meshtastic/tests/slog-test-input/power.feather b/meshtastic/tests/slog-test-input/power.feather new file mode 100644 index 0000000000000000000000000000000000000000..f5f14536992a512dd2ef895413d692236a40bb66 GIT binary patch literal 22258 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 literal 0 HcmV?d00001 diff --git a/meshtastic/tests/test_analysis.py b/meshtastic/tests/test_analysis.py new file mode 100644 index 0000000..ea8d6ae --- /dev/null +++ b/meshtastic/tests/test_analysis.py @@ -0,0 +1,25 @@ +"""Test analysis processing.""" + +import logging +import os +import sys + +import pytest + +from meshtastic.analysis.__main__ import main + + +@pytest.mark.unit +def test_analysis(caplog): + """Test analysis processing""" + + cur_dir = os.path.dirname(os.path.abspath(__file__)) + slog_input_dir = os.path.join(cur_dir, "slog-test-input") + + sys.argv = ["fakescriptname", "--no-server", "--slog", slog_input_dir] + + with caplog.at_level(logging.DEBUG): + logging.getLogger().propagate = True # Let our testing framework see our logs + main() + + assert "Exiting without running visualization server" in caplog.text