@@ -27,51 +27,50 @@ def container_ui(mock_ecs_client, mock_task_service):
2727 return ContainerUI (container_service )
2828
2929
30- def test_show_container_logs_success (container_ui ):
31- """Test displaying container logs successfully."""
32- log_config = {"log_group" : "test-log-group" , "log_stream" : "test-stream" }
33- events = [
34- {"timestamp" : 1234567890000 , "message" : "Test log message 1" },
35- {"timestamp" : 1234567891000 , "message" : "Test log message 2" },
36- ]
37-
38- container_ui .container_service .get_log_config = Mock (return_value = log_config )
39- container_ui .container_service .get_container_logs = Mock (return_value = events )
40-
41- container_ui .show_container_logs ("test-cluster" , "task-arn" , "web-container" , 50 )
42-
43- container_ui .container_service .get_log_config .assert_called_once_with ("test-cluster" , "task-arn" , "web-container" )
44- container_ui .container_service .get_container_logs .assert_called_once_with ("test-log-group" , "test-stream" , 50 )
45-
46-
4730def test_show_logs_live_tail_success (container_ui ):
48- """Test displaying live tail container logs successfully."""
31+ """Test displaying recent logs then streaming live tail container logs successfully."""
4932 log_config = {"log_group" : "test-log-group" , "log_stream" : "test-stream" }
50- events = [
33+ recent_events = [
34+ {"timestamp" : 1234567888000 , "message" : "Recent log message 1" },
35+ {"timestamp" : 1234567889000 , "message" : "Recent log message 2" },
36+ ]
37+ live_events = [
5138 {"eventId" : "event1" , "timestamp" : 1234567890000 , "message" : "Live tail log message 1" },
5239 {"eventId" : "event2" , "timestamp" : 1234567891000 , "message" : "Live tail log message 2" },
53- {"eventId" : "event3" , "timestamp" : 1234567892000 , "message" : "Live tail log message 3" },
54- {"eventId" : "event4" , "timestamp" : 1234567893000 , "message" : "Live tail log message 4" },
5540 ]
5641
5742 container_ui .container_service .get_log_config = Mock (return_value = log_config )
58- container_ui .container_service .get_live_container_logs_tail = Mock (return_value = iter (events ))
43+ container_ui .container_service .get_container_logs = Mock (return_value = recent_events )
44+ container_ui .container_service .get_live_container_logs_tail = Mock (return_value = iter (live_events ))
5945
6046 with patch ("rich.console.Console.print" ) as mock_console_print :
6147 container_ui .show_logs_live_tail ("test-cluster" , "task-arn" , "web-container" )
6248
6349 container_ui .container_service .get_log_config .assert_called_once_with ("test-cluster" , "task-arn" , "web-container" )
50+ container_ui .container_service .get_container_logs .assert_called_once_with ("test-log-group" , "test-stream" , 50 )
6451 container_ui .container_service .get_live_container_logs_tail .assert_called_once_with ("test-log-group" , "test-stream" )
6552
6653 expected_calls = [
67- call ("\n 🚀 Tailing logs for container 'web-container':" , style = "bold cyan" ),
68- call ("log group: test-log-group" , style = "dim" ),
69- call ("log stream: test-stream" , style = "dim" ),
70- call ("Press Ctrl+C to stop." , style = "dim" ),
54+ call ("\n Last 2 log entries for container 'web-container':" , style = "bold cyan" ),
55+ call ("Log group: test-log-group" , style = "dim" ),
56+ call ("Log stream: test-stream" , style = "dim" ),
7157 call ("=" * 80 , style = "dim" ),
7258 ]
7359
74- for event in events :
60+ for event in recent_events :
61+ timestamp = cast (int , event ["timestamp" ])
62+ dt = datetime .fromtimestamp (timestamp / 1000 )
63+ message = cast (str , event ["message" ]).rstrip ()
64+ expected_calls .append (call (f"[{ dt .strftime ('%H:%M:%S' )} ] { message } " ))
65+
66+ expected_calls .extend (
67+ [
68+ call ("\n Now tailing new logs (Press Ctrl+C to stop)..." , style = "bold cyan" ),
69+ call ("=" * 80 , style = "dim" ),
70+ ]
71+ )
72+
73+ for event in live_events :
7574 timestamp = cast (int , event ["timestamp" ])
7675 dt = datetime .fromtimestamp (timestamp / 1000 )
7776 message = cast (str , event ["message" ]).rstrip ()
@@ -84,12 +83,16 @@ def test_show_logs_live_tail_success(container_ui):
8483def test_show_logs_live_tail_keyboard_interrupt (container_ui ):
8584 """Test handling keyboard interruptions with Ctrl+C during live logs tail."""
8685 log_config = {"log_group" : "test-log-group" , "log_stream" : "test-stream" }
86+ recent_events = [
87+ {"timestamp" : 1234567888000 , "message" : "Recent log message 1" },
88+ ]
8789
8890 def mock_generator () -> Generator [dict [str , Any ], None , None ]:
8991 yield {"eventId" : "event1" , "timestamp" : 1234567890000 , "message" : "Live tail log message 1" }
9092 raise KeyboardInterrupt ()
9193
9294 container_ui .container_service .get_log_config = Mock (return_value = log_config )
95+ container_ui .container_service .get_container_logs = Mock (return_value = recent_events )
9396 container_ui .container_service .get_live_container_logs_tail = Mock (return_value = mock_generator ())
9497
9598 with patch ("rich.console.Console.print" ) as mock_console_print :
@@ -113,30 +116,6 @@ def test_show_logs_live_tail_no_config(container_ui):
113116 mock_console_print .assert_any_call ("Available log groups:" , style = "dim" )
114117
115118
116- def test_show_container_logs_no_config (container_ui ):
117- """Test displaying container logs with no log configuration."""
118- container_ui .container_service .get_log_config = Mock (return_value = None )
119- container_ui .container_service .list_log_groups = Mock (return_value = ["group1" , "group2" ])
120-
121- container_ui .show_container_logs ("test-cluster" , "task-arn" , "web-container" , 50 )
122-
123- container_ui .container_service .get_log_config .assert_called_once_with ("test-cluster" , "task-arn" , "web-container" )
124- container_ui .container_service .list_log_groups .assert_called_once_with ("test-cluster" , "web-container" )
125-
126-
127- def test_show_container_logs_no_events (container_ui ):
128- """Test displaying container logs with no events."""
129- log_config = {"log_group" : "test-log-group" , "log_stream" : "test-stream" }
130-
131- container_ui .container_service .get_log_config = Mock (return_value = log_config )
132- container_ui .container_service .get_container_logs = Mock (return_value = [])
133-
134- container_ui .show_container_logs ("test-cluster" , "task-arn" , "web-container" , 50 )
135-
136- container_ui .container_service .get_log_config .assert_called_once_with ("test-cluster" , "task-arn" , "web-container" )
137- container_ui .container_service .get_container_logs .assert_called_once_with ("test-log-group" , "test-stream" , 50 )
138-
139-
140119def test_show_container_environment_variables_success (container_ui ):
141120 """Test displaying container environment variables successfully."""
142121 context = {"container_definition" : {"environment" : [{"name" : "ENV_VAR" , "value" : "value" }]}}
0 commit comments