mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-08-17 21:25:46 +02:00
### Description Added unit tests for util.py. Authored by @oumizx. Had to copy #6113 into this separate PR because langgraph/libs/cli was having issues with secrets.
153 lines
5.7 KiB
Python
153 lines
5.7 KiB
Python
from unittest.mock import patch
|
|
|
|
from langgraph_cli.util import clean_empty_lines, warn_non_wolfi_distro
|
|
|
|
|
|
def test_clean_empty_lines():
|
|
"""Test clean_empty_lines function."""
|
|
# Test with empty lines
|
|
input_str = "line1\n\nline2\n\nline3"
|
|
result = clean_empty_lines(input_str)
|
|
assert result == "line1\nline2\nline3"
|
|
|
|
# Test with no empty lines
|
|
input_str = "line1\nline2\nline3"
|
|
result = clean_empty_lines(input_str)
|
|
assert result == "line1\nline2\nline3"
|
|
|
|
# Test with only empty lines
|
|
input_str = "\n\n\n"
|
|
result = clean_empty_lines(input_str)
|
|
assert result == ""
|
|
|
|
# Test empty string
|
|
input_str = ""
|
|
result = clean_empty_lines(input_str)
|
|
assert result == ""
|
|
|
|
|
|
def test_warn_non_wolfi_distro_with_debian(capsys):
|
|
"""Test that warning is shown when image_distro is 'debian'."""
|
|
config = {"image_distro": "debian"}
|
|
|
|
warn_non_wolfi_distro(config)
|
|
|
|
captured = capsys.readouterr()
|
|
assert "⚠️ Security Recommendation: Consider switching to Wolfi Linux for enhanced security." in captured.out
|
|
assert "Wolfi is a security-oriented, minimal Linux distribution designed for containers." in captured.out
|
|
assert 'To switch, add \'"image_distro": "wolfi"\' to your langgraph.json config file.' in captured.out
|
|
|
|
|
|
def test_warn_non_wolfi_distro_with_default_debian(capsys):
|
|
"""Test that warning is shown when image_distro is missing (defaults to debian)."""
|
|
config = {} # No image_distro key, should default to debian
|
|
|
|
warn_non_wolfi_distro(config)
|
|
|
|
captured = capsys.readouterr()
|
|
assert "⚠️ Security Recommendation: Consider switching to Wolfi Linux for enhanced security." in captured.out
|
|
assert "Wolfi is a security-oriented, minimal Linux distribution designed for containers." in captured.out
|
|
assert 'To switch, add \'"image_distro": "wolfi"\' to your langgraph.json config file.' in captured.out
|
|
|
|
|
|
def test_warn_non_wolfi_distro_with_wolfi(capsys):
|
|
"""Test that no warning is shown when image_distro is 'wolfi'."""
|
|
config = {"image_distro": "wolfi"}
|
|
|
|
warn_non_wolfi_distro(config)
|
|
|
|
captured = capsys.readouterr()
|
|
assert captured.out == "" # No output should be generated
|
|
|
|
|
|
def test_warn_non_wolfi_distro_with_other_distro(capsys):
|
|
"""Test that warning is shown when image_distro is something other than 'wolfi'."""
|
|
config = {"image_distro": "ubuntu"}
|
|
|
|
warn_non_wolfi_distro(config)
|
|
|
|
captured = capsys.readouterr()
|
|
assert "⚠️ Security Recommendation: Consider switching to Wolfi Linux for enhanced security." in captured.out
|
|
assert "Wolfi is a security-oriented, minimal Linux distribution designed for containers." in captured.out
|
|
assert 'To switch, add \'"image_distro": "wolfi"\' to your langgraph.json config file.' in captured.out
|
|
|
|
|
|
def test_warn_non_wolfi_distro_output_formatting():
|
|
"""Test that the warning output is properly formatted with colors and empty line."""
|
|
config = {"image_distro": "debian"}
|
|
|
|
with patch('click.secho') as mock_secho:
|
|
warn_non_wolfi_distro(config)
|
|
|
|
# Verify click.secho was called with the correct parameters
|
|
expected_calls = [
|
|
(
|
|
("⚠️ Security Recommendation: Consider switching to Wolfi Linux for enhanced security.",),
|
|
{"fg": "yellow", "bold": True}
|
|
),
|
|
(
|
|
(" Wolfi is a security-oriented, minimal Linux distribution designed for containers.",),
|
|
{"fg": "yellow"}
|
|
),
|
|
(
|
|
(' To switch, add \'"image_distro": "wolfi"\' to your langgraph.json config file.',),
|
|
{"fg": "yellow"}
|
|
),
|
|
(
|
|
("",), # Empty line
|
|
{}
|
|
)
|
|
]
|
|
|
|
assert mock_secho.call_count == 4
|
|
for i, (expected_args, expected_kwargs) in enumerate(expected_calls):
|
|
actual_call = mock_secho.call_args_list[i]
|
|
assert actual_call.args == expected_args
|
|
assert actual_call.kwargs == expected_kwargs
|
|
|
|
|
|
def test_warn_non_wolfi_distro_various_configs(capsys):
|
|
"""Test warn_non_wolfi_distro with various config scenarios."""
|
|
test_cases = [
|
|
# (config, should_warn, description)
|
|
({"image_distro": "debian"}, True, "explicit debian"),
|
|
({"image_distro": "wolfi"}, False, "explicit wolfi"),
|
|
({}, True, "missing image_distro (defaults to debian)"),
|
|
({"image_distro": "alpine"}, True, "other distro"),
|
|
({"image_distro": "ubuntu"}, True, "ubuntu distro"),
|
|
({"other_config": "value"}, True, "unrelated config keys"),
|
|
]
|
|
|
|
for config, should_warn, description in test_cases:
|
|
# Clear any previous output
|
|
capsys.readouterr()
|
|
|
|
warn_non_wolfi_distro(config)
|
|
|
|
captured = capsys.readouterr()
|
|
if should_warn:
|
|
assert "⚠️ Security Recommendation" in captured.out, f"Should warn for {description}"
|
|
assert "Wolfi" in captured.out, f"Should mention Wolfi for {description}"
|
|
else:
|
|
assert captured.out == "", f"Should not warn for {description}"
|
|
|
|
|
|
def test_warn_non_wolfi_distro_return_value():
|
|
"""Test that warn_non_wolfi_distro returns None."""
|
|
config = {"image_distro": "debian"}
|
|
result = warn_non_wolfi_distro(config)
|
|
assert result is None
|
|
|
|
config = {"image_distro": "wolfi"}
|
|
result = warn_non_wolfi_distro(config)
|
|
assert result is None
|
|
|
|
|
|
def test_warn_non_wolfi_distro_does_not_modify_config():
|
|
"""Test that warn_non_wolfi_distro does not modify the input config."""
|
|
original_config = {"image_distro": "debian", "other_key": "value"}
|
|
config_copy = original_config.copy()
|
|
|
|
warn_non_wolfi_distro(config_copy)
|
|
|
|
assert config_copy == original_config # Config should remain unchanged |