mirror of
https://github.com/nitnelave/lldap.git
synced 2023-04-12 14:25:13 +00:00
ldap wildcard handler, add tests
This commit is contained in:
parent
e5c80b9f17
commit
5150d8341f
@ -1636,6 +1636,151 @@ mod tests {
|
|||||||
]
|
]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_search_wildcards() {
|
||||||
|
use chrono::TimeZone;
|
||||||
|
let mut mock = MockTestBackendHandler::new();
|
||||||
|
|
||||||
|
mock.expect_list_users().returning(|_| {
|
||||||
|
Ok(vec![User {
|
||||||
|
user_id: UserId::new("bob_1"),
|
||||||
|
email: "bob@bobmail.bob".to_string(),
|
||||||
|
display_name: "Bôb Böbberson".to_string(),
|
||||||
|
first_name: "Bôb".to_string(),
|
||||||
|
last_name: "Böbberson".to_string(),
|
||||||
|
..Default::default()
|
||||||
|
}])
|
||||||
|
});
|
||||||
|
mock.expect_list_groups()
|
||||||
|
.with(eq(Some(GroupRequestFilter::And(vec![]))))
|
||||||
|
.returning(|_| {
|
||||||
|
Ok(vec![Group {
|
||||||
|
id: GroupId(1),
|
||||||
|
display_name: "group_1".to_string(),
|
||||||
|
users: vec![UserId::new("bob"), UserId::new("john")],
|
||||||
|
}])
|
||||||
|
});
|
||||||
|
let mut ldap_handler = setup_bound_handler(mock).await;
|
||||||
|
|
||||||
|
// Test simple wildcard
|
||||||
|
let request =
|
||||||
|
make_search_request("dc=example,dc=com", LdapFilter::And(vec![]), vec!["*", "+"]);
|
||||||
|
|
||||||
|
// all: "objectclass", "dn", "uid", "mail", "givenname", "sn", "cn"
|
||||||
|
// Operational: "createtimestamp"
|
||||||
|
|
||||||
|
let expected_result = vec![
|
||||||
|
LdapOp::SearchResultEntry(LdapSearchResultEntry {
|
||||||
|
dn: "uid=bob_1,ou=people,dc=example,dc=com".to_string(),
|
||||||
|
attributes: vec![
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "objectclass".to_string(),
|
||||||
|
vals: vec![
|
||||||
|
"inetOrgPerson".to_string(),
|
||||||
|
"posixAccount".to_string(),
|
||||||
|
"mailAccount".to_string(),
|
||||||
|
"person".to_string(),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "dn".to_string(),
|
||||||
|
vals: vec!["uid=bob_1,ou=people,dc=example,dc=com".to_string()],
|
||||||
|
},
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "uid".to_string(),
|
||||||
|
vals: vec!["bob_1".to_string()],
|
||||||
|
},
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "mail".to_string(),
|
||||||
|
vals: vec!["bob@bobmail.bob".to_string()],
|
||||||
|
},
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "givenname".to_string(),
|
||||||
|
vals: vec!["Bôb".to_string()],
|
||||||
|
},
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "sn".to_string(),
|
||||||
|
vals: vec!["Böbberson".to_string()],
|
||||||
|
},
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "cn".to_string(),
|
||||||
|
vals: vec!["Bôb Böbberson".to_string()],
|
||||||
|
},
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "createtimestamp".to_string(),
|
||||||
|
vals: vec![chrono::Utc.timestamp(0, 0).to_rfc3339()],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
// "objectclass", "dn", "uid", "cn", "member", "uniquemember"
|
||||||
|
LdapOp::SearchResultEntry(LdapSearchResultEntry {
|
||||||
|
dn: "cn=group_1,ou=groups,dc=example,dc=com".to_string(),
|
||||||
|
attributes: vec![
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "objectclass".to_string(),
|
||||||
|
vals: vec!["groupOfUniqueNames".to_string()],
|
||||||
|
},
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "dn".to_string(),
|
||||||
|
vals: vec!["cn=group_1,ou=groups,dc=example,dc=com".to_string()],
|
||||||
|
},
|
||||||
|
// UID
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "uid".to_string(),
|
||||||
|
vals: vec!["group_1".to_string()],
|
||||||
|
},
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "cn".to_string(),
|
||||||
|
vals: vec!["group_1".to_string()],
|
||||||
|
},
|
||||||
|
//member / uniquemember : "uid={},ou=people,{}"
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "member".to_string(),
|
||||||
|
vals: vec![
|
||||||
|
"uid=bob,ou=people,dc=example,dc=com".to_string(),
|
||||||
|
"uid=john,ou=people,dc=example,dc=com".to_string(),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
LdapPartialAttribute {
|
||||||
|
atype: "uniquemember".to_string(),
|
||||||
|
vals: vec![
|
||||||
|
"uid=bob,ou=people,dc=example,dc=com".to_string(),
|
||||||
|
"uid=john,ou=people,dc=example,dc=com".to_string(),
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}),
|
||||||
|
make_search_success(),
|
||||||
|
];
|
||||||
|
|
||||||
|
assert_eq!(ldap_handler.do_search(&request).await, expected_result);
|
||||||
|
|
||||||
|
let request2 =
|
||||||
|
make_search_request("dc=example,dc=com", LdapFilter::And(vec![]), vec!["*", "*"]);
|
||||||
|
|
||||||
|
assert_eq!(ldap_handler.do_search(&request2).await, expected_result);
|
||||||
|
|
||||||
|
let request3 = make_search_request(
|
||||||
|
"dc=example,dc=com",
|
||||||
|
LdapFilter::And(vec![]),
|
||||||
|
vec!["*", "+", "+"],
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(ldap_handler.do_search(&request3).await, expected_result);
|
||||||
|
|
||||||
|
let request4 =
|
||||||
|
make_search_request("dc=example,dc=com", LdapFilter::And(vec![]), vec![""; 0]);
|
||||||
|
|
||||||
|
assert_eq!(ldap_handler.do_search(&request4).await, expected_result);
|
||||||
|
|
||||||
|
let request5 = make_search_request(
|
||||||
|
"dc=example,dc=com",
|
||||||
|
LdapFilter::And(vec![]),
|
||||||
|
vec!["objectclass", "dn", "uid", "*"],
|
||||||
|
);
|
||||||
|
|
||||||
|
assert_eq!(ldap_handler.do_search(&request5).await, expected_result);
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_search_wrong_base() {
|
async fn test_search_wrong_base() {
|
||||||
|
Loading…
Reference in New Issue
Block a user