import unittest from unittest.mock import Mock, patch from server.services.move_trace import MoveTrace class TestMoveTrace(unittest.TestCase): def test_snapshot_is_independent_and_stage_survives_exception(self): trace = MoveTrace('test-game', 1) with self.assertRaises(ValueError): with trace.stage('test'): raise ValueError() snapshot = trace.snapshot() snapshot['test_ms'] = -1 self.assertGreaterEqual(trace.snapshot()['test_ms'], 0) def test_timeout_logged_even_when_sampling_disabled(self): trace = MoveTrace('test-game', 2) trace.set(timed_out=True) logger = Mock() with patch.dict('os.environ', {'MOVE_TRACE_SAMPLE_EVERY':'0'}): trace.log(logger) logger.info.assert_called_once() self.assertIn(trace.id, logger.info.call_args.args[1]) def test_fast_requests_not_logged_when_disabled(self): trace = MoveTrace('test-game', 2) logger = Mock() with patch.dict('os.environ', {'MOVE_TRACE_SAMPLE_EVERY':'0'}): trace.log(logger) logger.info.assert_not_called()