Spaces:
Sleeping
Sleeping
| """Tests for Pydantic models.""" | |
| import pytest | |
| from pydantic import ValidationError | |
| from env.models import ( | |
| ActionType, CloudAction, CloudObservation, CloudResource, CloudReward, | |
| Environment, ResourceType, StepResult, | |
| ) | |
| def test_resource_type_enum(): | |
| assert ResourceType.ec2 == "ec2" | |
| assert ResourceType.s3 == "s3" | |
| def test_environment_enum(): | |
| assert Environment.prod == "prod" | |
| assert Environment.dev == "dev" | |
| def test_action_type_enum(): | |
| assert ActionType.rightsize_resource == "rightsize_resource" | |
| assert ActionType.skip_resource == "skip_resource" | |
| def test_cloud_resource_valid(): | |
| r = CloudResource( | |
| resource_id="res-test-001", | |
| resource_type=ResourceType.ec2, | |
| name="test-server", | |
| environment=Environment.dev, | |
| current_config={"instance_type": "t3.large"}, | |
| utilization={"cpu_percent": 10.0}, | |
| monthly_cost=60.74, | |
| ) | |
| assert r.resource_id == "res-test-001" | |
| assert r.is_critical is False | |
| assert r.dependencies == [] | |
| assert r.subnet is None | |
| def test_cloud_resource_all_fields(): | |
| r = CloudResource( | |
| resource_id="res-test-002", | |
| resource_type=ResourceType.rds, | |
| name="prod-db", | |
| environment=Environment.prod, | |
| current_config={"instance_type": "db.r5.large"}, | |
| utilization={"cpu_percent": 40.0}, | |
| monthly_cost=175.20, | |
| tags={"team": "data"}, | |
| has_backups=True, | |
| is_critical=True, | |
| dependencies=["res-test-001"], | |
| usage_pattern="always_on", | |
| subnet="subnet-prod-a", | |
| ) | |
| assert r.is_critical is True | |
| assert r.dependencies == ["res-test-001"] | |
| assert r.subnet == "subnet-prod-a" | |
| def test_cloud_action_valid(): | |
| a = CloudAction( | |
| action_type=ActionType.rightsize_resource, | |
| resource_id="res-test-001", | |
| new_config={"instance_type": "t3.small"}, | |
| reasoning="CPU too low", | |
| ) | |
| assert a.action_type == ActionType.rightsize_resource | |
| def test_cloud_action_minimal(): | |
| a = CloudAction( | |
| action_type=ActionType.skip_resource, | |
| resource_id="res-test-001", | |
| ) | |
| assert a.new_config is None | |
| assert a.reasoning == "" | |
| def test_cloud_observation(): | |
| obs = CloudObservation( | |
| task_id="test", | |
| goal="test goal", | |
| account_id="acc-1", | |
| resources=[], | |
| monthly_cost_current=100.0, | |
| monthly_cost_optimized=50.0, | |
| total_possible_savings=50.0, | |
| ) | |
| assert obs.step_number == 0 | |
| assert obs.last_action_error is None | |
| def test_cloud_reward_bounds(): | |
| r = CloudReward(value=0.5, cost_saved=100.0) | |
| assert r.value == 0.5 | |
| with pytest.raises(ValidationError): | |
| CloudReward(value=1.5) | |
| with pytest.raises(ValidationError): | |
| CloudReward(value=-0.1) | |
| def test_step_result(): | |
| obs = CloudObservation( | |
| task_id="test", | |
| goal="g", | |
| account_id="a", | |
| resources=[], | |
| monthly_cost_current=100.0, | |
| monthly_cost_optimized=50.0, | |
| total_possible_savings=50.0, | |
| ) | |
| sr = StepResult(observation=obs, reward=0.5, done=False, info={"test": True}) | |
| assert sr.reward == 0.5 | |
| assert sr.done is False | |