Skip to content

Commit

Permalink
chore(validation): Add unit tests; Fix assert_valid_model/assert_vali…
Browse files Browse the repository at this point in the history
…d_serial
  • Loading branch information
vifino committed Nov 30, 2023
1 parent 2fe45c9 commit 3e7e904
Showing 1 changed file with 73 additions and 4 deletions.
77 changes: 73 additions & 4 deletions src/helpers/validation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,15 @@ pub fn assert_compliant_nqn(nqn: &str) -> Result<()> {
}

pub fn assert_valid_model(model: &str) -> Result<()> {
if !is_ascii_only(model) && (model.len() <= 40) {
if !is_ascii_only(model) || model.is_empty() || (model.len() >= 40) {
Err(Error::InvalidModel(model.to_string()).into())
} else {
Ok(())
}
}
pub fn assert_valid_serial(model: &str) -> Result<()> {
if !is_ascii_only(model) && !model.is_empty() && (model.len() <= 40) {
Err(Error::InvalidModel(model.to_string()).into())
pub fn assert_valid_serial(serial: &str) -> Result<()> {
if !is_ascii_only(serial) || serial.is_empty() || (serial.len() >= 20) {
Err(Error::InvalidSerial(serial.to_string()).into())
} else {
Ok(())
}
Expand All @@ -70,3 +70,72 @@ pub fn assert_valid_nsid(nsid: u32) -> Result<()> {
Ok(())
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_valid_nqn() -> Result<()> {
let valid_nqn = "nqn.2023-11.sh.tty:unit-tests";
assert_valid_nqn(valid_nqn)?;

// Not ASCII.
assert!(assert_valid_nqn("nqn.2023-11.💩:invalid-nqn-unicode").is_err());
// Too long.
assert!(assert_valid_nqn("nqn.2023-11.sh.tty.foodreviews:Lopado­temacho­selacho­galeo­kranio­leipsano­drim­hypo­trimmato­silphio­karabo­melito­katakechy­meno­kichl­epi­kossypho­phatto­perister­alektryon­opte­kephallio­kigklo­peleio­lagoio­siraio­baphe­tragano­pterygon").is_err());

assert_valid_subsys_name(valid_nqn)?;
// Can't use discovery NQN.
assert!(assert_valid_subsys_name("nqn.2014-08.org.nvmexpress.discovery").is_err());

assert_compliant_nqn(valid_nqn)?;
// Doesn't start with nqn.
assert!(assert_compliant_nqn("blergh").is_err());
// UUID prefix is not UUID.
assert!(assert_compliant_nqn("nqn.2014-08.org.nvmexpress:uuid:42").is_err());
// UUID prefix is valid UUID.
assert_compliant_nqn(
"nqn.2014-08.org.nvmexpress:uuid:39cd48a6-dee4-4eaa-a415-4e21e7a789f9",
)?;

Ok(())
}

#[test]
fn test_valid_model() -> Result<()> {
assert_valid_model("Dumb-O-Tron 2000")?;
// Not ASCII-only
assert!(assert_valid_model("💩").is_err());
// Empty
assert!(assert_valid_model("").is_err());
// Too long.
assert!(assert_valid_model("I am running out of dumb things to write!").is_err());

Ok(())
}
#[test]
fn test_valid_serial() -> Result<()> {
assert_valid_model("1D10T")?;
// Not ASCII-only
assert!(assert_valid_serial("💩").is_err());
// Empty
assert!(assert_valid_serial("").is_err());
// Too long.
assert!(assert_valid_serial("dumb, but long enough").is_err());

Ok(())
}

#[test]
fn test_valid_nsid() -> Result<()> {
assert_valid_nsid(1)?;

// Can't use 0.
assert!(assert_valid_nsid(0).is_err());
// Can't use 0xffff_ffff.
assert!(assert_valid_nsid(0xffff_ffff).is_err());

Ok(())
}
}

0 comments on commit 3e7e904

Please sign in to comment.