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