mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-01-03 05:08:29 +00:00
* adding fingerprints * fixed * fix * Fix Pydantic v2 compatibility in SecurityConfig and Fingerprint classes (#2335) * Fix Pydantic v2 compatibility in SecurityConfig and Fingerprint classes Co-Authored-By: Joe Moura <joao@crewai.com> * Fix type-checker errors in fingerprint properties Co-Authored-By: Joe Moura <joao@crewai.com> * Enhance security validation in Fingerprint and SecurityConfig classes Co-Authored-By: Joe Moura <joao@crewai.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Joe Moura <joao@crewai.com> * incorporate small improvements / changes * Expect different * Remove redundant null check in Crew.fingerprint property (#2342) * Remove redundant null check in Crew.fingerprint property and add security module Co-Authored-By: Joe Moura <joao@crewai.com> * Enhance security module with type hints, improved UUID namespace, metadata validation, and versioning Co-Authored-By: Joe Moura <joao@crewai.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Joe Moura <joao@crewai.com> Co-authored-by: João Moura <joaomdmoura@gmail.com> --------- Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: Joe Moura <joao@crewai.com> Co-authored-by: Brandon Hancock <brandon@brandonhancock.io>
118 lines
3.9 KiB
Python
118 lines
3.9 KiB
Python
"""Test for the SecurityConfig class."""
|
|
|
|
import json
|
|
from datetime import datetime
|
|
|
|
from crewai.security import Fingerprint, SecurityConfig
|
|
|
|
|
|
def test_security_config_creation_with_defaults():
|
|
"""Test creating a SecurityConfig with default values."""
|
|
config = SecurityConfig()
|
|
|
|
# Check default values
|
|
assert config.fingerprint is not None # Fingerprint is auto-generated
|
|
assert isinstance(config.fingerprint, Fingerprint)
|
|
assert config.fingerprint.uuid_str is not None # UUID is auto-generated
|
|
|
|
|
|
def test_security_config_fingerprint_generation():
|
|
"""Test that SecurityConfig automatically generates fingerprints."""
|
|
config = SecurityConfig()
|
|
|
|
# Check that fingerprint was auto-generated
|
|
assert config.fingerprint is not None
|
|
assert isinstance(config.fingerprint, Fingerprint)
|
|
assert isinstance(config.fingerprint.uuid_str, str)
|
|
assert len(config.fingerprint.uuid_str) > 0
|
|
|
|
|
|
def test_security_config_init_params():
|
|
"""Test that SecurityConfig can be initialized and modified."""
|
|
# Create a config
|
|
config = SecurityConfig()
|
|
|
|
# Create a custom fingerprint
|
|
fingerprint = Fingerprint(metadata={"version": "1.0"})
|
|
|
|
# Set the fingerprint
|
|
config.fingerprint = fingerprint
|
|
|
|
# Check fingerprint was set correctly
|
|
assert config.fingerprint is fingerprint
|
|
assert config.fingerprint.metadata == {"version": "1.0"}
|
|
|
|
|
|
def test_security_config_to_dict():
|
|
"""Test converting SecurityConfig to dictionary."""
|
|
# Create a config with a fingerprint that has metadata
|
|
config = SecurityConfig()
|
|
config.fingerprint.metadata = {"version": "1.0"}
|
|
|
|
config_dict = config.to_dict()
|
|
|
|
# Check the fingerprint is in the dict
|
|
assert "fingerprint" in config_dict
|
|
assert isinstance(config_dict["fingerprint"], dict)
|
|
assert config_dict["fingerprint"]["metadata"] == {"version": "1.0"}
|
|
|
|
|
|
def test_security_config_from_dict():
|
|
"""Test creating SecurityConfig from dictionary."""
|
|
# Create a fingerprint dict
|
|
fingerprint_dict = {
|
|
"uuid_str": "b723c6ff-95de-5e87-860b-467b72282bd8",
|
|
"created_at": datetime.now().isoformat(),
|
|
"metadata": {"version": "1.0"}
|
|
}
|
|
|
|
# Create a config dict with just the fingerprint
|
|
config_dict = {
|
|
"fingerprint": fingerprint_dict
|
|
}
|
|
|
|
# Create config manually since from_dict has a specific implementation
|
|
config = SecurityConfig()
|
|
|
|
# Set the fingerprint manually from the dict
|
|
fingerprint = Fingerprint.from_dict(fingerprint_dict)
|
|
config.fingerprint = fingerprint
|
|
|
|
# Check fingerprint was properly set
|
|
assert config.fingerprint is not None
|
|
assert isinstance(config.fingerprint, Fingerprint)
|
|
assert config.fingerprint.uuid_str == fingerprint_dict["uuid_str"]
|
|
assert config.fingerprint.metadata == fingerprint_dict["metadata"]
|
|
|
|
|
|
def test_security_config_json_serialization():
|
|
"""Test that SecurityConfig can be JSON serialized and deserialized."""
|
|
# Create a config with fingerprint metadata
|
|
config = SecurityConfig()
|
|
config.fingerprint.metadata = {"version": "1.0"}
|
|
|
|
# Convert to dict and then JSON
|
|
config_dict = config.to_dict()
|
|
|
|
# Make sure fingerprint is properly converted to dict
|
|
assert isinstance(config_dict["fingerprint"], dict)
|
|
|
|
# Now it should be JSON serializable
|
|
json_str = json.dumps(config_dict)
|
|
|
|
# Should be able to parse back to dict
|
|
parsed_dict = json.loads(json_str)
|
|
|
|
# Check fingerprint values match
|
|
assert parsed_dict["fingerprint"]["metadata"] == {"version": "1.0"}
|
|
|
|
# Create a new config manually
|
|
new_config = SecurityConfig()
|
|
|
|
# Set the fingerprint from the parsed data
|
|
fingerprint_data = parsed_dict["fingerprint"]
|
|
new_fingerprint = Fingerprint.from_dict(fingerprint_data)
|
|
new_config.fingerprint = new_fingerprint
|
|
|
|
# Check the new config has the same fingerprint metadata
|
|
assert new_config.fingerprint.metadata == {"version": "1.0"} |