public void It_has_a_Selection_that_contains_ObjectID_and_ObjectType_even_if_set_to_null() { var it = new SearchCriteria { Selection = null }; Assert.AreEqual("ObjectID", it.Selection[0]); Assert.AreEqual("ObjectType", it.Selection[1]); }
public void It_has_a_Selection_that_contains_ObjectID_and_ObjectType_even_if_one_of_thos_values_is_missing() { var it = new SearchCriteria { Selection = new List<string>{ "ObjectID" } }; Assert.AreEqual("ObjectID", it.Selection[0]); Assert.AreEqual("ObjectType", it.Selection[1]); }
public void It_has_a_Selection_that_contains_ObjectID_and_ObjectType_even_if_set_to_empty_list() { var it = new SearchCriteria { Selection = new List<string>() }; Assert.AreEqual("ObjectID", it.Selection[0]); Assert.AreEqual("ObjectType", it.Selection[1]); }
/// <summary> /// Search the Identity Manager (async await) /// </summary> /// <param name="criteria"></param> /// <param name="pageSize"></param> /// <returns></returns> public async Task<IEnumerable<IdmResource>> SearchAsync(SearchCriteria criteria, int pageSize = 50) { var results = new List<IdmResource>(); try { if (criteria.Selection.Contains("*")) { // Can throw the ArgumentOutOfRangeException if there are no results, in which case just return the empty list await SetupGetStar(criteria); } PullInfo pullInfo = await PreparePagedSearchAsync(criteria, pageSize); // Pull all results PagedSearchResults pagedResults; PagingContext pagingContext = pullInfo.PagingContext; do { pagedResults = await GetPagedResultsAsync(pageSize, pagingContext); results.AddRange(pagedResults.Results); } while (pagedResults.EndOfSequence == null); } catch (ArgumentOutOfRangeException) { } return results; }
public void It_has_a_Selection_that_contains_ObjectID_and_ObjectType_by_default() { var it = new SearchCriteria(); Assert.AreEqual("ObjectID", it.Selection[0]); Assert.AreEqual("ObjectType", it.Selection[1]); }
public async Task It_throws_an_exception_when_valid_yet_unknown_xpath_is_searched_for() { // Arrange var it = IdmNetClientFactory.BuildClient(); var criteria = new SearchCriteria("/foo"); // Act await it.SearchAsync(criteria); }
public async Task It_throws_an_exception_when_it_encounters_bad_xpath() { // Arrange var it = IdmNetClientFactory.BuildClient(); var criteria = new SearchCriteria("<3#"); // Act await it.SearchAsync(criteria); }
public async Task T011_It_can_get_resources_back_from_a_search_a_page_at_a_time() { // Arrange var it = IdmNetClientFactory.BuildClient(); var criteria = new SearchCriteria("/ObjectTypeDescription"); criteria.Selection.Add("DisplayName"); PagedSearchResults pagedSearchResults = await it.GetPagedResultsAsync(criteria, 5); PagingContext pagingContext = pagedSearchResults.PagingContext; // Act var pagedResults = await it.GetPagedResultsAsync(5, pagingContext); // Assert Assert.AreEqual(5, pagedResults.Results.Count); Assert.IsTrue(pagedResults.Results[0].DisplayName.Length > 0); Assert.AreEqual("/ObjectTypeDescription", pagedResults.PagingContext.Filter); Assert.AreEqual(10, pagedResults.PagingContext.CurrentIndex); Assert.AreEqual("Forwards", pagedResults.PagingContext.EnumerationDirection); Assert.AreEqual("9999-12-31T23:59:59.9999999", pagedResults.PagingContext.Expires); Assert.AreEqual("ObjectID", pagedResults.PagingContext.Selection[0]); Assert.AreEqual("ObjectType", pagedResults.PagingContext.Selection[1]); Assert.AreEqual("DisplayName", pagedResults.PagingContext.Selection[2]); Assert.AreEqual("DisplayName", pagedResults.PagingContext.Sorting.SortingAttributes[0].AttributeName); Assert.AreEqual(true, pagedResults.PagingContext.Sorting.SortingAttributes[0].Ascending); Assert.AreEqual(null, pagedResults.EndOfSequence); Assert.AreEqual(true, pagedResults.Items is XmlNode[]); Assert.AreEqual(5, ((XmlNode[])(pagedResults.Items)).Length); }
public async Task T010_It_can_do_a_search_and_return_the_first_page_of_results_and_info_on_retrieving_subsequent_pages_if_any() { // Arrange var it = IdmNetClientFactory.BuildClient(); var criteria = new SearchCriteria("/ObjectTypeDescription"); criteria.Selection.Add("DisplayName"); // Act PagedSearchResults result = await it.GetPagedResultsAsync(criteria, 5); // Assert Assert.AreEqual("/ObjectTypeDescription", result.PagingContext.Filter); Assert.AreEqual(5, result.PagingContext.CurrentIndex); Assert.AreEqual("Forwards", result.PagingContext.EnumerationDirection); Assert.AreEqual("9999-12-31T23:59:59.9999999", result.PagingContext.Expires); Assert.AreEqual("ObjectID", result.PagingContext.Selection[0]); Assert.AreEqual("ObjectType", result.PagingContext.Selection[1]); Assert.AreEqual("DisplayName", result.PagingContext.Selection[2]); Assert.AreEqual("DisplayName", result.PagingContext.Sorting.SortingAttributes[0].AttributeName); Assert.AreEqual(true, result.PagingContext.Sorting.SortingAttributes[0].Ascending); Assert.AreEqual("ObjectTypeDescription", result.Results[0].ObjectType); }
/// <summary> /// Search the Identity Manager (async await) /// </summary> /// <param name="criteria"></param> /// <param name="pageSize"></param> /// <returns></returns> public async Task<PagedSearchResults> GetPagedResultsAsync(SearchCriteria criteria, int pageSize = 50) { if (criteria.Selection.Contains("*")) { await SetupGetStar(criteria); } PullInfo pullInfo = await PreparePagedSearchAsync(criteria, pageSize); // Pull all results PagingContext pagingContext = pullInfo.PagingContext; return await GetPagedResultsAsync(pageSize, pagingContext); }
private async Task<Message> EnumerateSearch(SearchCriteria criteria) { var enumerateMessage = Message.CreateMessage( MessageVersion.Default, SoapConstants.EnumerateAction, criteria, new SoapXmlSerializer(typeof(SearchCriteria))); enumerateMessage.Headers.Add(MessageHeader.CreateHeader("IncludeCount", "http://schemas.microsoft.com/2006/11/ResourceManagement", null, false)); var enumerateResponseMessage = await _searchClient.EnumerateAsync(enumerateMessage); // Check for enumerate fault if (enumerateResponseMessage.IsFault) throw new SoapFaultException("Enumerate Fault: " + enumerateResponseMessage); return enumerateResponseMessage; }
private async Task SetupGetStar(SearchCriteria criteria) { criteria.Selection = new List<string> { "ObjectType" }; PullInfo objectTypePullInfo = await PreparePagedSearchAsync(criteria, 1); PagingContext objectTypePagingContext = objectTypePullInfo.PagingContext; PagedSearchResults objectTypeResults = await GetPagedResultsAsync(1, objectTypePagingContext); string objectType = objectTypeResults.Results[0].ObjectType; criteria.Selection = await GetAttributeNamesForObjectType(objectType); }
private async Task<Schema> BuildSchemaObject(string objectType) { var criteria = new SearchCriteria(String.Format("/ObjectTypeDescription[Name='{0}']", objectType)) { Selection = new List<string> { "DisplayName", "CreatedTime", "Creator", "Description", "Name", "ObjectID", "ObjectType", "ResourceTime", "UsageKeyword" } }; IEnumerable<IdmResource> resources = await SearchAsync(criteria); var result = new Schema(resources.FirstOrDefault()); return result; }
private async Task AddBindingDescriptions(Schema result) { var bindingCriteria = new SearchCriteria(String.Format("/BindingDescription[BoundObjectType='{0}']", result.ObjectID)) { Selection = new List<string> { "DisplayName", "CreatedTime", "Creator", "Description", "Name", "ObjectID", "ObjectType", "ResourceTime", "UsageKeyword", "BoundObjectType", "BoundAttributeType", "Required" } }; IEnumerable<IdmResource> bindingResources = await SearchAsync(bindingCriteria); foreach (var bindingResource in bindingResources) { var binding = new BindingDescription(bindingResource); var attrTypeResource = await GetAsync(binding.BoundAttributeType.ObjectID, new List<string> { "DisplayName", "CreatedTime", "Creator", "Description", "Name", "ObjectID", "ObjectType", "ResourceTime", "UsageKeyword", "DataType", "Multivalued" } ); var attrType = new AttributeTypeDescription(attrTypeResource); binding.BoundAttributeType = attrType; result.BindingDescriptions.Add(binding); } }
/// <summary> /// Get the number of Identity Manager resources that match the given XPath Filter. /// </summary> /// <param name="filter">Search filter</param> /// <returns>Number of matching resources</returns> public async Task<int> GetCountAsync(string filter) { var criteria = new SearchCriteria { Filter = new Filter { Query = filter } }; Message enumerateResponseMessage = await EnumerateSearch(criteria); var response = enumerateResponseMessage.GetBody<EnumerateResponse>(new SoapXmlSerializer(typeof(EnumerateResponse))); return response.EnumerationDetail.Count; }
private async Task<PullInfo> PreparePagedSearchAsync(SearchCriteria criteria, int pageSize) { var enumerateResponseMessage = await EnumerateSearch(criteria); var pullInfo = new PullInfo { PageSize = pageSize, EnumerateResponse = enumerateResponseMessage.GetBody<EnumerateResponse>(new SoapXmlSerializer(typeof(EnumerateResponse))), }; return pullInfo; }