proxmox-backup/src/tape/test/alloc_writable_media.rs
Thomas Lamprecht d1d74c4367 typo fixes all over the place
found and semi-manually replaced by using:
 codespell -L mut -L crate -i 3 -w

Mostly in comments, but also email notification and two occurrences
of misspelled  'reserved' struct member, which where not used and
cargo build did not complain about the change, soo ...

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2021-03-10 16:39:57 +01:00

187 lines
4.6 KiB
Rust

// Tape Media Pool tests - test allow_ritable_media() function
//
// # cargo test --release tape::test::alloc_writable_media
use std::path::PathBuf;
use anyhow::Error;
use crate::{
tools::systemd::time::parse_time_span,
api2::types::{
MediaSetPolicy,
RetentionPolicy,
},
tape::{
Inventory,
MediaPool,
},
};
fn create_testdir(name: &str) -> Result<PathBuf, Error> {
let mut testdir: PathBuf = String::from("./target/testout").into();
testdir.push(std::module_path!());
testdir.push(name);
let _ = std::fs::remove_dir_all(&testdir);
let _ = std::fs::create_dir_all(&testdir);
Ok(testdir)
}
#[test]
fn test_alloc_writable_media_1() -> Result<(), Error> {
let testdir = create_testdir("test_alloc_writable_media_1")?;
let mut ctime = 0;
let mut pool = MediaPool::new(
"p1",
&testdir,
MediaSetPolicy::ContinueCurrent,
RetentionPolicy::KeepForever,
None,
None,
)?;
ctime += 10;
pool.start_write_session(ctime)?;
// no media in pool
assert!(pool.alloc_writable_media(ctime).is_err());
Ok(())
}
#[test]
fn test_alloc_writable_media_2() -> Result<(), Error> {
let testdir = create_testdir("test_alloc_writable_media_2")?;
let mut inventory = Inventory::load(&testdir)?;
// tape1: free, assigned to pool
let tape1_uuid = inventory.generate_assigned_tape("tape1", "p1", 0);
let mut pool = MediaPool::new(
"p1",
&testdir,
MediaSetPolicy::ContinueCurrent,
RetentionPolicy::KeepForever,
None,
None,
)?;
let ctime = 10;
pool.start_write_session(ctime)?;
// use free media
assert_eq!(pool.alloc_writable_media(ctime)?, tape1_uuid);
// call again, media is still writable
assert_eq!(pool.alloc_writable_media(ctime)?, tape1_uuid);
// mark tape1 a Full
pool.set_media_status_full(&tape1_uuid)?;
// next call fail because there is no free media
assert!(pool.alloc_writable_media(ctime).is_err());
Ok(())
}
#[test]
fn test_alloc_writable_media_3() -> Result<(), Error> {
let testdir = create_testdir("test_alloc_writable_media_3")?;
let mut inventory = Inventory::load(&testdir)?;
// tape1: free, assigned to pool
let tape1_uuid = inventory.generate_assigned_tape("tape1", "p1", 0);
// tape2: free, assigned to pool
let tape2_uuid = inventory.generate_assigned_tape("tape1", "p1", 1);
let mut pool = MediaPool::new(
"p1",
&testdir,
MediaSetPolicy::ContinueCurrent,
RetentionPolicy::KeepForever,
None,
None,
)?;
let mut ctime = 10;
pool.start_write_session(ctime)?;
// use free media
assert_eq!(pool.alloc_writable_media(ctime)?, tape1_uuid);
// call again, media is still writable
ctime += 1;
assert_eq!(pool.alloc_writable_media(ctime)?, tape1_uuid);
// mark tape1 a Full
pool.set_media_status_full(&tape1_uuid)?;
// use next free media
ctime += 1;
assert_eq!(pool.alloc_writable_media(ctime)?, tape2_uuid);
// mark tape2 a Full
pool.set_media_status_full(&tape2_uuid)?;
// next call fail because there is no free media
ctime += 1;
assert!(pool.alloc_writable_media(ctime).is_err());
Ok(())
}
#[test]
fn test_alloc_writable_media_4() -> Result<(), Error> {
let testdir = create_testdir("test_alloc_writable_media_4")?;
let mut inventory = Inventory::load(&testdir)?;
// tape1: free, assigned to pool
let tape1_uuid = inventory.generate_assigned_tape("tape1", "p1", 0);
let mut pool = MediaPool::new(
"p1",
&testdir,
MediaSetPolicy::AlwaysCreate,
RetentionPolicy::ProtectFor(parse_time_span("12s")?),
None,
None,
)?;
let start_time = 10;
pool.start_write_session(start_time)?;
// use free media
assert_eq!(pool.alloc_writable_media(start_time)?, tape1_uuid);
// call again, media is still writable
assert_eq!(pool.alloc_writable_media(start_time + 3)?, tape1_uuid);
// mark tape1 a Full
pool.set_media_status_full(&tape1_uuid)?;
// next call fail because there is no free media
assert!(pool.alloc_writable_media(start_time + 5).is_err());
// Create new media set, so that previous set can expire
pool.start_write_session(start_time + 10)?;
assert!(pool.alloc_writable_media(start_time + 10).is_err());
assert!(pool.alloc_writable_media(start_time + 11).is_err());
// tape1 is now expired
assert_eq!(pool.alloc_writable_media(start_time + 12)?, tape1_uuid);
Ok(())
}