1cac7dca0Sopenharmony_ci// Copyright (c) 2023 Huawei Device Co., Ltd. 2cac7dca0Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 3cac7dca0Sopenharmony_ci// you may not use this file except in compliance with the License. 4cac7dca0Sopenharmony_ci// You may obtain a copy of the License at 5cac7dca0Sopenharmony_ci// 6cac7dca0Sopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 7cac7dca0Sopenharmony_ci// 8cac7dca0Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software 9cac7dca0Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 10cac7dca0Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11cac7dca0Sopenharmony_ci// See the License for the specific language governing permissions and 12cac7dca0Sopenharmony_ci// limitations under the License. 13cac7dca0Sopenharmony_ci 14cac7dca0Sopenharmony_ciuse std::io::ErrorKind; 15cac7dca0Sopenharmony_ci 16cac7dca0Sopenharmony_ciuse ylong_io::UdpSocket; 17cac7dca0Sopenharmony_ci 18cac7dca0Sopenharmony_ci/// SDV test cases for `send()` and `recv()`. 19cac7dca0Sopenharmony_ci/// 20cac7dca0Sopenharmony_ci/// # Brief 21cac7dca0Sopenharmony_ci/// 1. Create UdpSocket and connect to the remote address. 22cac7dca0Sopenharmony_ci/// 2. Sender sends message first. 23cac7dca0Sopenharmony_ci/// 3. Receiver receives message. 24cac7dca0Sopenharmony_ci/// 4. Check if the test results are correct. 25cac7dca0Sopenharmony_ci#[test] 26cac7dca0Sopenharmony_cifn sdv_send_recv() { 27cac7dca0Sopenharmony_ci let sender_addr = "127.0.0.1:8081".parse().unwrap(); 28cac7dca0Sopenharmony_ci let receiver_addr = "127.0.0.1:8082".parse().unwrap(); 29cac7dca0Sopenharmony_ci 30cac7dca0Sopenharmony_ci let sender = match UdpSocket::bind(sender_addr) { 31cac7dca0Sopenharmony_ci Ok(socket) => socket, 32cac7dca0Sopenharmony_ci Err(e) => { 33cac7dca0Sopenharmony_ci panic!("Bind Socket Failed {}", e); 34cac7dca0Sopenharmony_ci } 35cac7dca0Sopenharmony_ci }; 36cac7dca0Sopenharmony_ci 37cac7dca0Sopenharmony_ci let receiver = match UdpSocket::bind(receiver_addr) { 38cac7dca0Sopenharmony_ci Ok(socket) => socket, 39cac7dca0Sopenharmony_ci Err(e) => { 40cac7dca0Sopenharmony_ci panic!("Bind Socket Failed {}", e); 41cac7dca0Sopenharmony_ci } 42cac7dca0Sopenharmony_ci }; 43cac7dca0Sopenharmony_ci 44cac7dca0Sopenharmony_ci let connected_sender = match sender.connect(receiver_addr) { 45cac7dca0Sopenharmony_ci Ok(socket) => socket, 46cac7dca0Sopenharmony_ci Err(e) => { 47cac7dca0Sopenharmony_ci panic!("Connect Socket Failed {}", e); 48cac7dca0Sopenharmony_ci } 49cac7dca0Sopenharmony_ci }; 50cac7dca0Sopenharmony_ci let connected_receiver = match receiver.connect(sender_addr) { 51cac7dca0Sopenharmony_ci Ok(socket) => socket, 52cac7dca0Sopenharmony_ci Err(e) => { 53cac7dca0Sopenharmony_ci panic!("Connect Socket Failed {}", e); 54cac7dca0Sopenharmony_ci } 55cac7dca0Sopenharmony_ci }; 56cac7dca0Sopenharmony_ci 57cac7dca0Sopenharmony_ci match connected_sender.send(b"Hello") { 58cac7dca0Sopenharmony_ci Ok(n) => { 59cac7dca0Sopenharmony_ci assert_eq!(n, "Hello".len()); 60cac7dca0Sopenharmony_ci } 61cac7dca0Sopenharmony_ci Err(e) => { 62cac7dca0Sopenharmony_ci panic!("Sender Send Failed {}", e); 63cac7dca0Sopenharmony_ci } 64cac7dca0Sopenharmony_ci } 65cac7dca0Sopenharmony_ci 66cac7dca0Sopenharmony_ci let mut recv_buf = [0_u8; 12]; 67cac7dca0Sopenharmony_ci let len = loop { 68cac7dca0Sopenharmony_ci match connected_receiver.recv(&mut recv_buf[..]) { 69cac7dca0Sopenharmony_ci Ok(n) => break n, 70cac7dca0Sopenharmony_ci Err(e) if e.kind() == ErrorKind::WouldBlock => {} 71cac7dca0Sopenharmony_ci Err(e) => panic!("{:?}", e), 72cac7dca0Sopenharmony_ci } 73cac7dca0Sopenharmony_ci }; 74cac7dca0Sopenharmony_ci 75cac7dca0Sopenharmony_ci assert_eq!(&recv_buf[..len], b"Hello"); 76cac7dca0Sopenharmony_ci} 77cac7dca0Sopenharmony_ci 78cac7dca0Sopenharmony_ci/// SDV test cases for `send_to()` and `recv_from()`. 79cac7dca0Sopenharmony_ci/// 80cac7dca0Sopenharmony_ci/// # Brief 81cac7dca0Sopenharmony_ci/// 1. Create UdpSocket. 82cac7dca0Sopenharmony_ci/// 2. Sender sends message to the specified address. 83cac7dca0Sopenharmony_ci/// 3. Receiver receives message and return the address the message from. 84cac7dca0Sopenharmony_ci/// 4. Check if the test results are correct. 85cac7dca0Sopenharmony_ci#[test] 86cac7dca0Sopenharmony_cifn sdv_send_to_recv_from() { 87cac7dca0Sopenharmony_ci let sender_addr = "127.0.0.1:8085".parse().unwrap(); 88cac7dca0Sopenharmony_ci let receiver_addr = "127.0.0.1:8086".parse().unwrap(); 89cac7dca0Sopenharmony_ci 90cac7dca0Sopenharmony_ci let sender = match UdpSocket::bind(sender_addr) { 91cac7dca0Sopenharmony_ci Ok(socket) => socket, 92cac7dca0Sopenharmony_ci Err(e) => { 93cac7dca0Sopenharmony_ci panic!("Bind Socket Failed {}", e); 94cac7dca0Sopenharmony_ci } 95cac7dca0Sopenharmony_ci }; 96cac7dca0Sopenharmony_ci 97cac7dca0Sopenharmony_ci let receiver = match UdpSocket::bind(receiver_addr) { 98cac7dca0Sopenharmony_ci Ok(socket) => socket, 99cac7dca0Sopenharmony_ci Err(e) => { 100cac7dca0Sopenharmony_ci panic!("Bind Socket Failed {}", e); 101cac7dca0Sopenharmony_ci } 102cac7dca0Sopenharmony_ci }; 103cac7dca0Sopenharmony_ci 104cac7dca0Sopenharmony_ci match sender.send_to(b"Hello", receiver_addr) { 105cac7dca0Sopenharmony_ci Ok(n) => { 106cac7dca0Sopenharmony_ci assert_eq!(n, "Hello".len()); 107cac7dca0Sopenharmony_ci } 108cac7dca0Sopenharmony_ci Err(e) => { 109cac7dca0Sopenharmony_ci panic!("Sender Send Failed {}", e); 110cac7dca0Sopenharmony_ci } 111cac7dca0Sopenharmony_ci } 112cac7dca0Sopenharmony_ci 113cac7dca0Sopenharmony_ci let mut recv_buf = [0_u8; 12]; 114cac7dca0Sopenharmony_ci let (len, addr) = loop { 115cac7dca0Sopenharmony_ci match receiver.recv_from(&mut recv_buf[..]) { 116cac7dca0Sopenharmony_ci Ok(res) => break res, 117cac7dca0Sopenharmony_ci Err(e) if e.kind() == ErrorKind::WouldBlock => {} 118cac7dca0Sopenharmony_ci Err(e) => panic!("{:?}", e), 119cac7dca0Sopenharmony_ci } 120cac7dca0Sopenharmony_ci }; 121cac7dca0Sopenharmony_ci assert_eq!(&recv_buf[..len], b"Hello"); 122cac7dca0Sopenharmony_ci assert_eq!(addr, sender_addr); 123cac7dca0Sopenharmony_ci} 124