in metalos/lib/shadow/src/shadow.rs [157:222]
fn test_mutate<SETUP, GET>(setup_fn: SETUP, get_fn: GET) -> Result<()>
where
// Takes in a shadow file content and gives back a built
// shadow file
SETUP: Fn(&str) -> Result<ShadowFile>,
// Takes in a shadow file and gives back a shadow file content
GET: Fn(&ShadowFile) -> Result<String>,
{
let content = r#"
adm:*:18397:0:99999:7:::
daemon:*:18397:0:99999:7:::
nobody:*:18397:0:99999:7:::
operator:*:18397:0:99999:7:::
root:$6$Y76FGZNuyp0WJ.K5$vwEc9SYniwXzDXyLJs66FD1A3DOLYsct1EgIBu45J5O71i4Tl9jnTQWVxZwx3MFqHO8s7Yszwgm7PBfqBPIvA1:18983:0:99999:7:::
test_user:$6$9Fbg5AzdDP6iLGf1$1U2RA4T7GMNHv9qccf4a9V.B/jXz.G1BhFg9NbELUPXVQdnNBT17SBK1SYPmCRNeCrUPhWuavnD9AQMUfz1ng1:18983:0:99999:7:::
shutdown:*:18397:0:99999:7:::
sshd:!!:18927::::::
"#.trim_start();
let mut file = setup_fn(content).context("Failed to setup test")?;
assert_eq!(
get_fn(&file).context("Failed to get new content from unchanged file")?,
r#"
adm:*:18397:0:99999:7:::
daemon:*:18397:0:99999:7:::
nobody:*:18397:0:99999:7:::
operator:*:18397:0:99999:7:::
root:$6$Y76FGZNuyp0WJ.K5$vwEc9SYniwXzDXyLJs66FD1A3DOLYsct1EgIBu45J5O71i4Tl9jnTQWVxZwx3MFqHO8s7Yszwgm7PBfqBPIvA1:18983:0:99999:7:::
shutdown:*:18397:0:99999:7:::
sshd:!!:18927::::::
test_user:$6$9Fbg5AzdDP6iLGf1$1U2RA4T7GMNHv9qccf4a9V.B/jXz.G1BhFg9NbELUPXVQdnNBT17SBK1SYPmCRNeCrUPhWuavnD9AQMUfz1ng1:18983:0:99999:7:::
"#.trim_start(),
);
file.update_record(ShadowRecord {
user: "new_user".to_string(),
hash: "$6$part1.$part2.part3.part4.".to_string(),
timestamp: 12345,
aging_info: "0:99999:7:::".to_string(),
});
file.update_record(ShadowRecord {
user: "test_user".to_string(),
hash: "unit_test_hash".to_string(),
timestamp: 45678,
aging_info: "0:99999:7:::".to_string(),
});
assert_eq!(
get_fn(&file).context("Failed to get new content from mutated file")?,
r#"
adm:*:18397:0:99999:7:::
daemon:*:18397:0:99999:7:::
new_user:$6$part1.$part2.part3.part4.:12345:0:99999:7:::
nobody:*:18397:0:99999:7:::
operator:*:18397:0:99999:7:::
root:$6$Y76FGZNuyp0WJ.K5$vwEc9SYniwXzDXyLJs66FD1A3DOLYsct1EgIBu45J5O71i4Tl9jnTQWVxZwx3MFqHO8s7Yszwgm7PBfqBPIvA1:18983:0:99999:7:::
shutdown:*:18397:0:99999:7:::
sshd:!!:18927::::::
test_user:unit_test_hash:45678:0:99999:7:::
"#.trim_start(),
);
Ok(())
}