Skip to content

Commit ce473d1

Browse files
committed
test: add tokio
1 parent 5f35116 commit ce473d1

File tree

1 file changed

+161
-2
lines changed

1 file changed

+161
-2
lines changed

crates/libs/kill_tree/src/linux.rs

Lines changed: 161 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,10 @@ pub(crate) mod blocking {
162162
use crate::core::blocking::ProcessInfosProvidable;
163163

164164
#[instrument]
165-
fn get_process_info(process_id: ProcessId, path: std::path::PathBuf) -> Result<ProcessInfo> {
165+
pub(crate) fn get_process_info(
166+
process_id: ProcessId,
167+
path: std::path::PathBuf,
168+
) -> Result<ProcessInfo> {
166169
let status_path = parse_proc_entry(process_id, &path)?;
167170
let status = match std::fs::read_to_string(&status_path) {
168171
Ok(x) => x,
@@ -221,7 +224,7 @@ pub(crate) mod tokio {
221224
use crate::core::tokio::ProcessInfosProvidable;
222225

223226
#[instrument]
224-
async fn get_process_info(
227+
pub(crate) async fn get_process_info(
225228
process_id: ProcessId,
226229
path: std::path::PathBuf,
227230
) -> Result<ProcessInfo> {
@@ -272,3 +275,159 @@ pub(crate) mod tokio {
272275
}
273276
}
274277
}
278+
279+
#[cfg(test)]
280+
mod tests {
281+
use super::*;
282+
283+
#[test]
284+
fn validate_process_id_kernel_process_id() {
285+
let process_id = 0;
286+
let result = validate_process_id(process_id);
287+
assert!(result.is_err());
288+
}
289+
290+
#[test]
291+
fn validate_process_id_init_process_id() {
292+
let process_id = 1;
293+
let result = validate_process_id(process_id);
294+
assert!(result.is_err());
295+
}
296+
297+
#[test]
298+
fn validate_process_id_available_max_process_id() {
299+
let process_id = AVAILABLE_MAX_PROCESS_ID;
300+
validate_process_id(process_id).expect("Failed to validate process id");
301+
}
302+
303+
#[test]
304+
fn parse_status_kernel_process_id() {
305+
let process_id = 0;
306+
let status_path = "/proc/0/status".to_string();
307+
let status = "Name: init\nPPid: 0\n".to_string();
308+
let process_info =
309+
parse_status(process_id, status_path, &status).expect("Failed to parse status");
310+
assert_eq!(process_info.process_id, process_id);
311+
assert_eq!(process_info.parent_process_id, 0);
312+
assert_eq!(process_info.name, "init");
313+
}
314+
315+
#[test]
316+
fn parse_proc_entry_not_dir() {
317+
let process_id = 0;
318+
let path = std::path::PathBuf::from("/proc/0/status");
319+
let result = parse_proc_entry(process_id, &path);
320+
assert!(result.is_err());
321+
}
322+
323+
#[test]
324+
fn parse_proc_entry_failed_to_get_file_name() {
325+
let process_id = 0;
326+
let path = std::path::PathBuf::from("/proc/");
327+
let result = parse_proc_entry(process_id, &path);
328+
assert!(result.is_err());
329+
}
330+
331+
#[test]
332+
fn parse_proc_entry_failed_to_parse_process_id() {
333+
let process_id = 0;
334+
let path = std::path::PathBuf::from("/proc/invalid");
335+
let result = parse_proc_entry(process_id, &path);
336+
assert!(result.is_err());
337+
}
338+
339+
#[test]
340+
fn parse_proc_entry_status_path_does_not_exist() {
341+
let process_id = 0;
342+
let path = std::path::PathBuf::from("/proc/0");
343+
let result = parse_proc_entry(process_id, &path);
344+
assert!(result.is_err());
345+
}
346+
347+
#[test]
348+
fn parse_proc_entry_status_path_is_not_file() {
349+
let process_id = 0;
350+
let path = std::path::PathBuf::from("/proc/0");
351+
let result = parse_proc_entry(process_id, &path);
352+
assert!(result.is_err());
353+
}
354+
355+
#[test]
356+
fn parse_proc_entry_1() {
357+
let process_id = 1;
358+
let path = std::path::PathBuf::from("/proc/1");
359+
let status_path = parse_proc_entry(process_id, &path).expect("Failed to parse proc entry");
360+
assert_eq!(status_path, std::path::PathBuf::from("/proc/1/status"));
361+
}
362+
363+
#[test]
364+
fn parse_proc_entry_1_and_status() {
365+
let process_id = 1;
366+
let path = std::path::PathBuf::from("/proc/1");
367+
let status_path = parse_proc_entry(process_id, &path).expect("Failed to parse proc entry");
368+
let status = match std::fs::read_to_string(&status_path) {
369+
Ok(x) => x,
370+
Err(e) => {
371+
panic!("Failed to read status. error: {}", e);
372+
}
373+
};
374+
let process_info = parse_status(process_id, status_path.display().to_string(), &status)
375+
.expect("Failed to parse status");
376+
assert_eq!(process_info.process_id, process_id);
377+
assert_eq!(process_info.parent_process_id, 0);
378+
assert_eq!(process_info.name, "systemd");
379+
}
380+
381+
#[test]
382+
fn child_process_id_map_filter_false() {
383+
let process_info = ProcessInfo {
384+
process_id: 0,
385+
parent_process_id: 0,
386+
name: "init".to_string(),
387+
};
388+
assert!(!child_process_id_map_filter(&process_info));
389+
}
390+
391+
#[cfg(feature = "blocking")]
392+
#[test]
393+
fn get_process_info_blocking() {
394+
let process_id = 1;
395+
let path = std::path::PathBuf::from("/proc/1");
396+
let process_info =
397+
blocking::get_process_info(process_id, path).expect("Failed to get process info");
398+
assert_eq!(process_info.process_id, process_id);
399+
assert_eq!(process_info.parent_process_id, 0);
400+
assert_eq!(process_info.name, "systemd");
401+
}
402+
403+
#[cfg(feature = "blocking")]
404+
#[test]
405+
fn get_process_infos_blocking() {
406+
let process_infos = blocking::get_process_infos().expect("Failed to get process infos");
407+
assert!(process_infos.len() > 1);
408+
}
409+
410+
#[cfg(feature = "tokio")]
411+
#[test]
412+
fn get_process_info_tokio() {
413+
let rt = ::tokio::runtime::Runtime::new().unwrap();
414+
let process_id = 1;
415+
let path = std::path::PathBuf::from("/proc/1");
416+
let process_info = rt
417+
.block_on(tokio::get_process_info(process_id, path))
418+
.expect("Failed to get process info");
419+
assert_eq!(process_info.process_id, process_id);
420+
assert_eq!(process_info.parent_process_id, 0);
421+
assert_eq!(process_info.name, "systemd");
422+
}
423+
424+
#[cfg(feature = "tokio")]
425+
#[test]
426+
fn get_process_infos_tokio() {
427+
let rt = ::tokio::runtime::Runtime::new().unwrap();
428+
let process_infos = rt
429+
.block_on(tokio::get_process_infos())
430+
.expect("Failed to get process infos");
431+
assert!(process_infos.len() > 1);
432+
}
433+
}

0 commit comments

Comments
 (0)