diff --git a/src/db/access.rs b/src/db/access.rs index aa63d88..1612417 100644 --- a/src/db/access.rs +++ b/src/db/access.rs @@ -187,8 +187,10 @@ impl TryFrom for RoleIdentifier { fn try_from(s: String) -> std::result::Result { if let Some((name, location)) = split_once(&s, '@') { + let location = &location[1..]; Ok(RoleIdentifier::Remote { name: name.to_string(), location: location.to_string() }) } else if let Some((name, source)) = split_once(&s, '%') { + let source = &source[1..]; Ok(RoleIdentifier::Local { name: name.to_string(), source: source.to_string() }) } else { Err(RoleFromStrError::Invalid) @@ -500,11 +502,45 @@ mod tests { #[test] fn load_examples_roles_test() { - let roles = Role::load_file("examples/roles.toml") + let mut roles = Role::load_file("examples/roles.toml") .expect("Couldn't load the example role defs. Does `examples/roles.toml` exist?"); + let expected = vec![ + (RoleIdentifier::Local { name: "testrole".to_string(), source: "lmdb".to_string() }, + Role { + name: "Testrole".to_string(), + parents: vec![], + permissions: vec![ + PermRule::Subtree(PermissionBuf::from_string("lab.test".to_string())) + ], + }), + (RoleIdentifier::Local { name: "somerole".to_string(), source: "lmdb".to_string() }, + Role { + name: "Somerole".to_string(), + parents: vec![ + RoleIdentifier::local_from_str("lmdb".to_string(), "testparent".to_string()), + ], + permissions: vec![ + PermRule::Base(PermissionBuf::from_string("lab.some.admin".to_string())) + ], + }), + (RoleIdentifier::Local { name: "testparent".to_string(), source: "lmdb".to_string() }, + Role { + name: "Testparent".to_string(), + parents: vec![], + permissions: vec![ + PermRule::Base(PermissionBuf::from_string("lab.some.write".to_string())), + PermRule::Base(PermissionBuf::from_string("lab.some.read".to_string())), + PermRule::Base(PermissionBuf::from_string("lab.some.disclose".to_string())), + ], + }), + ]; - assert!(true) + for (id, role) in expected { + assert_eq!(roles.remove(&id).unwrap(), role); + } + + assert!(roles.is_empty()) } #[test] diff --git a/src/machine.rs b/src/machine.rs index 73b13aa..77fa7c1 100644 --- a/src/machine.rs +++ b/src/machine.rs @@ -112,38 +112,40 @@ mod tests { #[test] fn load_examples_descriptions_test() { - let machines = MachineDescription::load_file("examples/machines.toml") + let mut machines = MachineDescription::load_file("examples/machines.toml") .expect("Couldn't load the example machine defs. Does `examples/machines.toml` exist?"); - let expected: HashMap - = HashMap::from_iter(vec![ + let expected = + vec![ (Uuid::parse_str("e5408099-d3e5-440b-a92b-3aabf7683d6b").unwrap(), - MachineDescription { - name: "Somemachine".to_string(), - description: None, - privs: PrivilegesBuf { - disclose: PermissionBuf::from_string("lab.some.disclose".to_string()), - read: PermissionBuf::from_string("lab.some.read".to_string()), - write: PermissionBuf::from_string("lab.some.write".to_string()), - manage: PermissionBuf::from_string("lab.some.admin".to_string()), - }, - }), + MachineDescription { + name: "Somemachine".to_string(), + description: None, + privs: PrivilegesBuf { + disclose: PermissionBuf::from_string("lab.some.disclose".to_string()), + read: PermissionBuf::from_string("lab.some.read".to_string()), + write: PermissionBuf::from_string("lab.some.write".to_string()), + manage: PermissionBuf::from_string("lab.some.admin".to_string()), + }, + }), (Uuid::parse_str("eaabebae-34d1-4a3a-912a-967b495d3d6e").unwrap(), - MachineDescription { - name: "Testmachine".to_string(), - description: Some("An optional description".to_string()), - privs: PrivilegesBuf { - disclose: PermissionBuf::from_string("lab.test.read".to_string()), - read: PermissionBuf::from_string("lab.test.read".to_string()), - write: PermissionBuf::from_string("lab.test.write".to_string()), - manage: PermissionBuf::from_string("lab.test.admin".to_string()), - }, - }), - ].into_iter()); + MachineDescription { + name: "Testmachine".to_string(), + description: Some("An optional description".to_string()), + privs: PrivilegesBuf { + disclose: PermissionBuf::from_string("lab.test.read".to_string()), + read: PermissionBuf::from_string("lab.test.read".to_string()), + write: PermissionBuf::from_string("lab.test.write".to_string()), + manage: PermissionBuf::from_string("lab.test.admin".to_string()), + }, + }), + ]; - for u in ["e5408099-d3e5-440b-a92b-3aabf7683d6b", "eaabebae-34d1-4a3a-912a-967b495d3d6e"].iter() { - let uuid = Uuid::parse_str(u).unwrap(); - assert_eq!(machines[&uuid], expected[&uuid]); + for (id, machine) in expected.into_iter() { + + assert_eq!(machines.remove(&id).unwrap(), machine); } + + assert!(machines.is_empty()); } }