@@ -520,3 +520,91 @@ def test_carbon_tracker_offline_context_manager(
520520 self .assertEqual ("United States" , emissions_df ["country_name" ].values [0 ])
521521 self .assertEqual ("USA" , emissions_df ["country_iso_code" ].values [0 ])
522522 self .assertIsInstance (tracker .final_emissions , float )
523+
524+ @mock .patch ("codecarbon.emissions_tracker.logger" )
525+ def test_scheduler_warning_suppressed_when_stopped (
526+ self ,
527+ mock_logger ,
528+ mock_setup_intel_cli ,
529+ mock_log_values ,
530+ mocked_get_gpu_details ,
531+ mocked_env_cloud_details ,
532+ mocked_is_gpu_details_available ,
533+ ):
534+ """Test that scheduler warning is suppressed when scheduler is stopped."""
535+ with EmissionsTracker (
536+ output_dir = self .temp_path ,
537+ measure_power_secs = 1 , # Short interval for testing
538+ ) as tracker :
539+ # Stop the scheduler to simulate task mode or manual stopping
540+ tracker ._scheduler .stop ()
541+
542+ # Artificially set last measured time to simulate long delay
543+ import time
544+
545+ tracker ._last_measured_time = time .perf_counter () - 10 # 10 seconds ago
546+
547+ # Reset mock to clear any previous warning calls
548+ mock_logger .warning .reset_mock ()
549+
550+ # Call _measure_power_and_energy directly - this would normally trigger warning
551+ tracker ._measure_power_and_energy ()
552+
553+ # Verify that if warning was called, it wasn't the scheduler warning
554+ if mock_logger .warning .called :
555+ for call in mock_logger .warning .call_args_list :
556+ args , kwargs = call
557+ if (
558+ args
559+ and "Background scheduler didn't run for a long period"
560+ in str (args [0 ])
561+ ):
562+ self .fail (
563+ "Scheduler warning was called when it should have been suppressed"
564+ )
565+
566+ @mock .patch ("codecarbon.emissions_tracker.logger" )
567+ def test_scheduler_warning_shown_when_running (
568+ self ,
569+ mock_logger ,
570+ mock_setup_intel_cli ,
571+ mock_log_values ,
572+ mocked_get_gpu_details ,
573+ mocked_env_cloud_details ,
574+ mocked_is_gpu_details_available ,
575+ ):
576+ """Test that scheduler warning is shown when scheduler is running but delayed."""
577+ with EmissionsTracker (
578+ output_dir = self .temp_path ,
579+ measure_power_secs = 1 , # Short interval for testing
580+ ) as tracker :
581+ # Ensure scheduler is running (default state)
582+ self .assertFalse (tracker ._scheduler ._stopped )
583+
584+ # Artificially set last measured time to simulate long delay
585+ import time
586+
587+ tracker ._last_measured_time = time .perf_counter () - 10 # 10 seconds ago
588+
589+ # Reset mock to clear any previous warning calls
590+ mock_logger .warning .reset_mock ()
591+
592+ # Call _measure_power_and_energy directly - this should trigger warning
593+ tracker ._measure_power_and_energy ()
594+
595+ # Verify warning was logged since scheduler should be running
596+ scheduler_warning_found = False
597+ if mock_logger .warning .called :
598+ for call in mock_logger .warning .call_args_list :
599+ args , kwargs = call
600+ if (
601+ args
602+ and "Background scheduler didn't run for a long period"
603+ in str (args [0 ])
604+ ):
605+ scheduler_warning_found = True
606+ break
607+
608+ self .assertTrue (
609+ scheduler_warning_found , "Expected scheduler warning was not found"
610+ )
0 commit comments