MCPcopy Create free account
hub / github.com/dtormoen/tsk-tsk / test_run_task_container_interactive

Function test_run_task_container_interactive

src/docker/mod.rs:1106–1154  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1104
1105 #[tokio::test]
1106 async fn test_run_task_container_interactive() {
1107 // Test interactive mode with mock client
1108 let mock_client = Arc::new(TrackedDockerClient::default());
1109 let ctx = AppContext::builder().build();
1110 let manager = DockerManager::new(&ctx, mock_client.clone(), None);
1111
1112 let task = create_test_task(true);
1113 let agent = crate::agent::ClaudeAgent::with_tsk_env(ctx.tsk_env());
1114 let result = manager.run_task_container("tsk/base", &task, &agent).await;
1115
1116 // Interactive mode should succeed with mock client
1117 assert!(result.is_ok());
1118 let (output, task_result) = result.unwrap();
1119 // Interactive mode returns empty output and a success task result
1120 assert_eq!(output, "");
1121 assert!(task_result.success);
1122 assert_eq!(task_result.message, "Interactive session completed");
1123
1124 let create_calls = mock_client.create_container_calls.lock().unwrap();
1125 assert_eq!(create_calls.len(), 2); // One for proxy, one for task container
1126
1127 // Check task container config for interactive mode
1128 let (options, config) = &create_calls[1];
1129 assert_eq!(
1130 options.as_ref().unwrap().name,
1131 Some("tsk-interactive-test-task-id".to_string())
1132 );
1133
1134 // Check interactive-specific settings
1135 assert_eq!(config.attach_stdin, Some(true));
1136 assert_eq!(config.attach_stdout, Some(true));
1137 assert_eq!(config.attach_stderr, Some(true));
1138 assert_eq!(config.tty, Some(true));
1139 assert_eq!(config.open_stdin, Some(true));
1140
1141 // Check TSK environment variables are present in interactive mode too
1142 let env = config.env.as_ref().unwrap();
1143 assert!(env.contains(&"TSK_CONTAINER=1".to_string()));
1144 assert!(env.contains(&"TSK_TASK_ID=test-task-id".to_string()));
1145
1146 // Verify attach_container was called (indirectly through start_container_calls)
1147 let start_calls = mock_client.start_container_calls.lock().unwrap();
1148 assert_eq!(start_calls.len(), 2); // One for proxy, one for task container
1149
1150 // Verify cleanup happened
1151 let remove_calls = mock_client.remove_container_calls.lock().unwrap();
1152 assert_eq!(remove_calls.len(), 2); // Task container + proxy
1153 assert_eq!(remove_calls[0].0, "test-container-id-1");
1154 }
1155
1156 #[tokio::test]
1157 async fn test_run_task_container_non_zero_exit() {

Callers

nothing calls this directly

Calls 4

tsk_envMethod · 0.80
run_task_containerMethod · 0.80
create_test_taskFunction · 0.70
buildMethod · 0.45

Tested by

no test coverage detected