/*
 * Copyright (C) 2023 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
//! unittest
#![allow(missing_docs)]

/// #[cfg(test)]
/// mod session_test {
///     use ylong_runtime;
///
///     use crate::common::hsession;
///     use crate::common::hsession::{ActionType, HdcSession};
///     use crate::config::{ConnectType, NodeType};
///     use std::time::Duration;
///
///     #[ylong_runtime::test]
///     async fn if_hsession_query_work() {
///         let t1 = ylong_runtime::spawn(async {
///             let hs = HdcSession::new(
///                 111,
///                 "test_key".to_string(),
///                 NodeType::Daemon,
///                 ConnectType::Tcp,
///             );
///             hsession::admin_session(ActionType::Add(hs)).await;
///         });
///
///         let t2 = ylong_runtime::spawn(async {
///             let _ = ylong_runtime::time::sleep(Duration::from_millis(200)).await;
///             let opt = hsession::admin_session(ActionType::Query(111)).await;
///             let lock = opt.unwrap();
///             let hs = lock.lock().await;
///             assert_eq!(hs.connect_key, "test_key".to_string());
///         });
///
///         t1.await.unwrap();
///         t2.await.unwrap();
///     }
///
///     #[ylong_runtime::test]
///     async fn if_hsession_query_ref_work() {
///         let t1 = ylong_runtime::spawn(async {
///             let hs = HdcSession::new(
///                 222,
///                 "test_key".to_string(),
///                 NodeType::Daemon,
///                 ConnectType::Tcp,
///             );
///             hsession::admin_session(ActionType::Add(hs)).await;
///         });
///
///         let t2 = ylong_runtime::spawn(async {
///             let _ = ylong_runtime::time::sleep(Duration::from_millis(200)).await;
///             let _ = hsession::admin_session(ActionType::QueryRef(222)).await;
///         });
///
///         let t3 = ylong_runtime::spawn(async {
///             let _ = ylong_runtime::time::sleep(Duration::from_millis(400)).await;
///             let opt = hsession::admin_session(ActionType::Query(222)).await;
///             let lock = opt.unwrap();
///             let hs = lock.lock().await;
///             assert_eq!(hs.ref_cnt, 1);
///         });
///
///         t1.await.unwrap();
///         t2.await.unwrap();
///         t3.await.unwrap();
///     }
///
///     #[ylong_runtime::test]
///     async fn if_hsession_update_work() {
///         let t1 = ylong_runtime::spawn(async {
///             let hs = HdcSession::new(
///                 333,
///                 "test_key".to_string(),
///                 NodeType::Daemon,
///                 ConnectType::Tcp,
///             );
///             hsession::admin_session(ActionType::Add(hs)).await;
///         });
///
///         let t2 = ylong_runtime::spawn(async {
///             let hs = HdcSession::new(
///                 3333,
///                 "test_key2".to_string(),
///                 NodeType::Server,
///                 ConnectType::Bt,
///             );
///             let _ = ylong_runtime::time::sleep(Duration::from_millis(300)).await;
///             let _ = hsession::admin_session(ActionType::Update(333, hs)).await;
///         });
///
///         let t3 = ylong_runtime::spawn(async {
///             let _ = ylong_runtime::time::sleep(Duration::from_millis(400)).await;
///             let opt = hsession::admin_session(ActionType::Query(3333)).await;
///             let lock = opt.unwrap();
///             let hs = lock.lock().await;
///             assert_eq!(hs.connect_key, "test_key2".to_string());
///             assert!(matches!(hs.connect_type, ConnectType::Bt));
///             assert!(matches!(hs.node_type, NodeType::Server));
///         });
///
///         let t4 = ylong_runtime::spawn(async {
///             let _ = ylong_runtime::time::sleep(Duration::from_millis(500)).await;
///             let opt = hsession::admin_session(ActionType::Query(333)).await;
///             assert!(opt.is_none());
///         });
///
///         t1.await.unwrap();
///         t2.await.unwrap();
///         t3.await.unwrap();
///         t4.await.unwrap();
///     }
///
///     #[ylong_runtime::test]
///     async fn if_hsession_update_outside_admin_work() {
///         let t1 = ylong_runtime::spawn(async {
///             let hs = HdcSession::new(
///                 444,
///                 "test_key".to_string(),
///                 NodeType::Daemon,
///                 ConnectType::Tcp,
///             );
///             hsession::admin_session(ActionType::Add(hs)).await;
///         });
///
///         let t2 = ylong_runtime::spawn(async {
///             let _ = ylong_runtime::time::sleep(Duration::from_millis(200)).await;
///             let opt = hsession::admin_session(ActionType::Query(444)).await;
///             let lock = opt.unwrap();
///             let mut hs = lock.lock().await;
///             hs.connect_key = "new_key".to_string();
///         });
///
///         let t3 = ylong_runtime::spawn(async {
///             let _ = ylong_runtime::time::sleep(Duration::from_millis(400)).await;
///             let opt = hsession::admin_session(ActionType::Query(444)).await;
///             let lock = opt.unwrap();
///             let hs = lock.lock().await;
///             assert_eq!(hs.connect_key, "new_key".to_string());
///         });
///
///         t1.await.unwrap();
///         t2.await.unwrap();
///         t3.await.unwrap();
///     }
/// }
///
/// #[cfg(test)]
/// mod file_test {
///     use crate::{
///         common::{base::Base, hdcfile::HdcFile},
///         serializer::{serialize::Serialization, native_struct::TransferConfig},
///     };
///     #[ylong_runtime::test]
///     async fn test_base_fn() {
///         let command = String::from(
///             "-cwd \"C:\\Users\\\" C:\\Users\\Desktop\\hdcfile\\hdcd_system /data/hdcd",
///         );
///         let mut argc = 0;
///         let argv = Base::split_command_to_args(&command, &mut argc);
///         assert_eq!(argc, 4);
///         assert_eq!(argv.len(), 4);
///         assert_eq!(argv.get(0), Some(&"-cwd".to_string()));
///         assert_eq!(argv.get(1), Some(&"C:\\Users\\".to_string()));
///         assert_eq!(
///             argv.get(2),
///             Some(&"C:\\Users\\Desktop\\hdcfile\\hdcd_system".to_string())
///         );
///         assert_eq!(argv.get(3), Some(&"/data/hdcd".to_string()));
///     }
///
///     #[ylong_runtime::test]
///     async fn test_get_file_name() {
///         let mut path = String::from("/home/test/hdctest.log");
///         let file_name = Base::get_file_name(&mut path).unwrap();
///         assert_eq!(file_name, "hdctest.log");
///     }
///
///     #[ylong_runtime::test]
///     async fn test_file_task_master() {
///         let mut task = HdcFile::new(1, 2);
///         let mut command = String::from("-cwd \"C:\\Users\\\" /system/bin /data/hdcd");
///         if cfg!(target_os = "windows") {
///             command = String::from("-cwd \"C:\\Users\\\" C:\\Users\\ /data/");
///         }
///         let result = task.begin_transfer(&command);
///         if !result {
///             assert!(true);
///         } else {
///             assert_eq!(task.transfer.is_dir, true);
///             println!("{}", task.transfer.base_local_path);
///             if cfg!(target_os = "linux") {
///                 assert_eq!(task.transfer.base_local_path, String::from("/system/bin/"));
///             } else {
///                 assert_eq!(task.transfer.base_local_path, String::from("C:\\Users\\"));
///             }
///             assert_eq!(task.transfer.remote_path, String::from("/data/hdcd"));
///             assert_ne!(task.transfer.task_queue.len(), 0);
///         }
///     }
///
///     #[ylong_runtime::test]
///     async fn test_file_task_slave() {
///         let mut task = HdcFile::new(1, 2);
///         let mut transfer_config = TransferConfig::default();
///         transfer_config.file_size = 88888888;
///         transfer_config.path = "/data/hdcd".to_string();
///         transfer_config.optional_name = "hdcd".to_string();
///         let payload = TransferConfig::serialize(&transfer_config);
///         task.check_slaver(&payload[..]);
///         assert_eq!(task.transfer.file_size, 88888888);
///         assert_eq!(task.transfer.local_path, String::from("/data/hdcd"));
///     }
/// }
#[cfg(test)]
mod sync_session_test {}