| 166 | |
| 167 | #[tokio::test] |
| 168 | async fn streaming_partial_then_final() { |
| 169 | let tracker = RequestTracker::new(); |
| 170 | let mut rx = tracker.register(RequestId::new(10)); |
| 171 | |
| 172 | assert!(tracker.complete(make_partial(10, "chunk1"))); |
| 173 | assert_eq!(tracker.in_flight(), 1); |
| 174 | assert!(tracker.complete(make_partial(10, "chunk2"))); |
| 175 | assert_eq!(tracker.in_flight(), 1); |
| 176 | |
| 177 | assert!(tracker.complete(make_response(10))); |
| 178 | assert_eq!(tracker.in_flight(), 0); |
| 179 | |
| 180 | let r1 = rx.recv().await.unwrap(); |
| 181 | assert!(r1.partial); |
| 182 | let r2 = rx.recv().await.unwrap(); |
| 183 | assert!(r2.partial); |
| 184 | let r3 = rx.recv().await.unwrap(); |
| 185 | assert!(!r3.partial); |
| 186 | } |
| 187 | |
| 188 | #[test] |
| 189 | fn full_channel_signals_backpressure() { |