fn test_mutate()

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(())
    }