From 11834512db7bbac0aec79ddae3a3a75b3b68112a Mon Sep 17 00:00:00 2001 From: Caspar Broekhuizen Date: Fri, 19 Sep 2025 17:17:05 -0700 Subject: [PATCH] test(cli): add tests for util.py (#6172) ### 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. --- libs/cli/tests/unit_tests/test_util.py | 153 +++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 libs/cli/tests/unit_tests/test_util.py diff --git a/libs/cli/tests/unit_tests/test_util.py b/libs/cli/tests/unit_tests/test_util.py new file mode 100644 index 000000000..c26e776e9 --- /dev/null +++ b/libs/cli/tests/unit_tests/test_util.py @@ -0,0 +1,153 @@ +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 \ No newline at end of file