77 NodeMovingEvent ,
88 NodeMigratingEvent ,
99 NodeMigratedEvent ,
10+ NodeFailingOverEvent ,
11+ NodeFailedOverEvent ,
1012 MaintenanceEventsConfig ,
1113 MaintenanceEventPoolHandler ,
1214 MaintenanceEventConnectionHandler ,
15+ MaintenanceState ,
1316)
1417
1518
@@ -281,6 +284,84 @@ def test_equality_and_hash(self):
281284 assert hash (event1 ) != hash (event3 )
282285
283286
287+ class TestNodeFailingOverEvent :
288+ """Test the NodeFailingOverEvent class."""
289+
290+ def test_init (self ):
291+ """Test NodeFailingOverEvent initialization."""
292+ with patch ("time.monotonic" , return_value = 1000 ):
293+ event = NodeFailingOverEvent (id = 1 , ttl = 5 )
294+ assert event .id == 1
295+ assert event .ttl == 5
296+ assert event .creation_time == 1000
297+
298+ def test_repr (self ):
299+ """Test NodeFailingOverEvent string representation."""
300+ with patch ("time.monotonic" , return_value = 1000 ):
301+ event = NodeFailingOverEvent (id = 1 , ttl = 5 )
302+
303+ with patch ("time.monotonic" , return_value = 1002 ): # 2 seconds later
304+ repr_str = repr (event )
305+ assert "NodeFailingOverEvent" in repr_str
306+ assert "id=1" in repr_str
307+ assert "ttl=5" in repr_str
308+ assert "remaining=3.0s" in repr_str
309+ assert "expired=False" in repr_str
310+
311+ def test_equality_and_hash (self ):
312+ """Test equality and hash for NodeFailingOverEvent."""
313+ event1 = NodeFailingOverEvent (id = 1 , ttl = 5 )
314+ event2 = NodeFailingOverEvent (id = 1 , ttl = 10 ) # Same id, different ttl
315+ event3 = NodeFailingOverEvent (id = 2 , ttl = 5 ) # Different id
316+
317+ assert event1 == event2
318+ assert event1 != event3
319+ assert hash (event1 ) == hash (event2 )
320+ assert hash (event1 ) != hash (event3 )
321+
322+
323+ class TestNodeFailedOverEvent :
324+ """Test the NodeFailedOverEvent class."""
325+
326+ def test_init (self ):
327+ """Test NodeFailedOverEvent initialization."""
328+ with patch ("time.monotonic" , return_value = 1000 ):
329+ event = NodeFailedOverEvent (id = 1 )
330+ assert event .id == 1
331+ assert event .ttl == NodeFailedOverEvent .DEFAULT_TTL
332+ assert event .creation_time == 1000
333+
334+ def test_default_ttl (self ):
335+ """Test that DEFAULT_TTL is used correctly."""
336+ assert NodeFailedOverEvent .DEFAULT_TTL == 5
337+ event = NodeFailedOverEvent (id = 1 )
338+ assert event .ttl == 5
339+
340+ def test_repr (self ):
341+ """Test NodeFailedOverEvent string representation."""
342+ with patch ("time.monotonic" , return_value = 1000 ):
343+ event = NodeFailedOverEvent (id = 1 )
344+
345+ with patch ("time.monotonic" , return_value = 1001 ): # 1 second later
346+ repr_str = repr (event )
347+ assert "NodeFailedOverEvent" in repr_str
348+ assert "id=1" in repr_str
349+ assert "ttl=5" in repr_str
350+ assert "remaining=4.0s" in repr_str
351+ assert "expired=False" in repr_str
352+
353+ def test_equality_and_hash (self ):
354+ """Test equality and hash for NodeFailedOverEvent."""
355+ event1 = NodeFailedOverEvent (id = 1 )
356+ event2 = NodeFailedOverEvent (id = 1 ) # Same id
357+ event3 = NodeFailedOverEvent (id = 2 ) # Different id
358+
359+ assert event1 == event2
360+ assert event1 != event3
361+ assert hash (event1 ) == hash (event2 )
362+ assert hash (event1 ) != hash (event3 )
363+
364+
284365class TestMaintenanceEventsConfig :
285366 """Test the MaintenanceEventsConfig class."""
286367
@@ -477,19 +558,41 @@ def test_handle_event_migrating(self):
477558 """Test handling of NodeMigratingEvent."""
478559 event = NodeMigratingEvent (id = 1 , ttl = 5 )
479560
480- with patch .object (self .handler , "handle_migrating_event" ) as mock_handle :
561+ with patch .object (
562+ self .handler , "handle_maintenance_start_event"
563+ ) as mock_handle :
481564 self .handler .handle_event (event )
482- mock_handle .assert_called_once_with (event )
565+ mock_handle .assert_called_once_with (MaintenanceState . MIGRATING )
483566
484567 def test_handle_event_migrated (self ):
485568 """Test handling of NodeMigratedEvent."""
486569 event = NodeMigratedEvent (id = 1 )
487570
488571 with patch .object (
489- self .handler , "handle_migration_completed_event "
572+ self .handler , "handle_maintenance_completed_event "
490573 ) as mock_handle :
491574 self .handler .handle_event (event )
492- mock_handle .assert_called_once_with (event )
575+ mock_handle .assert_called_once_with ()
576+
577+ def test_handle_event_failing_over (self ):
578+ """Test handling of NodeFailingOverEvent."""
579+ event = NodeFailingOverEvent (id = 1 , ttl = 5 )
580+
581+ with patch .object (
582+ self .handler , "handle_maintenance_start_event"
583+ ) as mock_handle :
584+ self .handler .handle_event (event )
585+ mock_handle .assert_called_once_with (MaintenanceState .FAILING_OVER )
586+
587+ def test_handle_event_failed_over (self ):
588+ """Test handling of NodeFailedOverEvent."""
589+ event = NodeFailedOverEvent (id = 1 )
590+
591+ with patch .object (
592+ self .handler , "handle_maintenance_completed_event"
593+ ) as mock_handle :
594+ self .handler .handle_event (event )
595+ mock_handle .assert_called_once_with ()
493596
494597 def test_handle_event_unknown_type (self ):
495598 """Test handling of unknown event type."""
@@ -500,43 +603,71 @@ def test_handle_event_unknown_type(self):
500603 result = self .handler .handle_event (event )
501604 assert result is None
502605
503- def test_handle_migrating_event_disabled (self ):
504- """Test migrating event handling when relax timeouts are disabled."""
606+ def test_handle_maintenance_start_event_disabled (self ):
607+ """Test maintenance start event handling when relax timeouts are disabled."""
505608 config = MaintenanceEventsConfig (relax_timeout = - 1 )
506609 handler = MaintenanceEventConnectionHandler (self .mock_connection , config )
507- event = NodeMigratingEvent (id = 1 , ttl = 5 )
508610
509- result = handler .handle_migrating_event ( event )
611+ result = handler .handle_maintenance_start_event ( MaintenanceState . MIGRATING )
510612 assert result is None
511613 self .mock_connection .update_current_socket_timeout .assert_not_called ()
512614
513- def test_handle_migrating_event_success (self ):
514- """Test successful migrating event handling."""
515- event = NodeMigratingEvent ( id = 1 , ttl = 5 )
615+ def test_handle_maintenance_start_event_moving_state (self ):
616+ """Test maintenance start event handling when connection is in MOVING state ."""
617+ self . mock_connection . maintenance_state = MaintenanceState . MOVING
516618
517- self .handler .handle_migrating_event (event )
619+ result = self .handler .handle_maintenance_start_event (MaintenanceState .MIGRATING )
620+ assert result is None
621+ self .mock_connection .update_current_socket_timeout .assert_not_called ()
518622
623+ def test_handle_maintenance_start_event_migrating_success (self ):
624+ """Test successful maintenance start event handling for migrating."""
625+ self .mock_connection .maintenance_state = MaintenanceState .NONE
626+
627+ self .handler .handle_maintenance_start_event (MaintenanceState .MIGRATING )
628+
629+ assert self .mock_connection .maintenance_state == MaintenanceState .MIGRATING
519630 self .mock_connection .update_current_socket_timeout .assert_called_once_with (20 )
520631 self .mock_connection .set_tmp_settings .assert_called_once_with (
521632 tmp_relax_timeout = 20
522633 )
523634
524- def test_handle_migration_completed_event_disabled (self ):
525- """Test migration completed event handling when relax timeouts are disabled."""
635+ def test_handle_maintenance_start_event_failing_over_success (self ):
636+ """Test successful maintenance start event handling for failing over."""
637+ self .mock_connection .maintenance_state = MaintenanceState .NONE
638+
639+ self .handler .handle_maintenance_start_event (MaintenanceState .FAILING_OVER )
640+
641+ assert self .mock_connection .maintenance_state == MaintenanceState .FAILING_OVER
642+ self .mock_connection .update_current_socket_timeout .assert_called_once_with (20 )
643+ self .mock_connection .set_tmp_settings .assert_called_once_with (
644+ tmp_relax_timeout = 20
645+ )
646+
647+ def test_handle_maintenance_completed_event_disabled (self ):
648+ """Test maintenance completed event handling when relax timeouts are disabled."""
526649 config = MaintenanceEventsConfig (relax_timeout = - 1 )
527650 handler = MaintenanceEventConnectionHandler (self .mock_connection , config )
528- event = NodeMigratedEvent (id = 1 )
529651
530- result = handler .handle_migration_completed_event ( event )
652+ result = handler .handle_maintenance_completed_event ( )
531653 assert result is None
532654 self .mock_connection .update_current_socket_timeout .assert_not_called ()
533655
534- def test_handle_migration_completed_event_success (self ):
535- """Test successful migration completed event handling."""
536- event = NodeMigratedEvent (id = 1 )
656+ def test_handle_maintenance_completed_event_moving_state (self ):
657+ """Test maintenance completed event handling when connection is in MOVING state."""
658+ self .mock_connection .maintenance_state = MaintenanceState .MOVING
659+
660+ result = self .handler .handle_maintenance_completed_event ()
661+ assert result is None
662+ self .mock_connection .update_current_socket_timeout .assert_not_called ()
663+
664+ def test_handle_maintenance_completed_event_success (self ):
665+ """Test successful maintenance completed event handling."""
666+ self .mock_connection .maintenance_state = MaintenanceState .MIGRATING
537667
538- self .handler .handle_migration_completed_event ( event )
668+ self .handler .handle_maintenance_completed_event ( )
539669
670+ assert self .mock_connection .maintenance_state == MaintenanceState .NONE
540671 self .mock_connection .update_current_socket_timeout .assert_called_once_with (- 1 )
541672 self .mock_connection .reset_tmp_settings .assert_called_once_with (
542673 reset_relax_timeout = True
0 commit comments