xref: /aosp_15_r20/external/crosvm/base_tokio/src/tube.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2024 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker #[cfg(test)]
6*bb4ee6a4SAndroid Build Coastguard Worker mod tests {
7*bb4ee6a4SAndroid Build Coastguard Worker     use base::Tube;
8*bb4ee6a4SAndroid Build Coastguard Worker 
9*bb4ee6a4SAndroid Build Coastguard Worker     use crate::TubeTokio;
10*bb4ee6a4SAndroid Build Coastguard Worker 
11*bb4ee6a4SAndroid Build Coastguard Worker     #[tokio::test]
recv_send()12*bb4ee6a4SAndroid Build Coastguard Worker     async fn recv_send() {
13*bb4ee6a4SAndroid Build Coastguard Worker         let (a, b) = Tube::pair().unwrap();
14*bb4ee6a4SAndroid Build Coastguard Worker         let mut b = TubeTokio::new(b).unwrap();
15*bb4ee6a4SAndroid Build Coastguard Worker 
16*bb4ee6a4SAndroid Build Coastguard Worker         let blocking_task = tokio::task::spawn_blocking(move || {
17*bb4ee6a4SAndroid Build Coastguard Worker             a.send(&5u8).unwrap();
18*bb4ee6a4SAndroid Build Coastguard Worker             a.recv::<u8>().unwrap()
19*bb4ee6a4SAndroid Build Coastguard Worker         });
20*bb4ee6a4SAndroid Build Coastguard Worker 
21*bb4ee6a4SAndroid Build Coastguard Worker         assert_eq!(b.recv::<u8>().await.unwrap(), 5u8);
22*bb4ee6a4SAndroid Build Coastguard Worker         b.send(&16u8).await.unwrap();
23*bb4ee6a4SAndroid Build Coastguard Worker         assert_eq!(blocking_task.await.unwrap(), 16u8);
24*bb4ee6a4SAndroid Build Coastguard Worker     }
25*bb4ee6a4SAndroid Build Coastguard Worker }
26