1 // Tape Media Pool tests - test compute_media_state() function
3 // # cargo test --release tape::test::compute_media_state
5 use std
::path
::PathBuf
;
12 use pbs_api_types
::{MediaStatus, MediaSetPolicy, RetentionPolicy}
;
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_compute_media_state() -> Result
<(), Error
> {
36 let testdir
= create_testdir("test_compute_media_state")?
;
40 let mut inventory
= Inventory
::load(&testdir
)?
;
42 // tape1: free, assigned to pool
43 let tape1_uuid
= inventory
.generate_assigned_tape("tape1", "p1", ctime
);
45 // tape2: single tape media set
46 let sl2
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 0, ctime
+ 10, None
);
47 let tape2_uuid
= inventory
.generate_used_tape("tape2", sl2
, 0);
49 // tape3: inclomplete two tape media set
50 let sl3
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 0, ctime
+ 20, None
);
51 let tape3_uuid
= inventory
.generate_used_tape("tape3", sl3
, 0);
53 // tape4,tape5: current_set: complete two tape media set
54 let sl4
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 0, ctime
+ 30, None
);
55 let sl5
= MediaSetLabel
::with_data("p1", sl4
.uuid
.clone(), 1, ctime
+ 35, None
);
57 let tape4_uuid
= inventory
.generate_used_tape("tape4", sl4
, 0);
58 let tape5_uuid
= inventory
.generate_used_tape("tape5", sl5
, 0);
60 let pool
= MediaPool
::new(
63 MediaSetPolicy
::AlwaysCreate
,
64 RetentionPolicy
::KeepForever
,
71 assert_eq
!(pool
.lookup_media(&tape1_uuid
)?
.status(), &MediaStatus
::Writable
);
73 // intermediate tapes should be Full
74 assert_eq
!(pool
.lookup_media(&tape2_uuid
)?
.status(), &MediaStatus
::Full
);
75 assert_eq
!(pool
.lookup_media(&tape3_uuid
)?
.status(), &MediaStatus
::Full
);
76 assert_eq
!(pool
.lookup_media(&tape4_uuid
)?
.status(), &MediaStatus
::Full
);
78 // last tape is writable
79 assert_eq
!(pool
.lookup_media(&tape5_uuid
)?
.status(), &MediaStatus
::Writable
);
85 fn test_media_expire_time() -> Result
<(), Error
> {
87 let testdir
= create_testdir("test_media_expire_time")?
;
91 let mut inventory
= Inventory
::load(&testdir
)?
;
93 // tape0: single tape media set
94 let sl0
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 0, ctime
, None
);
95 let tape0_uuid
= inventory
.generate_used_tape("tape0", sl0
, 0);
97 // tape1: single tape media set
98 let sl1
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 0, ctime
+ 60, None
);
99 let tape1_uuid
= inventory
.generate_used_tape("tape1", sl1
, 0);
101 // tape2: single tape media set
102 let sl2
= MediaSetLabel
::with_data("p1", Uuid
::generate(), 0, ctime
+ 120, None
);
103 let tape2_uuid
= inventory
.generate_used_tape("tape2", sl2
, 0);
105 let event
= proxmox_systemd
::time
::parse_calendar_event("*:0/2")?
;
106 let span
= proxmox_systemd
::time
::parse_time_span("120 seconds")?
;
108 let pool
= MediaPool
::new(
111 MediaSetPolicy
::CreateAt(event
),
112 RetentionPolicy
::ProtectFor(span
),
118 assert_eq
!(pool
.lookup_media(&tape0_uuid
)?
.status(), &MediaStatus
::Full
);
119 assert_eq
!(pool
.lookup_media(&tape1_uuid
)?
.status(), &MediaStatus
::Full
);
120 assert_eq
!(pool
.lookup_media(&tape2_uuid
)?
.status(), &MediaStatus
::Writable
);
122 assert_eq
!(pool
.media_is_expired(&pool
.lookup_media(&tape0_uuid
)?
, 0), false);
123 assert_eq
!(pool
.media_is_expired(&pool
.lookup_media(&tape0_uuid
)?
, 60), false);
124 assert_eq
!(pool
.media_is_expired(&pool
.lookup_media(&tape0_uuid
)?
, 120), false);
125 assert_eq
!(pool
.media_is_expired(&pool
.lookup_media(&tape0_uuid
)?
, 180), true);
127 assert_eq
!(pool
.media_is_expired(&pool
.lookup_media(&tape1_uuid
)?
, 0), false);
128 assert_eq
!(pool
.media_is_expired(&pool
.lookup_media(&tape1_uuid
)?
, 60), false);
129 assert_eq
!(pool
.media_is_expired(&pool
.lookup_media(&tape1_uuid
)?
, 120), false);
130 assert_eq
!(pool
.media_is_expired(&pool
.lookup_media(&tape1_uuid
)?
, 180), false);
131 assert_eq
!(pool
.media_is_expired(&pool
.lookup_media(&tape1_uuid
)?
, 190), false);
132 assert_eq
!(pool
.media_is_expired(&pool
.lookup_media(&tape1_uuid
)?
, 240), true);