]>
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 | |
f3832b63 DM |
11 | use proxmox_backup::server; |
12 | use proxmox_backup::tools; | |
13 | ||
f3832b63 DM |
14 | fn garbage_collection(worker: &server::WorkerTask) -> Result<(), Error> { |
15 | ||
16 | worker.log("start garbage collection"); | |
17 | ||
18 | for i in 0..50 { | |
19 | worker.fail_on_abort()?; | |
20 | ||
21 | flog!(worker, "progress {}", i); | |
22 | ||
23 | std::thread::sleep(std::time::Duration::from_millis(10)); | |
24 | } | |
25 | ||
26 | worker.log("end garbage collection"); | |
27 | ||
28 | Ok(()).into() | |
29 | } | |
30 | ||
31 | ||
132ba100 | 32 | #[test] #[ignore] |
f3832b63 DM |
33 | fn worker_task_abort() -> Result<(), Error> { |
34 | ||
35 | server::create_task_log_dirs()?; | |
36 | ||
37 | use std::sync::{Arc, Mutex}; | |
38 | ||
39 | let errmsg: Arc<Mutex<Option<String>>> = Arc::new(Mutex::new(None)); | |
40 | let errmsg1 = errmsg.clone(); | |
41 | ||
f374ba4c | 42 | let mut rt = tokio::runtime::Runtime::new().unwrap(); |
96839893 | 43 | rt.block_on(async move { |
f3832b63 DM |
44 | |
45 | let init_result: Result<(), Error> = try_block!({ | |
46 | server::create_task_control_socket()?; | |
47 | server::server_state_init()?; | |
48 | Ok(()) | |
49 | }); | |
50 | ||
51 | if let Err(err) = init_result { | |
52 | eprintln!("unable to start daemon - {}", err); | |
96839893 | 53 | return; |
f3832b63 DM |
54 | } |
55 | ||
56 | let errmsg = errmsg1.clone(); | |
e7cb4dc5 WB |
57 | let res = server::WorkerTask::new_thread( |
58 | "garbage_collection", | |
59 | None, | |
e6dc35ac | 60 | proxmox_backup::api2::types::Authid::root_auth_id().clone(), |
e7cb4dc5 WB |
61 | true, |
62 | move |worker| { | |
63 | println!("WORKER {}", worker); | |
64 | ||
65 | let result = garbage_collection(&worker); | |
66 | tools::request_shutdown(); | |
67 | ||
68 | if let Err(err) = result { | |
69 | println!("got expected error: {}", err); | |
70 | } else { | |
71 | let mut data = errmsg.lock().unwrap(); | |
72 | *data = Some(String::from("thread finished - seems abort did not work as expected")); | |
73 | } | |
74 | ||
75 | Ok(()) | |
76 | }, | |
77 | ); | |
f3832b63 DM |
78 | |
79 | match res { | |
80 | Err(err) => { | |
81 | println!("unable to start worker - {}", err); | |
82 | } | |
83 | Ok(wid) => { | |
84 | println!("WORKER: {}", wid); | |
85 | server::abort_worker_async(wid.parse::<server::UPID>().unwrap()); | |
86 | } | |
87 | } | |
96839893 | 88 | }); |
f3832b63 DM |
89 | |
90 | let data = errmsg.lock().unwrap(); | |
91 | match *data { | |
92 | Some(ref err) => bail!("Error: {}", err), | |
93 | None => {}, | |
94 | } | |
95 | ||
96 | Ok(()) | |
97 | } |