Files
wehub-resource-sync 7a0da7932b
Backwards Compatibility / Verify Encryption Constants (push) Waiting to run
Backwards Compatibility / PyPI Version Compatibility (push) Waiting to run
Backwards Compatibility / Database Migration Tests (push) Waiting to run
CodeQL Advanced / Analyze (javascript-typescript) (push) Waiting to run
CodeQL Advanced / Analyze (python) (push) Waiting to run
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-form] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-metrics] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [research-workflow] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-core] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [settings-pages] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [history-news] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [library] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [link-analytics] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [mobile] (push) Blocked by required conditions
Docker Tests (Consolidated) / detect-changes (push) Waiting to run
Docker Tests (Consolidated) / Build Test Image (push) Waiting to run
Docker Tests (Consolidated) / All Pytest Tests + Coverage (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [accessibility] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [api-crud] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-login] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-pages] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [auth-register] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-core] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [chat-lifecycle] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) [error-benchmark] (push) Blocked by required conditions
Docker Tests (Consolidated) / UI Tests (Puppeteer) (push) Blocked by required conditions
Docker Tests (Consolidated) / Accessibility Tests (push) Blocked by required conditions
Docker Tests (Consolidated) / LLM Unit Tests (push) Blocked by required conditions
Docker Tests (Consolidated) / LLM Example Tests (push) Blocked by required conditions
Docker Tests (Consolidated) / Production Image Smoke Test (push) Blocked by required conditions
Docker Tests (Consolidated) / Infrastructure Tests (push) Blocked by required conditions
OSSF Scorecard / OSSF Security Scorecard Analysis (push) Waiting to run
OSV-Scanner (Scheduled) / scan-scheduled (push) Failing after 0s
Create Release / test-gate (push) Has been cancelled
Create Release / release-gate (push) Has been cancelled
Create Release / ci-gate (push) Has been cancelled
Create Release / version-check (push) Has been cancelled
Create Release / e2e-test-gate (push) Has been cancelled
Create Release / responsive-test-gate (push) Has been cancelled
Create Release / compat-test-gate (push) Has been cancelled
Create Release / compose-integration-gate (push) Has been cancelled
Create Release / vulture-gate (push) Has been cancelled
Create Release / build (push) Has been cancelled
Create Release / provenance (push) Has been cancelled
Create Release / prerelease-docker (push) Has been cancelled
Create Release / publish-docker (push) Has been cancelled
Create Release / create-release (push) Has been cancelled
Create Release / cleanup-changelog (push) Has been cancelled
Create Release / trigger-pypi (push) Has been cancelled
Create Release / monitor-pypi (push) Has been cancelled
Create Release / Clean up orphan prerelease tags and signatures (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:08:55 +08:00

264 lines
9.3 KiB
Python

"""
Tests for benchmarks/datasets/utils.py
Tests cover:
- derive_key function for key derivation
- decrypt function for XOR decryption
- get_known_answer_map function
"""
import base64
class TestDeriveKey:
"""Tests for the derive_key function."""
def test_derives_consistent_key(self):
"""Test that same password produces same key."""
from local_deep_research.benchmarks.datasets.utils import derive_key
key1 = derive_key("password123", 32)
key2 = derive_key("password123", 32)
assert key1 == key2
def test_different_passwords_produce_different_keys(self):
"""Test that different passwords produce different keys."""
from local_deep_research.benchmarks.datasets.utils import derive_key
key1 = derive_key("password1", 32)
key2 = derive_key("password2", 32)
assert key1 != key2
def test_key_has_requested_length(self):
"""Test that key has the requested length."""
from local_deep_research.benchmarks.datasets.utils import derive_key
for length in [16, 32, 64, 100]:
key = derive_key("password", length)
assert len(key) == length
def test_handles_short_length(self):
"""Test handling of short key lengths."""
from local_deep_research.benchmarks.datasets.utils import derive_key
key = derive_key("password", 8)
assert len(key) == 8
def test_handles_long_length(self):
"""Test handling of long key lengths (requires key repetition)."""
from local_deep_research.benchmarks.datasets.utils import derive_key
key = derive_key("password", 128)
assert len(key) == 128
def test_empty_password(self):
"""Test handling of empty password."""
from local_deep_research.benchmarks.datasets.utils import derive_key
key = derive_key("", 32)
assert len(key) == 32
class TestDecrypt:
"""Tests for the decrypt function."""
def test_returns_short_strings_unchanged(self):
"""Test that strings shorter than 8 chars are returned unchanged."""
from local_deep_research.benchmarks.datasets.utils import decrypt
result = decrypt("short", "password")
assert result == "short"
def test_returns_non_base64_unchanged(self):
"""Test that non-base64 strings are returned unchanged."""
from local_deep_research.benchmarks.datasets.utils import decrypt
# Contains characters not in base64 alphabet
result = decrypt("not@base64!string", "password")
assert result == "not@base64!string"
def test_returns_non_string_unchanged(self):
"""Test that non-string input is returned unchanged."""
from local_deep_research.benchmarks.datasets.utils import decrypt
result = decrypt(12345, "password")
assert result == 12345
def test_known_encryption_decryption(self):
"""Test decryption with known encrypted value."""
from local_deep_research.benchmarks.datasets.utils import (
decrypt,
derive_key,
)
# Create a known encrypted value
plaintext = "Hello World test message"
password = "test_password"
# Encrypt
key = derive_key(password, len(plaintext.encode()))
encrypted = bytes(
a ^ b for a, b in zip(plaintext.encode(), key, strict=False)
)
ciphertext_b64 = base64.b64encode(encrypted).decode()
# Decrypt should return original
result = decrypt(ciphertext_b64, password)
assert result == plaintext
def test_invalid_base64_returns_original(self):
"""Test that invalid base64 returns original string."""
from local_deep_research.benchmarks.datasets.utils import decrypt
# Valid base64 chars but invalid padding/encoding
invalid = "AAAAAAAA" # Valid chars but may not decode properly
result = decrypt(invalid, "password")
# Should return something (either original or decrypted)
assert isinstance(result, str)
def test_decryption_with_hardcoded_key_fallback(self):
"""Test that hardcoded key fallback is attempted."""
from local_deep_research.benchmarks.datasets.utils import decrypt
# Create encrypted with hardcoded BrowseComp key
plaintext = "This is a test message with spaces"
password = "MHGGF2022!"
from local_deep_research.benchmarks.datasets.utils import derive_key
key = derive_key(password, len(plaintext.encode()))
encrypted = bytes(
a ^ b for a, b in zip(plaintext.encode(), key, strict=False)
)
ciphertext_b64 = base64.b64encode(encrypted).decode()
# Should decrypt using hardcoded key as fallback
result = decrypt(ciphertext_b64, "wrong_password")
assert result == plaintext
class TestGetKnownAnswerMap:
"""Tests for the get_known_answer_map function."""
def test_returns_dictionary(self):
"""Test that function returns a dictionary."""
from local_deep_research.benchmarks.datasets.utils import (
get_known_answer_map,
)
result = get_known_answer_map()
assert isinstance(result, dict)
def test_contains_known_mappings(self):
"""Test that known mappings are present."""
from local_deep_research.benchmarks.datasets.utils import (
get_known_answer_map,
)
result = get_known_answer_map()
# Check known mappings exist
assert "dFoTn+K+bcdyWg==" in result
assert result["dFoTn+K+bcdyWg=="] == "Tooth Rock"
assert "ERFIwA==" in result
assert result["ERFIwA=="] == "1945"
def test_values_are_strings(self):
"""Test that all values are strings."""
from local_deep_research.benchmarks.datasets.utils import (
get_known_answer_map,
)
result = get_known_answer_map()
for key, value in result.items():
assert isinstance(key, str)
assert isinstance(value, str)
class TestDatasetRegistry:
"""Tests for the DatasetRegistry class."""
def test_registry_has_register_method(self):
"""Test that registry has register method."""
from local_deep_research.benchmarks.datasets.base import DatasetRegistry
assert hasattr(DatasetRegistry, "register")
assert callable(DatasetRegistry.register)
def test_registry_has_get_dataset_class_method(self):
"""Test that registry has get_dataset_class method."""
from local_deep_research.benchmarks.datasets.base import DatasetRegistry
assert hasattr(DatasetRegistry, "get_dataset_class")
assert callable(DatasetRegistry.get_dataset_class)
def test_registry_has_create_dataset_method(self):
"""Test that registry has create_dataset method."""
from local_deep_research.benchmarks.datasets.base import DatasetRegistry
assert hasattr(DatasetRegistry, "create_dataset")
assert callable(DatasetRegistry.create_dataset)
def test_registry_has_get_available_datasets(self):
"""Test that registry has get_available_datasets method."""
from local_deep_research.benchmarks.datasets.base import DatasetRegistry
assert hasattr(DatasetRegistry, "get_available_datasets")
result = DatasetRegistry.get_available_datasets()
assert isinstance(result, list)
def test_registry_has_load_dataset_method(self):
"""Test that registry has load_dataset method."""
from local_deep_research.benchmarks.datasets.base import DatasetRegistry
assert hasattr(DatasetRegistry, "load_dataset")
assert callable(DatasetRegistry.load_dataset)
def test_get_unknown_dataset_raises(self):
"""Test that getting unknown dataset raises ValueError."""
from local_deep_research.benchmarks.datasets.base import DatasetRegistry
import pytest
with pytest.raises(ValueError, match="Unknown dataset"):
DatasetRegistry.get_dataset_class("nonexistent_dataset_xyz")
class TestBenchmarkDatasetBase:
"""Tests for the BenchmarkDataset abstract base class."""
def test_benchmark_dataset_is_abstract(self):
"""Test that BenchmarkDataset is abstract."""
from local_deep_research.benchmarks.datasets.base import (
BenchmarkDataset,
)
from abc import ABC
assert issubclass(BenchmarkDataset, ABC)
def test_benchmark_dataset_has_abstract_methods(self):
"""Test that BenchmarkDataset has required abstract methods."""
from local_deep_research.benchmarks.datasets.base import (
BenchmarkDataset,
)
# Check for abstract methods
assert hasattr(BenchmarkDataset, "get_dataset_info")
assert hasattr(BenchmarkDataset, "get_default_dataset_path")
assert hasattr(BenchmarkDataset, "process_example")
def test_benchmark_dataset_has_utility_methods(self):
"""Test that BenchmarkDataset has utility methods."""
from local_deep_research.benchmarks.datasets.base import (
BenchmarkDataset,
)
assert hasattr(BenchmarkDataset, "load")
assert hasattr(BenchmarkDataset, "get_examples")
assert hasattr(BenchmarkDataset, "get_example")
assert hasattr(BenchmarkDataset, "get_question")
assert hasattr(BenchmarkDataset, "get_answer")