1 // Tape Media Pool tests - test current_set_usable() function
3 // # cargo test --release tape::test::current_set_usable
5 use std
::path
::PathBuf
;
8 use proxmox_uuid
::Uuid
;
10 use pbs_api_types
::{RetentionPolicy, MediaSetPolicy}
;
22 fn create_testdir(name
: &str) -> Result
<PathBuf
, Error
> {
23 let mut testdir
: PathBuf
= String
::from("./target/testout").into();
24 testdir
.push(std
::module_path
!());
27 let _
= std
::fs
::remove_dir_all(&testdir
);
28 let _
= std
::fs
::create_dir_all(&testdir
);
34 fn test_current_set_usable_1() -> Result
<(), Error
> {
36 let testdir
= create_testdir("test_current_set_usable_1")?
;
38 // pool without any media
40 let pool
= MediaPool
::new(
43 MediaSetPolicy
::AlwaysCreate
,
44 RetentionPolicy
::KeepForever
,
50 assert_eq
!(pool
.current_set_usable()?
, false);
56 fn test_current_set_usable_2() -> Result
<(), Error
> {
58 let testdir
= create_testdir("test_current_set_usable_2")?
;
62 let mut inventory
= Inventory
::load(&testdir
)?
;
64 inventory
.generate_assigned_tape("tape1", "p1", ctime
);
66 // pool with one free media
67 let pool
= MediaPool
::new(
70 MediaSetPolicy
::AlwaysCreate
,
71 RetentionPolicy
::KeepForever
,
77 assert_eq
!(pool
.current_set_usable()?
, false);
83 fn test_current_set_usable_3() -> Result
<(), Error
> {
85 let testdir
= create_testdir("test_current_set_usable_3")?
;
89 let mut inventory
= Inventory
::load(&testdir
)?
;
91 let sl1
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 0, ctime
, None
);
93 inventory
.generate_used_tape("tape1", sl1
, ctime
); // Note: Tape is offline
95 // pool with one media in current set, only use online media
96 let pool
= MediaPool
::new(
99 MediaSetPolicy
::AlwaysCreate
,
100 RetentionPolicy
::KeepForever
,
101 Some(String
::from("changer1")),
106 assert_eq
!(pool
.current_set_usable()?
, false);
112 fn test_current_set_usable_4() -> Result
<(), Error
> {
114 let testdir
= create_testdir("test_current_set_usable_4")?
;
118 let mut inventory
= Inventory
::load(&testdir
)?
;
120 let sl1
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 0, ctime
, None
);
122 inventory
.generate_used_tape("tape1", sl1
, ctime
); // Note: Tape is offline
124 // pool with one media in current set, use offline media
125 let pool
= MediaPool
::new(
128 MediaSetPolicy
::AlwaysCreate
,
129 RetentionPolicy
::KeepForever
,
135 assert_eq
!(pool
.current_set_usable()?
, true);
141 fn test_current_set_usable_5() -> Result
<(), Error
> {
143 let testdir
= create_testdir("test_current_set_usable_5")?
;
147 let mut inventory
= Inventory
::load(&testdir
)?
;
149 let sl1
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 0, ctime
, None
);
150 let sl2
= MediaSetLabel
::with_data("p1", sl1
.uuid
.clone(), 1, ctime
+ 1, None
);
152 inventory
.generate_used_tape("tape1", sl1
, ctime
);
153 inventory
.generate_used_tape("tape2", sl2
, ctime
);
155 // pool with two media in current set
156 let pool
= MediaPool
::new(
159 MediaSetPolicy
::AlwaysCreate
,
160 RetentionPolicy
::KeepForever
,
166 assert_eq
!(pool
.current_set_usable()?
, true);
172 fn test_current_set_usable_6() -> Result
<(), Error
> {
174 let testdir
= create_testdir("test_current_set_usable_6")?
;
178 let mut inventory
= Inventory
::load(&testdir
)?
;
180 let sl2
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 1, ctime
+ 1, None
);
182 inventory
.generate_used_tape("tape2", sl2
, ctime
);
184 // pool with incomplete current set
185 let pool
= MediaPool
::new(
188 MediaSetPolicy
::AlwaysCreate
,
189 RetentionPolicy
::KeepForever
,
195 assert
!(pool
.current_set_usable().is_err());
201 fn test_current_set_usable_7() -> Result
<(), Error
> {
203 let testdir
= create_testdir("test_current_set_usable_7")?
;
207 let mut inventory
= Inventory
::load(&testdir
)?
;
209 let sl1
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 0, ctime
, None
);
210 let sl2
= MediaSetLabel
::with_data("p1", sl1
.uuid
.clone(), 1, ctime
+ 1, None
);
212 // generate damaged tape
213 let tape1_uuid
= inventory
.generate_used_tape("tape1", sl1
, ctime
);
214 inventory
.set_media_status_damaged(&tape1_uuid
)?
;
216 inventory
.generate_used_tape("tape2", sl2
, ctime
);
219 // pool with one two media in current set, one set to damaged
220 let pool
= MediaPool
::new(
223 MediaSetPolicy
::AlwaysCreate
,
224 RetentionPolicy
::KeepForever
,
230 assert
!(pool
.current_set_usable().is_err());