Skip to content

Commit 1295a18

Browse files
committed
test(live): assert weighted-capacity contract + fix ruff I001
- Multi-* termination tests conflated capacity_to_request (units) with physical machine count. Weighted templates legitimately fulfil target with fewer machines (e.g. one t3.medium weight=4 covers target=2). Replace strict len(machines) == capacity_to_request with the actual contract: fulfilled_units >= target_units. Preserve len(machines) >= 1 as observable side-effect check for downstream EC2 state assertions. - Drop stray blank line after imports in _capacity_helpers.py that tripped ruff I001 in CI-enforced lint. - Apply ruff format wraps to _target/_fallback ternaries and terminal status set literal.
1 parent 3a1f9ed commit 1295a18

5 files changed

Lines changed: 52 additions & 27 deletions

File tree

tests/providers/aws/live/_capacity_helpers.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040

4141
import pytest
4242

43-
4443
# Match the canonical "X/Y" partial-fulfilment pattern that ORB stamps on
4544
# partial messages (e.g. "Partially fulfilled: 2/4 instances",
4645
# "Instant fleet: 2/4 instance(s) running").

tests/providers/aws/live/test_multi_asg_termination.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -526,14 +526,21 @@ def test_multi_asg_termination(setup_multi_asg_templates):
526526

527527
time.sleep(5)
528528

529-
_final_status = status_response["requests"][0]["status"]
530-
machines = status_response["requests"][0]["machines"]
529+
# Verify desired capacity delivered. capacity_to_request is in *capacity
530+
# units*, not machine count: weighted templates (e.g. t3.medium weight=4)
531+
# legitimately fulfil target with fewer physical machines than units.
532+
# Contract: fulfilled_units >= target_units. machines>=1 is the
533+
# observable side-effect we still need for downstream EC2 state checks.
534+
_req = status_response["requests"][0]
535+
_final_status = _req["status"]
536+
machines = _req["machines"]
537+
_target = int(_req.get("target_units") or capacity_to_request)
538+
_fulfilled = int(_req.get("fulfilled_units") or len(machines))
531539
if _final_status == "complete":
532-
assert len(machines) == capacity_to_request, (
533-
f"status=complete but got {len(machines)}/{capacity_to_request} machines"
540+
assert _fulfilled >= _target, (
541+
f"status=complete but fulfilled_units={_fulfilled} < target_units={_target}"
534542
)
535-
else:
536-
assert len(machines) >= 1, f"status={_final_status!r} with zero machines"
543+
assert len(machines) >= 1, f"status={_final_status!r} with zero machines"
537544

538545
instance_ids = [
539546
machine.get("machineId") or machine.get("machine_id") for machine in machines

tests/providers/aws/live/test_multi_ec2_fleet_termination.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -548,16 +548,21 @@ def test_multi_ec2_fleet_termination(setup_multi_ec2_fleet_templates):
548548

549549
time.sleep(5)
550550

551-
# Verify instances are provisioned (tolerant of AWS capacity shortfall;
552-
# assert_terminal_ok above already enforced "some capacity delivered").
553-
_final_status = status_response["requests"][0]["status"]
554-
machines = status_response["requests"][0]["machines"]
551+
# Verify desired capacity delivered. capacity_to_request is in *capacity
552+
# units*, not machine count: weighted templates (e.g. t3.medium weight=4)
553+
# legitimately fulfil target with fewer physical machines than units.
554+
# Contract: fulfilled_units >= target_units. machines>=1 is the
555+
# observable side-effect we still need for downstream EC2 state checks.
556+
_req = status_response["requests"][0]
557+
_final_status = _req["status"]
558+
machines = _req["machines"]
559+
_target = int(_req.get("target_units") or capacity_to_request)
560+
_fulfilled = int(_req.get("fulfilled_units") or len(machines))
555561
if _final_status == "complete":
556-
assert len(machines) == capacity_to_request, (
557-
f"status=complete but got {len(machines)}/{capacity_to_request} machines"
562+
assert _fulfilled >= _target, (
563+
f"status=complete but fulfilled_units={_fulfilled} < target_units={_target}"
558564
)
559-
else:
560-
assert len(machines) >= 1, f"status={_final_status!r} with zero machines"
565+
assert len(machines) >= 1, f"status={_final_status!r} with zero machines"
561566

562567
instance_ids = [
563568
machine.get("machineId") or machine.get("machine_id") for machine in machines

tests/providers/aws/live/test_multi_resource_termination.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -563,14 +563,21 @@ def test_multi_resource_termination(setup_multi_resource_templates):
563563

564564
time.sleep(5)
565565

566-
_final_status = status_response["requests"][0]["status"]
567-
machines = status_response["requests"][0]["machines"]
566+
# Verify desired capacity delivered. capacity_to_request is in *capacity
567+
# units*, not machine count: weighted templates (e.g. t3.medium weight=4)
568+
# legitimately fulfil target with fewer physical machines than units.
569+
# Contract: fulfilled_units >= target_units. machines>=1 is the
570+
# observable side-effect we still need for downstream EC2 state checks.
571+
_req = status_response["requests"][0]
572+
_final_status = _req["status"]
573+
machines = _req["machines"]
574+
_target = int(_req.get("target_units") or capacity_to_request)
575+
_fulfilled = int(_req.get("fulfilled_units") or len(machines))
568576
if _final_status == "complete":
569-
assert len(machines) == capacity_to_request, (
570-
f"status=complete but got {len(machines)}/{capacity_to_request} machines"
577+
assert _fulfilled >= _target, (
578+
f"status=complete but fulfilled_units={_fulfilled} < target_units={_target}"
571579
)
572-
else:
573-
assert len(machines) >= 1, f"status={_final_status!r} with zero machines"
580+
assert len(machines) >= 1, f"status={_final_status!r} with zero machines"
574581

575582
instance_ids = [
576583
machine.get("machineId") or machine.get("machine_id") for machine in machines

tests/providers/aws/live/test_multi_spot_fleet_termination.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -532,14 +532,21 @@ def test_multi_spot_fleet_termination(setup_multi_spot_fleet_templates):
532532

533533
time.sleep(5)
534534

535-
_final_status = status_response["requests"][0]["status"]
536-
machines = status_response["requests"][0]["machines"]
535+
# Verify desired capacity delivered. capacity_to_request is in *capacity
536+
# units*, not machine count: weighted templates (e.g. t3.medium weight=4)
537+
# legitimately fulfil target with fewer physical machines than units.
538+
# Contract: fulfilled_units >= target_units. machines>=1 is the
539+
# observable side-effect we still need for downstream EC2 state checks.
540+
_req = status_response["requests"][0]
541+
_final_status = _req["status"]
542+
machines = _req["machines"]
543+
_target = int(_req.get("target_units") or capacity_to_request)
544+
_fulfilled = int(_req.get("fulfilled_units") or len(machines))
537545
if _final_status == "complete":
538-
assert len(machines) == capacity_to_request, (
539-
f"status=complete but got {len(machines)}/{capacity_to_request} machines"
546+
assert _fulfilled >= _target, (
547+
f"status=complete but fulfilled_units={_fulfilled} < target_units={_target}"
540548
)
541-
else:
542-
assert len(machines) >= 1, f"status={_final_status!r} with zero machines"
549+
assert len(machines) >= 1, f"status={_final_status!r} with zero machines"
543550

544551
instance_ids = [
545552
machine.get("machineId") or machine.get("machine_id") for machine in machines

0 commit comments

Comments
 (0)