mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-09 03:18:44 +00:00
test(rust): add FFI boundary tests for build_pattern_prefilter
Signed-off-by: Jacinta Ferrant <jacinta.ferrant@gmail.com>
This commit is contained in:
parent
6e5c5aaa26
commit
90b03faf90
2 changed files with 51 additions and 0 deletions
0
tests/rust_core_unit_tests/__init__.py
Normal file
0
tests/rust_core_unit_tests/__init__.py
Normal file
51
tests/rust_core_unit_tests/test_pattern_prefilter.py
Normal file
51
tests/rust_core_unit_tests/test_pattern_prefilter.py
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
import pytest
|
||||
|
||||
litellm_core = pytest.importorskip(
|
||||
"litellm_core",
|
||||
reason="litellm_core Rust extension not built; run `maturin develop` in rust/",
|
||||
)
|
||||
build_pattern_prefilter = litellm_core.build_pattern_prefilter
|
||||
|
||||
SSN_PATTERN = r"\b\d{3}-\d{2}-\d{4}\b"
|
||||
API_KEY_PATTERN = r"sk-[A-Za-z0-9]{20,}"
|
||||
LOOKBEHIND_PATTERN = r"(?<!\d)foo"
|
||||
|
||||
|
||||
class TestPatternPrefilter:
|
||||
def test_no_match_returns_false(self):
|
||||
prefilter, rejected = build_pattern_prefilter([SSN_PATTERN, API_KEY_PATTERN])
|
||||
assert rejected == []
|
||||
assert prefilter.any_match("hello world, nothing sensitive here") is False
|
||||
|
||||
def test_match_returns_true(self):
|
||||
prefilter, rejected = build_pattern_prefilter([SSN_PATTERN, API_KEY_PATTERN])
|
||||
assert rejected == []
|
||||
assert prefilter.any_match("my ssn is 123-45-6789") is True
|
||||
|
||||
def test_case_insensitive_match(self):
|
||||
prefilter, _ = build_pattern_prefilter([r"secret-token"])
|
||||
assert prefilter.any_match("here is a SECRET-TOKEN") is True
|
||||
|
||||
def test_lookbehind_pattern_is_rejected_by_index(self):
|
||||
prefilter, rejected = build_pattern_prefilter(
|
||||
[SSN_PATTERN, LOOKBEHIND_PATTERN, API_KEY_PATTERN]
|
||||
)
|
||||
assert rejected == [1]
|
||||
|
||||
def test_rejected_pattern_does_not_affect_others(self):
|
||||
prefilter, rejected = build_pattern_prefilter([LOOKBEHIND_PATTERN, SSN_PATTERN])
|
||||
assert rejected == [0]
|
||||
assert prefilter.any_match("hello world") is False
|
||||
assert prefilter.any_match("my ssn is 123-45-6789") is True
|
||||
|
||||
def test_all_patterns_rejected_falls_back_to_true(self):
|
||||
prefilter, rejected = build_pattern_prefilter([LOOKBEHIND_PATTERN])
|
||||
assert rejected == [0]
|
||||
# No usable set was built; the safe default is to never claim "no match".
|
||||
assert prefilter.any_match("anything at all") is True
|
||||
|
||||
def test_empty_pattern_list_falls_back_to_true(self):
|
||||
prefilter, rejected = build_pattern_prefilter([])
|
||||
assert rejected == []
|
||||
# No usable set was built; the safe default is to never claim "no match".
|
||||
assert prefilter.any_match("anything at all") is True
|
||||
Loading…
Add table
Reference in a new issue