Skip to content

Commit 7c23878

Browse files
committed
Simplify tests
1 parent 7c41b50 commit 7c23878

File tree

3 files changed

+36
-87
lines changed

3 files changed

+36
-87
lines changed

src/aiperf/timing/fixed_schedule_strategy.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ def __init__(
4040
# NOTE: This all needs to be set before the super call, because the base class will call
4141
# _setup_profiling_phase_config() which uses it to set the total expected requests.
4242

43-
# Reconstruct the full schedule from first_turn_timestamp and turn_delays
43+
# Reconstruct the full schedule from the first turn timestamps
4444
self._schedule: list[tuple[int | float, str]] = []
4545
for conversation in dataset_metadata.conversations:
4646
if conversation.turns[0].timestamp_ms is not None:
47-
# Add first turn
47+
# Add first turn only, as the credit is for the whole conversation
4848
self._schedule.append(
4949
(conversation.turns[0].timestamp_ms, conversation.conversation_id)
5050
)

src/aiperf/timing/timing_manager.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,11 @@ async def _on_dataset_configured_notification(
8989
self, message: DatasetConfiguredNotification
9090
) -> None:
9191
"""Handle the dataset configured notification."""
92-
self.debug(f"Received dataset configured notification: {message}")
92+
self.debug(
93+
lambda: f"Received dataset configured notification: {len(message.metadata.conversations)} conversations, "
94+
f"{message.metadata.sampling_strategy.value} sampling strategy"
95+
)
96+
9397
self._dataset_metadata = message.metadata
9498
self._dataset_configured_event.set()
9599

tests/unit/timing/test_benchmark_duration.py

Lines changed: 29 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,17 @@ def mixed_config(
6666
)
6767

6868

69+
def create_strategy(
70+
config: TimingManagerConfig,
71+
mock_credit_manager: MockCreditManager,
72+
) -> RequestRateStrategy:
73+
"""Create a RequestRateStrategy with mock dataset metadata based on config."""
74+
dataset_metadata = create_mock_dataset_metadata(
75+
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
76+
)
77+
return RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
78+
79+
6980
class TestBenchmarkDurationConfiguration:
7081
"""Test configuration validation and behavior of benchmark duration."""
7182

@@ -207,11 +218,7 @@ async def test_strategy_uses_duration_for_profiling_phase(
207218
"""Test that RequestRateStrategy respects benchmark duration."""
208219
config = benchmark_duration_config(benchmark_duration=2.0)
209220

210-
# Create strategy and check profiling phase config
211-
dataset_metadata = create_mock_dataset_metadata(
212-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
213-
)
214-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
221+
strategy = create_strategy(config, mock_credit_manager)
215222

216223
# Check that the profiling phase is configured correctly
217224
assert len(strategy.ordered_phase_configs) > 0
@@ -228,11 +235,7 @@ async def test_strategy_ignores_request_count_when_duration_set(
228235
):
229236
"""Test that request count is ignored when duration is specified."""
230237
config = mixed_config(request_count=50, benchmark_duration=1.5)
231-
232-
dataset_metadata = create_mock_dataset_metadata(
233-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
234-
)
235-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
238+
strategy = create_strategy(config, mock_credit_manager)
236239

237240
profiling_config = strategy.ordered_phase_configs[-1]
238241

@@ -245,11 +248,7 @@ async def test_strategy_fallback_to_request_count(
245248
):
246249
"""Test that strategy falls back to request count when no duration."""
247250
config = mixed_config(request_count=25, benchmark_duration=None)
248-
249-
dataset_metadata = create_mock_dataset_metadata(
250-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
251-
)
252-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
251+
strategy = create_strategy(config, mock_credit_manager)
253252

254253
profiling_config = strategy.ordered_phase_configs[-1]
255254

@@ -264,11 +263,7 @@ async def test_strategy_with_warmup_and_duration(
264263
config = benchmark_duration_config(
265264
benchmark_duration=4.0, warmup_request_count=10
266265
)
267-
268-
dataset_metadata = create_mock_dataset_metadata(
269-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
270-
)
271-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
266+
strategy = create_strategy(config, mock_credit_manager)
272267

273268
# Should have warmup and profiling phases
274269
assert len(strategy.ordered_phase_configs) == 2
@@ -294,11 +289,7 @@ async def test_strategy_with_duration_and_concurrency(
294289
):
295290
"""Test strategy with duration and concurrency settings."""
296291
config = benchmark_duration_config(benchmark_duration=3.0, concurrency=5)
297-
298-
dataset_metadata = create_mock_dataset_metadata(
299-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
300-
)
301-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
292+
strategy = create_strategy(config, mock_credit_manager)
302293

303294
assert config.benchmark_duration == 3.0
304295
assert config.concurrency == 5
@@ -335,11 +326,7 @@ async def test_various_duration_warmup_combinations(
335326
config = benchmark_duration_config(
336327
benchmark_duration=duration, warmup_request_count=warmup_count
337328
)
338-
339-
dataset_metadata = create_mock_dataset_metadata(
340-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
341-
)
342-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
329+
strategy = create_strategy(config, mock_credit_manager)
343330

344331
# Verify configuration is correct
345332
assert config.benchmark_duration == duration
@@ -438,10 +425,7 @@ async def test_profiling_phase_setup_with_duration(
438425
):
439426
"""Test profiling phase setup when duration is specified."""
440427
config = benchmark_duration_config(benchmark_duration=8.0)
441-
dataset_metadata = create_mock_dataset_metadata(
442-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
443-
)
444-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
428+
strategy = create_strategy(config, mock_credit_manager)
445429

446430
# Find the profiling phase config
447431
profiling_config = next(
@@ -462,10 +446,7 @@ async def test_profiling_phase_setup_without_duration(
462446
):
463447
"""Test profiling phase setup when duration is not specified."""
464448
config = mixed_config(request_count=40, benchmark_duration=None)
465-
dataset_metadata = create_mock_dataset_metadata(
466-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
467-
)
468-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
449+
strategy = create_strategy(config, mock_credit_manager)
469450

470451
# Find the profiling phase config
471452
profiling_config = next(
@@ -488,10 +469,7 @@ async def test_warmup_phase_unaffected_by_duration(
488469
config = benchmark_duration_config(
489470
benchmark_duration=12.0, warmup_request_count=15
490471
)
491-
dataset_metadata = create_mock_dataset_metadata(
492-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
493-
)
494-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
472+
strategy = create_strategy(config, mock_credit_manager)
495473

496474
# Find the warmup phase config
497475
warmup_config = next(
@@ -646,10 +624,7 @@ async def test_force_completion_when_timeout_triggered(self, time_traveler):
646624
# Create a time-based phase that has already exceeded duration
647625
config = benchmark_duration_config(benchmark_duration=1.0)
648626
mock_credit_manager = MockCreditManager(time_traveler=time_traveler)
649-
dataset_metadata = create_mock_dataset_metadata(
650-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
651-
)
652-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
627+
strategy = create_strategy(config, mock_credit_manager)
653628

654629
# Create a phase stats that would normally have in-flight requests
655630
phase_stats = CreditPhaseStats(
@@ -686,10 +661,7 @@ async def test_wait_for_phase_completion_with_timeout(self, time_traveler):
686661
"""Test that _wait_for_phase_completion respects duration timeout."""
687662
config = benchmark_duration_config(benchmark_duration=2.0)
688663
mock_credit_manager = MockCreditManager(time_traveler=time_traveler)
689-
dataset_metadata = create_mock_dataset_metadata(
690-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
691-
)
692-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
664+
strategy = create_strategy(config, mock_credit_manager)
693665

694666
# Create a time-based phase that is close to expiring
695667
start_time = time_traveler.time_ns()
@@ -729,10 +701,7 @@ async def test_wait_for_phase_completion_without_timeout_for_request_count(self)
729701
mock_credit_manager = MockCreditManager(
730702
time_traveler=None
731703
) # No time manipulation needed
732-
dataset_metadata = create_mock_dataset_metadata(
733-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
734-
)
735-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
704+
strategy = create_strategy(config, mock_credit_manager)
736705

737706
# Create a request-count-based phase
738707
phase_stats = CreditPhaseStats(
@@ -836,11 +805,7 @@ async def test_grace_period_with_strategy(
836805
config = benchmark_duration_config(
837806
benchmark_duration=2.0, benchmark_grace_period=15.0
838807
)
839-
840-
dataset_metadata = create_mock_dataset_metadata(
841-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
842-
)
843-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
808+
strategy = create_strategy(config, mock_credit_manager)
844809

845810
assert strategy.config.benchmark_grace_period == 15.0
846811
assert strategy.config.benchmark_duration == 2.0
@@ -853,11 +818,7 @@ async def test_grace_period_integration_with_duration(
853818
benchmark_duration=1.0, # Short duration for testing
854819
benchmark_grace_period=5.0,
855820
)
856-
857-
dataset_metadata = create_mock_dataset_metadata(
858-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
859-
)
860-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
821+
strategy = create_strategy(config, mock_credit_manager)
861822

862823
# Should have profiling phase with duration configuration
863824
profiling_config = strategy.ordered_phase_configs[-1]
@@ -879,11 +840,7 @@ async def test_grace_period_with_quick_completion(
879840
config = benchmark_duration_config(
880841
benchmark_duration=1.0, benchmark_grace_period=5.0
881842
)
882-
883-
dataset_metadata = create_mock_dataset_metadata(
884-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
885-
)
886-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
843+
strategy = create_strategy(config, mock_credit_manager)
887844

888845
# Create a profiling phase that completes quickly
889846
phase_stats = CreditPhaseStats(
@@ -912,11 +869,7 @@ async def test_grace_period_timeout_with_in_flight_requests(
912869
config = benchmark_duration_config(
913870
benchmark_duration=1.0, benchmark_grace_period=2.0
914871
)
915-
916-
dataset_metadata = create_mock_dataset_metadata(
917-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
918-
)
919-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
872+
strategy = create_strategy(config, mock_credit_manager)
920873

921874
# Create a profiling phase with in-flight requests
922875
phase_stats = CreditPhaseStats(
@@ -959,11 +912,7 @@ async def test_zero_grace_period_immediate_completion(
959912
config = benchmark_duration_config(
960913
benchmark_duration=1.0, benchmark_grace_period=0.0
961914
)
962-
963-
dataset_metadata = create_mock_dataset_metadata(
964-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
965-
)
966-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
915+
strategy = create_strategy(config, mock_credit_manager)
967916

968917
# Create a profiling phase with in-flight requests
969918
phase_stats = CreditPhaseStats(
@@ -993,11 +942,7 @@ async def test_grace_period_completion_during_grace_period(
993942
config = benchmark_duration_config(
994943
benchmark_duration=1.0, benchmark_grace_period=5.0
995944
)
996-
997-
dataset_metadata = create_mock_dataset_metadata(
998-
conversation_ids=[f"conv{i}" for i in range(config.request_count or 10)]
999-
)
1000-
strategy = RequestRateStrategy(config, mock_credit_manager, dataset_metadata)
945+
strategy = create_strategy(config, mock_credit_manager)
1001946

1002947
# Create a profiling phase with in-flight requests
1003948
phase_stats = CreditPhaseStats(

0 commit comments

Comments
 (0)