]>
Commit | Line | Data |
---|---|---|
f7d4e4b5 | 1 | use anyhow::{bail, Error}; |
f3832b63 DM |
2 | |
3 | #[macro_use] | |
4 | extern crate proxmox_backup; | |
5 | ||
6 | extern crate tokio; | |
7 | extern crate nix; | |
8 | ||
51f0ab1e | 9 | use proxmox::try_block; |
17ff2cb0 | 10 | |
67a5cf47 DM |
11 | use pbs_api_types::{Authid, UPID}; |
12 | ||
f3832b63 DM |
13 | use proxmox_backup::server; |
14 | use proxmox_backup::tools; | |
15 | ||
f3832b63 DM |
16 | fn 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 |
36 | fn 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 | } |