1cc290419Sopenharmony_ci/* 2cc290419Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd. 3cc290419Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4cc290419Sopenharmony_ci * you may not use this file except in compliance with the License. 5cc290419Sopenharmony_ci * You may obtain a copy of the License at 6cc290419Sopenharmony_ci * 7cc290419Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8cc290419Sopenharmony_ci * 9cc290419Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10cc290419Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11cc290419Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12cc290419Sopenharmony_ci * See the License for the specific language governing permissions and 13cc290419Sopenharmony_ci * limitations under the License. 14cc290419Sopenharmony_ci */ 15cc290419Sopenharmony_ci//! unittest 16cc290419Sopenharmony_ci#![allow(missing_docs)] 17cc290419Sopenharmony_ci 18cc290419Sopenharmony_ci/// #[cfg(test)] 19cc290419Sopenharmony_ci/// mod session_test { 20cc290419Sopenharmony_ci/// use ylong_runtime; 21cc290419Sopenharmony_ci/// 22cc290419Sopenharmony_ci/// use crate::common::hsession; 23cc290419Sopenharmony_ci/// use crate::common::hsession::{ActionType, HdcSession}; 24cc290419Sopenharmony_ci/// use crate::config::{ConnectType, NodeType}; 25cc290419Sopenharmony_ci/// use std::time::Duration; 26cc290419Sopenharmony_ci/// 27cc290419Sopenharmony_ci/// #[ylong_runtime::test] 28cc290419Sopenharmony_ci/// async fn if_hsession_query_work() { 29cc290419Sopenharmony_ci/// let t1 = ylong_runtime::spawn(async { 30cc290419Sopenharmony_ci/// let hs = HdcSession::new( 31cc290419Sopenharmony_ci/// 111, 32cc290419Sopenharmony_ci/// "test_key".to_string(), 33cc290419Sopenharmony_ci/// NodeType::Daemon, 34cc290419Sopenharmony_ci/// ConnectType::Tcp, 35cc290419Sopenharmony_ci/// ); 36cc290419Sopenharmony_ci/// hsession::admin_session(ActionType::Add(hs)).await; 37cc290419Sopenharmony_ci/// }); 38cc290419Sopenharmony_ci/// 39cc290419Sopenharmony_ci/// let t2 = ylong_runtime::spawn(async { 40cc290419Sopenharmony_ci/// let _ = ylong_runtime::time::sleep(Duration::from_millis(200)).await; 41cc290419Sopenharmony_ci/// let opt = hsession::admin_session(ActionType::Query(111)).await; 42cc290419Sopenharmony_ci/// let lock = opt.unwrap(); 43cc290419Sopenharmony_ci/// let hs = lock.lock().await; 44cc290419Sopenharmony_ci/// assert_eq!(hs.connect_key, "test_key".to_string()); 45cc290419Sopenharmony_ci/// }); 46cc290419Sopenharmony_ci/// 47cc290419Sopenharmony_ci/// t1.await.unwrap(); 48cc290419Sopenharmony_ci/// t2.await.unwrap(); 49cc290419Sopenharmony_ci/// } 50cc290419Sopenharmony_ci/// 51cc290419Sopenharmony_ci/// #[ylong_runtime::test] 52cc290419Sopenharmony_ci/// async fn if_hsession_query_ref_work() { 53cc290419Sopenharmony_ci/// let t1 = ylong_runtime::spawn(async { 54cc290419Sopenharmony_ci/// let hs = HdcSession::new( 55cc290419Sopenharmony_ci/// 222, 56cc290419Sopenharmony_ci/// "test_key".to_string(), 57cc290419Sopenharmony_ci/// NodeType::Daemon, 58cc290419Sopenharmony_ci/// ConnectType::Tcp, 59cc290419Sopenharmony_ci/// ); 60cc290419Sopenharmony_ci/// hsession::admin_session(ActionType::Add(hs)).await; 61cc290419Sopenharmony_ci/// }); 62cc290419Sopenharmony_ci/// 63cc290419Sopenharmony_ci/// let t2 = ylong_runtime::spawn(async { 64cc290419Sopenharmony_ci/// let _ = ylong_runtime::time::sleep(Duration::from_millis(200)).await; 65cc290419Sopenharmony_ci/// let _ = hsession::admin_session(ActionType::QueryRef(222)).await; 66cc290419Sopenharmony_ci/// }); 67cc290419Sopenharmony_ci/// 68cc290419Sopenharmony_ci/// let t3 = ylong_runtime::spawn(async { 69cc290419Sopenharmony_ci/// let _ = ylong_runtime::time::sleep(Duration::from_millis(400)).await; 70cc290419Sopenharmony_ci/// let opt = hsession::admin_session(ActionType::Query(222)).await; 71cc290419Sopenharmony_ci/// let lock = opt.unwrap(); 72cc290419Sopenharmony_ci/// let hs = lock.lock().await; 73cc290419Sopenharmony_ci/// assert_eq!(hs.ref_cnt, 1); 74cc290419Sopenharmony_ci/// }); 75cc290419Sopenharmony_ci/// 76cc290419Sopenharmony_ci/// t1.await.unwrap(); 77cc290419Sopenharmony_ci/// t2.await.unwrap(); 78cc290419Sopenharmony_ci/// t3.await.unwrap(); 79cc290419Sopenharmony_ci/// } 80cc290419Sopenharmony_ci/// 81cc290419Sopenharmony_ci/// #[ylong_runtime::test] 82cc290419Sopenharmony_ci/// async fn if_hsession_update_work() { 83cc290419Sopenharmony_ci/// let t1 = ylong_runtime::spawn(async { 84cc290419Sopenharmony_ci/// let hs = HdcSession::new( 85cc290419Sopenharmony_ci/// 333, 86cc290419Sopenharmony_ci/// "test_key".to_string(), 87cc290419Sopenharmony_ci/// NodeType::Daemon, 88cc290419Sopenharmony_ci/// ConnectType::Tcp, 89cc290419Sopenharmony_ci/// ); 90cc290419Sopenharmony_ci/// hsession::admin_session(ActionType::Add(hs)).await; 91cc290419Sopenharmony_ci/// }); 92cc290419Sopenharmony_ci/// 93cc290419Sopenharmony_ci/// let t2 = ylong_runtime::spawn(async { 94cc290419Sopenharmony_ci/// let hs = HdcSession::new( 95cc290419Sopenharmony_ci/// 3333, 96cc290419Sopenharmony_ci/// "test_key2".to_string(), 97cc290419Sopenharmony_ci/// NodeType::Server, 98cc290419Sopenharmony_ci/// ConnectType::Bt, 99cc290419Sopenharmony_ci/// ); 100cc290419Sopenharmony_ci/// let _ = ylong_runtime::time::sleep(Duration::from_millis(300)).await; 101cc290419Sopenharmony_ci/// let _ = hsession::admin_session(ActionType::Update(333, hs)).await; 102cc290419Sopenharmony_ci/// }); 103cc290419Sopenharmony_ci/// 104cc290419Sopenharmony_ci/// let t3 = ylong_runtime::spawn(async { 105cc290419Sopenharmony_ci/// let _ = ylong_runtime::time::sleep(Duration::from_millis(400)).await; 106cc290419Sopenharmony_ci/// let opt = hsession::admin_session(ActionType::Query(3333)).await; 107cc290419Sopenharmony_ci/// let lock = opt.unwrap(); 108cc290419Sopenharmony_ci/// let hs = lock.lock().await; 109cc290419Sopenharmony_ci/// assert_eq!(hs.connect_key, "test_key2".to_string()); 110cc290419Sopenharmony_ci/// assert!(matches!(hs.connect_type, ConnectType::Bt)); 111cc290419Sopenharmony_ci/// assert!(matches!(hs.node_type, NodeType::Server)); 112cc290419Sopenharmony_ci/// }); 113cc290419Sopenharmony_ci/// 114cc290419Sopenharmony_ci/// let t4 = ylong_runtime::spawn(async { 115cc290419Sopenharmony_ci/// let _ = ylong_runtime::time::sleep(Duration::from_millis(500)).await; 116cc290419Sopenharmony_ci/// let opt = hsession::admin_session(ActionType::Query(333)).await; 117cc290419Sopenharmony_ci/// assert!(opt.is_none()); 118cc290419Sopenharmony_ci/// }); 119cc290419Sopenharmony_ci/// 120cc290419Sopenharmony_ci/// t1.await.unwrap(); 121cc290419Sopenharmony_ci/// t2.await.unwrap(); 122cc290419Sopenharmony_ci/// t3.await.unwrap(); 123cc290419Sopenharmony_ci/// t4.await.unwrap(); 124cc290419Sopenharmony_ci/// } 125cc290419Sopenharmony_ci/// 126cc290419Sopenharmony_ci/// #[ylong_runtime::test] 127cc290419Sopenharmony_ci/// async fn if_hsession_update_outside_admin_work() { 128cc290419Sopenharmony_ci/// let t1 = ylong_runtime::spawn(async { 129cc290419Sopenharmony_ci/// let hs = HdcSession::new( 130cc290419Sopenharmony_ci/// 444, 131cc290419Sopenharmony_ci/// "test_key".to_string(), 132cc290419Sopenharmony_ci/// NodeType::Daemon, 133cc290419Sopenharmony_ci/// ConnectType::Tcp, 134cc290419Sopenharmony_ci/// ); 135cc290419Sopenharmony_ci/// hsession::admin_session(ActionType::Add(hs)).await; 136cc290419Sopenharmony_ci/// }); 137cc290419Sopenharmony_ci/// 138cc290419Sopenharmony_ci/// let t2 = ylong_runtime::spawn(async { 139cc290419Sopenharmony_ci/// let _ = ylong_runtime::time::sleep(Duration::from_millis(200)).await; 140cc290419Sopenharmony_ci/// let opt = hsession::admin_session(ActionType::Query(444)).await; 141cc290419Sopenharmony_ci/// let lock = opt.unwrap(); 142cc290419Sopenharmony_ci/// let mut hs = lock.lock().await; 143cc290419Sopenharmony_ci/// hs.connect_key = "new_key".to_string(); 144cc290419Sopenharmony_ci/// }); 145cc290419Sopenharmony_ci/// 146cc290419Sopenharmony_ci/// let t3 = ylong_runtime::spawn(async { 147cc290419Sopenharmony_ci/// let _ = ylong_runtime::time::sleep(Duration::from_millis(400)).await; 148cc290419Sopenharmony_ci/// let opt = hsession::admin_session(ActionType::Query(444)).await; 149cc290419Sopenharmony_ci/// let lock = opt.unwrap(); 150cc290419Sopenharmony_ci/// let hs = lock.lock().await; 151cc290419Sopenharmony_ci/// assert_eq!(hs.connect_key, "new_key".to_string()); 152cc290419Sopenharmony_ci/// }); 153cc290419Sopenharmony_ci/// 154cc290419Sopenharmony_ci/// t1.await.unwrap(); 155cc290419Sopenharmony_ci/// t2.await.unwrap(); 156cc290419Sopenharmony_ci/// t3.await.unwrap(); 157cc290419Sopenharmony_ci/// } 158cc290419Sopenharmony_ci/// } 159cc290419Sopenharmony_ci/// 160cc290419Sopenharmony_ci/// #[cfg(test)] 161cc290419Sopenharmony_ci/// mod file_test { 162cc290419Sopenharmony_ci/// use crate::{ 163cc290419Sopenharmony_ci/// common::{base::Base, hdcfile::HdcFile}, 164cc290419Sopenharmony_ci/// serializer::{serialize::Serialization, native_struct::TransferConfig}, 165cc290419Sopenharmony_ci/// }; 166cc290419Sopenharmony_ci/// #[ylong_runtime::test] 167cc290419Sopenharmony_ci/// async fn test_base_fn() { 168cc290419Sopenharmony_ci/// let command = String::from( 169cc290419Sopenharmony_ci/// "-cwd \"C:\\Users\\\" C:\\Users\\Desktop\\hdcfile\\hdcd_system /data/hdcd", 170cc290419Sopenharmony_ci/// ); 171cc290419Sopenharmony_ci/// let mut argc = 0; 172cc290419Sopenharmony_ci/// let argv = Base::split_command_to_args(&command, &mut argc); 173cc290419Sopenharmony_ci/// assert_eq!(argc, 4); 174cc290419Sopenharmony_ci/// assert_eq!(argv.len(), 4); 175cc290419Sopenharmony_ci/// assert_eq!(argv.get(0), Some(&"-cwd".to_string())); 176cc290419Sopenharmony_ci/// assert_eq!(argv.get(1), Some(&"C:\\Users\\".to_string())); 177cc290419Sopenharmony_ci/// assert_eq!( 178cc290419Sopenharmony_ci/// argv.get(2), 179cc290419Sopenharmony_ci/// Some(&"C:\\Users\\Desktop\\hdcfile\\hdcd_system".to_string()) 180cc290419Sopenharmony_ci/// ); 181cc290419Sopenharmony_ci/// assert_eq!(argv.get(3), Some(&"/data/hdcd".to_string())); 182cc290419Sopenharmony_ci/// } 183cc290419Sopenharmony_ci/// 184cc290419Sopenharmony_ci/// #[ylong_runtime::test] 185cc290419Sopenharmony_ci/// async fn test_get_file_name() { 186cc290419Sopenharmony_ci/// let mut path = String::from("/home/test/hdctest.log"); 187cc290419Sopenharmony_ci/// let file_name = Base::get_file_name(&mut path).unwrap(); 188cc290419Sopenharmony_ci/// assert_eq!(file_name, "hdctest.log"); 189cc290419Sopenharmony_ci/// } 190cc290419Sopenharmony_ci/// 191cc290419Sopenharmony_ci/// #[ylong_runtime::test] 192cc290419Sopenharmony_ci/// async fn test_file_task_master() { 193cc290419Sopenharmony_ci/// let mut task = HdcFile::new(1, 2); 194cc290419Sopenharmony_ci/// let mut command = String::from("-cwd \"C:\\Users\\\" /system/bin /data/hdcd"); 195cc290419Sopenharmony_ci/// if cfg!(target_os = "windows") { 196cc290419Sopenharmony_ci/// command = String::from("-cwd \"C:\\Users\\\" C:\\Users\\ /data/"); 197cc290419Sopenharmony_ci/// } 198cc290419Sopenharmony_ci/// let result = task.begin_transfer(&command); 199cc290419Sopenharmony_ci/// if !result { 200cc290419Sopenharmony_ci/// assert!(true); 201cc290419Sopenharmony_ci/// } else { 202cc290419Sopenharmony_ci/// assert_eq!(task.transfer.is_dir, true); 203cc290419Sopenharmony_ci/// println!("{}", task.transfer.base_local_path); 204cc290419Sopenharmony_ci/// if cfg!(target_os = "linux") { 205cc290419Sopenharmony_ci/// assert_eq!(task.transfer.base_local_path, String::from("/system/bin/")); 206cc290419Sopenharmony_ci/// } else { 207cc290419Sopenharmony_ci/// assert_eq!(task.transfer.base_local_path, String::from("C:\\Users\\")); 208cc290419Sopenharmony_ci/// } 209cc290419Sopenharmony_ci/// assert_eq!(task.transfer.remote_path, String::from("/data/hdcd")); 210cc290419Sopenharmony_ci/// assert_ne!(task.transfer.task_queue.len(), 0); 211cc290419Sopenharmony_ci/// } 212cc290419Sopenharmony_ci/// } 213cc290419Sopenharmony_ci/// 214cc290419Sopenharmony_ci/// #[ylong_runtime::test] 215cc290419Sopenharmony_ci/// async fn test_file_task_slave() { 216cc290419Sopenharmony_ci/// let mut task = HdcFile::new(1, 2); 217cc290419Sopenharmony_ci/// let mut transfer_config = TransferConfig::default(); 218cc290419Sopenharmony_ci/// transfer_config.file_size = 88888888; 219cc290419Sopenharmony_ci/// transfer_config.path = "/data/hdcd".to_string(); 220cc290419Sopenharmony_ci/// transfer_config.optional_name = "hdcd".to_string(); 221cc290419Sopenharmony_ci/// let payload = TransferConfig::serialize(&transfer_config); 222cc290419Sopenharmony_ci/// task.check_slaver(&payload[..]); 223cc290419Sopenharmony_ci/// assert_eq!(task.transfer.file_size, 88888888); 224cc290419Sopenharmony_ci/// assert_eq!(task.transfer.local_path, String::from("/data/hdcd")); 225cc290419Sopenharmony_ci/// } 226cc290419Sopenharmony_ci/// } 227cc290419Sopenharmony_ci#[cfg(test)] 228cc290419Sopenharmony_cimod sync_session_test {} 229