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]);
        }
Exemple #4
0
        /// <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);
        }
Exemple #10
0
        /// <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);
        }
Exemple #11
0
        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;
        }
Exemple #12
0
        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);
        }
Exemple #13
0
        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;
        }
Exemple #14
0
        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);
            }
        }
Exemple #15
0
        /// <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;
        }
Exemple #16
0
        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;
        }