()
| 290 | |
| 291 | #[tokio::test] |
| 292 | async fn test_goodbye_and_continue() { |
| 293 | let mock = MockWorker::bind().await; |
| 294 | let addr = mock.addr(); |
| 295 | let worker = tokio::spawn(async move { mock.handle_one(None).await }); |
| 296 | |
| 297 | let (mut stream, _) = connect_and_handshake(addr, None).await; |
| 298 | |
| 299 | // First op |
| 300 | let tensor = make_f16_tensor(&[1, 64]); |
| 301 | Message::single_op("model.layers.0", &tensor, 0, 0) |
| 302 | .to_writer(&mut stream) |
| 303 | .await |
| 304 | .unwrap(); |
| 305 | let (_, resp) = Message::from_reader(&mut stream).await.unwrap(); |
| 306 | assert!(matches!(resp, Message::Tensor(_))); |
| 307 | |
| 308 | // Goodbye |
| 309 | Message::Goodbye.to_writer(&mut stream).await.unwrap(); |
| 310 | let (_, resp) = Message::from_reader(&mut stream).await.unwrap(); |
| 311 | assert!(matches!(resp, Message::WorkerInfo(_))); |
| 312 | |
| 313 | // Another op after goodbye (worker should still be alive) |
| 314 | Message::single_op("model.layers.0", &tensor, 1, 0) |
| 315 | .to_writer(&mut stream) |
| 316 | .await |
| 317 | .unwrap(); |
| 318 | let (_, resp) = Message::from_reader(&mut stream).await.unwrap(); |
| 319 | assert!(matches!(resp, Message::Tensor(_))); |
| 320 | |
| 321 | drop(stream); |
| 322 | let _ = worker.await; |
| 323 | } |
| 324 | |
| 325 | #[tokio::test] |
| 326 | async fn test_large_tensor_transfer() { |
nothing calls this directly
no test coverage detected