]> git.proxmox.com Git - proxmox-backup.git/blame - tests/worker-task-abort.rs
start new proxmox-rest-server workspace
[proxmox-backup.git] / tests / worker-task-abort.rs
CommitLineData
f7d4e4b5 1use anyhow::{bail, Error};
f3832b63
DM
2
3#[macro_use]
4extern crate proxmox_backup;
5
6extern crate tokio;
7extern crate nix;
8
51f0ab1e 9use proxmox::try_block;
17ff2cb0 10
67a5cf47
DM
11use pbs_api_types::{Authid, UPID};
12
f3832b63
DM
13use proxmox_backup::server;
14use proxmox_backup::tools;
15
f3832b63
DM
16fn garbage_collection(worker: &server::WorkerTask) -> Result<(), Error> {
17
18 worker.log("start garbage collection");
19
20 for i in 0..50 {
21 worker.fail_on_abort()?;
22
23 flog!(worker, "progress {}", i);
24
25 std::thread::sleep(std::time::Duration::from_millis(10));
26 }
27
28 worker.log("end garbage collection");
29
44288184 30 Ok(())
f3832b63
DM
31}
32
33
36c6e7bb
DM
34#[test]
35#[ignore]
f3832b63
DM
36fn worker_task_abort() -> Result<(), Error> {
37
38 server::create_task_log_dirs()?;
39
40 use std::sync::{Arc, Mutex};
41
42 let errmsg: Arc<Mutex<Option<String>>> = Arc::new(Mutex::new(None));
43 let errmsg1 = errmsg.clone();
44
0bfcea6a 45 let rt = tokio::runtime::Runtime::new().unwrap();
96839893 46 rt.block_on(async move {
f3832b63 47
a68768cf
TL
48 let mut commando_sock = server::CommandoSocket::new(server::our_ctrl_sock());
49
f3832b63 50 let init_result: Result<(), Error> = try_block!({
a68768cf 51 server::register_task_control_commands(&mut commando_sock)?;
f3832b63
DM
52 server::server_state_init()?;
53 Ok(())
54 });
55
56 if let Err(err) = init_result {
57 eprintln!("unable to start daemon - {}", err);
96839893 58 return;
f3832b63
DM
59 }
60
36c6e7bb
DM
61 if let Err(err) = commando_sock.spawn() {
62 eprintln!("unable to spawn command socket - {}", err);
63 return;
64 }
65
f3832b63 66 let errmsg = errmsg1.clone();
e7cb4dc5
WB
67 let res = server::WorkerTask::new_thread(
68 "garbage_collection",
69 None,
67a5cf47 70 Authid::root_auth_id().clone(),
e7cb4dc5
WB
71 true,
72 move |worker| {
73 println!("WORKER {}", worker);
74
75 let result = garbage_collection(&worker);
76 tools::request_shutdown();
77
78 if let Err(err) = result {
79 println!("got expected error: {}", err);
80 } else {
81 let mut data = errmsg.lock().unwrap();
82 *data = Some(String::from("thread finished - seems abort did not work as expected"));
83 }
84
85 Ok(())
86 },
87 );
f3832b63
DM
88
89 match res {
90 Err(err) => {
91 println!("unable to start worker - {}", err);
92 }
93 Ok(wid) => {
94 println!("WORKER: {}", wid);
67a5cf47 95 server::abort_worker_async(wid.parse::<UPID>().unwrap());
36c6e7bb
DM
96 server::wait_for_local_worker(&wid).await.unwrap();
97 }
f3832b63 98 }
96839893 99 });
f3832b63
DM
100
101 let data = errmsg.lock().unwrap();
102 match *data {
103 Some(ref err) => bail!("Error: {}", err),
104 None => {},
105 }
106
107 Ok(())
108}