Skip to content

Commit 544c888

Browse files
committed
Fix MeasuredRequestTimings tests
Signed-off-by: Samuel Monson <[email protected]>
1 parent 272304c commit 544c888

File tree

1 file changed

+32
-23
lines changed

1 file changed

+32
-23
lines changed

tests/unit/scheduler/test_objects.py

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import inspect
44
import typing
55
from collections.abc import AsyncIterator
6-
from typing import Any, Optional, TypeVar, Union
6+
from typing import Any, Literal, Optional, TypeVar, Union
77

88
import pytest
99
from pydantic import ValidationError
@@ -25,6 +25,13 @@
2525
from guidellm.utils import StandardBaseModel
2626

2727

28+
@MeasuredRequestTimings.register("test_request_timings")
29+
class ConcreteMeasuredRequestTimings(MeasuredRequestTimings):
30+
"""Concrete test implementation of MeasuredRequestTimings for testing."""
31+
32+
timings_type: Literal["test_request_timings"] = "test_request_timings"
33+
34+
2835
def test_request_t():
2936
"""Validate that RequestT is a TypeVar usable for generics and isn't bound."""
3037
assert isinstance(RequestT, TypeVar)
@@ -400,19 +407,23 @@ class TestRequestTimings:
400407

401408
@pytest.fixture(
402409
params=[
403-
{},
410+
{"timings_type": "test_request_timings"},
404411
{
412+
"timings_type": "test_request_timings",
405413
"request_start": None,
406414
"request_end": None,
407415
},
408416
{
417+
"timings_type": "test_request_timings",
409418
"request_start": 1000.0,
410419
"request_end": 1100.0,
411420
},
412421
{
422+
"timings_type": "test_request_timings",
413423
"request_start": 1000.0,
414424
},
415425
{
426+
"timings_type": "test_request_timings",
416427
"request_start": 0.0,
417428
"request_end": 0.0,
418429
},
@@ -428,7 +439,7 @@ class TestRequestTimings:
428439
def valid_instances(self, request):
429440
"""Creates various valid configurations of MeasuredRequestTimings."""
430441
constructor_args = request.param
431-
instance = MeasuredRequestTimings(**constructor_args)
442+
instance = MeasuredRequestTimings.model_validate(constructor_args)
432443
return instance, constructor_args
433444

434445
@pytest.mark.smoke
@@ -446,7 +457,13 @@ def test_class_signatures(self):
446457
assert field_info.default is None
447458

448459
@pytest.mark.smoke
449-
def test_initialization(self, valid_instances):
460+
def test_initialization(self):
461+
"""Base class initialization should fail."""
462+
with pytest.raises(TypeError):
463+
MeasuredRequestTimings()
464+
465+
@pytest.mark.smoke
466+
def test_validation(self, valid_instances):
450467
"""Test initialization with valid configurations."""
451468
instance, constructor_args = valid_instances
452469
assert isinstance(instance, MeasuredRequestTimings)
@@ -467,9 +484,9 @@ def test_initialization(self, valid_instances):
467484
)
468485
def test_invalid_initialization(self, field, value):
469486
"""Test invalid initialization scenarios."""
470-
kwargs = {field: value}
487+
kwargs = {"timings_type": "test_request_timings", field: value}
471488
with pytest.raises(ValidationError):
472-
MeasuredRequestTimings(**kwargs)
489+
MeasuredRequestTimings.model_validate(kwargs)
473490

474491
@pytest.mark.smoke
475492
def test_marshalling(self, valid_instances):
@@ -533,6 +550,7 @@ class TestScheduledRequestInfo:
533550
"finalized": 2150.0,
534551
},
535552
"request_timings": {
553+
"timings_type": "test_request_timings",
536554
"request_start": 2060.0,
537555
"request_end": 2110.0,
538556
},
@@ -585,8 +603,8 @@ def valid_instances(self, request):
585603
**constructor_args["scheduler_timings"]
586604
)
587605
if "request_timings" in constructor_args:
588-
constructor_args["request_timings"] = MeasuredRequestTimings(
589-
**constructor_args["request_timings"]
606+
constructor_args["request_timings"] = MeasuredRequestTimings.model_validate(
607+
constructor_args["request_timings"]
590608
)
591609

592610
instance = ScheduledRequestInfo(**constructor_args)
@@ -596,7 +614,6 @@ def valid_instances(self, request):
596614
def test_class_signatures(self):
597615
"""Test ScheduledRequestInfo inheritance and type relationships."""
598616
assert issubclass(ScheduledRequestInfo, StandardBaseModel)
599-
assert issubclass(ScheduledRequestInfo, typing.Generic)
600617
assert hasattr(ScheduledRequestInfo, "model_dump")
601618
assert hasattr(ScheduledRequestInfo, "model_validate")
602619

@@ -606,18 +623,6 @@ def test_class_signatures(self):
606623
assert isinstance(ScheduledRequestInfo.started_at, property)
607624
assert isinstance(ScheduledRequestInfo.completed_at, property)
608625

609-
# Check that it's properly generic
610-
orig_bases = getattr(ScheduledRequestInfo, "__orig_bases__", ())
611-
generic_base = next(
612-
(
613-
base
614-
for base in orig_bases
615-
if hasattr(base, "__origin__") and base.__origin__ is typing.Generic
616-
),
617-
None,
618-
)
619-
assert generic_base is not None
620-
621626
# Check required fields
622627
fields = ScheduledRequestInfo.model_fields
623628
for key in self.CHECK_KEYS:
@@ -719,7 +724,9 @@ def test_started_at_property(self):
719724
scheduler_process_id=0,
720725
scheduler_start_time=1000.0,
721726
scheduler_timings=RequestSchedulerTimings(resolve_start=2000.0),
722-
request_timings=MeasuredRequestTimings(request_start=2100.0),
727+
request_timings=MeasuredRequestTimings.model_validate(
728+
{"timings_type": "test_request_timings", "request_start": 2100.0}
729+
),
723730
)
724731
assert instance.started_at == 2100.0
725732

@@ -755,7 +762,9 @@ def test_completed_at_property(self):
755762
scheduler_process_id=0,
756763
scheduler_start_time=1000.0,
757764
scheduler_timings=RequestSchedulerTimings(resolve_end=2000.0),
758-
request_timings=MeasuredRequestTimings(request_end=2100.0),
765+
request_timings=MeasuredRequestTimings.model_validate(
766+
{"timings_type": "test_request_timings", "request_end": 2100.0}
767+
),
759768
)
760769
assert instance.completed_at == 2100.0
761770

0 commit comments

Comments
 (0)