コード例 #1
0
        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);
        }
コード例 #2
0
        public async Task It_can_get_resources_even_without_an_initial_search_call_if_you_know_what_you_are_doing()
        {
            // Arrange
            var           it            = IdmNetClientFactory.BuildClient();
            PagingContext pagingContext = new PagingContext
            {
                CurrentIndex         = 0,
                Filter               = "/ObjectTypeDescription",
                Selection            = new[] { "ObjectID", "ObjectType", "DisplayName" },
                Sorting              = new Sorting(),
                EnumerationDirection = "Forwards",
                Expires              = "9999-12-31T23:59:59.9999999"
            };

            // 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(null, pagedResults.EndOfSequence);
            Assert.AreEqual(true, pagedResults.Items is XmlNode[]);
            Assert.AreEqual(5, ((XmlNode[])(pagedResults.Items)).Length);
        }
コード例 #3
0
        public async Task T009_It_can_delete_objects_from_Identity_Manager()
        {
            // Arrange
            var         it       = IdmNetClientFactory.BuildClient();
            IdmResource toDelete =
                await it.PostAsync(new IdmResource { ObjectType = "Person", DisplayName = "Test User" });

            // Act
            Message result = await it.DeleteAsync(toDelete.ObjectID);


            // Assert
            Assert.IsFalse(result.IsFault);
            try
            {
                await it.GetAsync(toDelete.ObjectID, new List <string> {
                    "DisplayName"
                });

                Assert.Fail("Should not make it here");
            }
            catch (KeyNotFoundException)
            {
                // OK
            }
        }
コード例 #4
0
        private static async Task AssertReplaceOk(string attrName, string attrValue1, string attrValue2)
        {
            var         it           = IdmNetClientFactory.BuildClient();
            IdmResource testResource = await CreateTestPerson(it);

            try
            {
                // Act
                await it.ReplaceValueAsync(testResource.ObjectID, attrName, attrValue1);

                await it.ReplaceValueAsync(testResource.ObjectID, attrName, attrValue2);

                // Assert
                var searchResult =
                    await it.SearchAsync(new SearchCriteria
                {
                    Filter =
                        new Filter
                    {
                        Query = "/Person[ObjectID='" + testResource.ObjectID + "']"
                    },
                    Selection = new List <string> {
                        attrName
                    }
                });

                Assert.AreEqual(attrValue2, searchResult.First().GetAttrValue(attrName));
            }
            finally
            {
                // Afterwards
                it.DeleteAsync(testResource.ObjectID);
            }
        }
コード例 #5
0
        public async Task CreateTheUser()
        {
            // Create the user
            var ouContex = new PrincipalContext(ContextType.Domain, "fimdom.lab", "CN=Users,DC=fimdom,DC=lab");
            var up       = new UserPrincipal(ouContex)
            {
                SamAccountName = "ApprovalTestUser01", Enabled = true
            };

            up.SetPassword("Password1");
            var sidBytes = new byte[28];

            up?.Sid.GetBinaryForm(sidBytes, 0);

            // Create the user in identity manager
            IdmNetClient idmClient = IdmNetClientFactory.BuildClient();

            var person = new Person
            {
                DisplayName = "Approval Test User 01",
                AccountName = "ApprovalTestUser01",
                Domain      = "FIMDOM",
                ObjectSID   = sidBytes
            };

            var result = await idmClient.PostAsync(person);
        }
コード例 #6
0
        public async Task It_throws_an_exception_when_attempting_to_delete_an_object_that_does_not_exist()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            await it.DeleteAsync("bad object id");
        }
コード例 #7
0
        public async Task It_throws_when_passing_a_null_resource_to_create()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            await it.PostAsync(null);
        }
コード例 #8
0
        public async Task It_throws_when_attempting_to_delete_a_null_ObjectID()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            await it.DeleteAsync(null);
        }
コード例 #9
0
        public async Task It_returns_0_records_when_no_records_match_search()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            var searchResults = await it.SearchAsync(new SearchCriteria("/Configuration"), 25);

            Assert.AreEqual(0, searchResults.Count());
        }
コード例 #10
0
        public async Task It_throws_an_exception_when_trying_to_create_an_invalid_resource()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            var newUser = new IdmResource();
            await it.PostAsync(newUser);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        public static async Task MainAsync()
        {
            _json  = File.ReadAllText("AttributeToObjectMapping.json");
            Client = IdmNetClientFactory.BuildClient();

            _objectTypes = await GetObjectTypes();

            await GenerateCode();
        }
コード例 #14
0
        public async Task It_returns_the_same_number_for_both_GetCount_and_Search()
        {
            // Arrange
            var it    = IdmNetClientFactory.BuildClient();
            int count = await it.GetCountAsync("/ConstantSpecifier");

            var searchResults = await it.SearchAsync(new SearchCriteria("/ConstantSpecifier"), 25);

            Assert.AreEqual(count, searchResults.Count());
        }
コード例 #15
0
        public async Task T007_It_can_return_the_number_of_matching_records_for_a_given_search()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            int result = await it.GetCountAsync("/ConstantSpecifier");

            // Assert
            Assert.AreEqual(97, result);
        }
コード例 #16
0
        public async Task T005_It_can_get_a_resource_by_its_ObjectID()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            IdmResource result = await it.GetAsync("c51c9ef3-2de0-4d4e-b30b-c1a18e79c56e", null);

            // Assert
            Assert.AreEqual("c51c9ef3-2de0-4d4e-b30b-c1a18e79c56e", result.ObjectID);
            Assert.AreEqual("ObjectTypeDescription", result.ObjectType);
        }
コード例 #17
0
        public async Task T006_It_can_get_any_or_all_attributes_for_a_resource_by_its_ObjectID()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            IdmResource result = await it.GetAsync("c51c9ef3-2de0-4d4e-b30b-c1a18e79c56e", new List <string> {
                "*"
            });

            // Assert
            Assert.AreEqual(6, result.Attributes.Count);
            Assert.AreEqual("c51c9ef3-2de0-4d4e-b30b-c1a18e79c56e", result.ObjectID);
            Assert.AreEqual("ObjectTypeDescription", result.ObjectType);
            Assert.AreEqual("Approval", result.DisplayName);
        }
コード例 #18
0
        public async Task T001_It_can_search_for_resources_without_specifying_a_select_or_sort()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            var results = (await it.SearchAsync(new SearchCriteria("/ObjectTypeDescription"))).ToArray();

            // Assert
            Assert.IsTrue(results.Length >= 40);
            Assert.AreEqual(2, results[0].Attributes.Count);
            Assert.AreEqual("ObjectTypeDescription", results[0].ObjectType);
            Assert.AreEqual("ObjectTypeDescription", results[results.Length - 1].ObjectType);
            Assert.AreEqual("e1a42ced-6968-457c-b5c8-3f9a573295a6".Length, results[0].ObjectID.Length);
            Assert.AreEqual("e1a42ced-6968-457c-b5c8-3f9a573295a6".Length, results[1].ObjectID.Length);
        }
コード例 #19
0
        public async Task It_can_make_a_bunch_of_changes_at_the_same_time_for_a_single_resource()
        {
            // Arrange
            var         it           = IdmNetClientFactory.BuildClient();
            IdmResource testResource = await CreateTestPerson(it);

            var changes1 = new[]
            {
                new Change(ModeType.Replace, "FirstName", "FirstNameTest"),
                new Change(ModeType.Replace, "LastName", "LastNameTest"),
                new Change(ModeType.Add, "ProxyAddressCollection", "*****@*****.**"),
                new Change(ModeType.Add, "ProxyAddressCollection", "*****@*****.**"),
            };

            try
            {
                // Act
                Message result = await it.ChangeMultipleAttrbutes(testResource.ObjectID, changes1);

                // Assert
                Assert.IsFalse(result.IsFault);
                var searchResult =
                    await
                    it.SearchAsync(new SearchCriteria
                {
                    Filter =
                        new Filter
                    {
                        Query = "/Person[ObjectID='" + testResource.ObjectID + "']"
                    },
                    Selection = new List <string> {
                        "FirstName", "LastName", "ProxyAddressCollection"
                    }
                });

                var modifiedResource1 = searchResult.First();
                Assert.AreEqual("FirstNameTest", modifiedResource1.GetAttrValue("FirstName"));
                Assert.AreEqual("LastNameTest", modifiedResource1.GetAttrValue("LastName"));
                Assert.IsTrue(modifiedResource1.GetAttrValues("ProxyAddressCollection").Contains("*****@*****.**"));
                Assert.IsTrue(modifiedResource1.GetAttrValues("ProxyAddressCollection").Contains("*****@*****.**"));
            }
            finally
            {
                // Afterwards
                it.DeleteAsync(testResource.ObjectID);
            }
        }
コード例 #20
0
        public async Task It_throws_an_exception_when_GetAsync_is_called_but_no_match_for_the_object_ID()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            try
            {
                IdmResource result = await it.GetAsync("c51c9ef3-f00d-4d4e-b30b-c1a18e79c56e", null);

                Assert.IsTrue(false, "Should have encountered a KeyNotFoundException");
            }
            catch (KeyNotFoundException)
            {
                // Expected Exception
            }
        }
コード例 #21
0
        public async Task It_doesnt_add_superflous_attributes_on_create()
        {
            // Arrange
            var         it           = IdmNetClientFactory.BuildClient();
            IdmResource createResult = null;

            try
            {
                var newUser = new IdmResource
                {
                    Attributes = new List <IdmAttribute>
                    {
                        new IdmAttribute {
                            Name = "ObjectType", Values = new List <string> {
                                "Person"
                            }
                        },
                        new IdmAttribute {
                            Name = "ObjectID", Values = new List <string> {
                            }
                        },
                        new IdmAttribute {
                            Name = "DisplayName", Values = new List <string> {
                                "_Test User"
                            }
                        },
                    }
                };
                createResult = await it.PostAsync(newUser);

                // assert
                Assert.AreEqual(3, createResult.Attributes.Count);
                Assert.AreEqual(newUser.DisplayName, createResult.DisplayName);
                var result = await it.GetAsync(createResult.ObjectID, new List <string> {
                    "DisplayName"
                });

                Assert.AreEqual(newUser.DisplayName, result.DisplayName);
            }
            finally
            {
                // afterwards
                it.DeleteAsync(createResult.ObjectID);
            }
            // Act
        }
コード例 #22
0
        public async Task AllReferenceAttributes()
        {
            var client = IdmNetClientFactory.BuildClient();

            var resources =
                await
                client.SearchAsync(new SearchCriteria("/AttributeTypeDescription[DataType='Reference']")
            {
                Selection = new List <string> {
                    "Name"
                }
            });

            foreach (var resource in resources)
            {
                Debug.WriteLine(resource.GetAttrValue("Name"));
            }
        }
コード例 #23
0
        public async Task AllObjectTypeNames()
        {
            var client = IdmNetClientFactory.BuildClient();

            var objectTypesAsResources =
                await
                client.SearchAsync(new SearchCriteria("/ObjectTypeDescription")
            {
                Selection = new List <string> {
                    "Name"
                }
            });

            foreach (var resource in objectTypesAsResources)
            {
                Debug.WriteLine(resource.GetAttrValue("Name"));
            }
        }
コード例 #24
0
        public async Task It_can_delete_a_value_from_a_multi_valued_attribute()
        {
            // Arrange
            const string attrName     = "ProxyAddressCollection";
            const string attrValue1   = "*****@*****.**";
            const string attrValue2   = "*****@*****.**";
            var          it           = IdmNetClientFactory.BuildClient();
            IdmResource  testResource = await CreateTestPerson(it);

            try
            {
                await it.AddValueAsync(testResource.ObjectID, attrName, attrValue1);

                await it.AddValueAsync(testResource.ObjectID, attrName, attrValue2);

                // Act
                Message result = await it.RemoveValueAsync(testResource.ObjectID, attrName, attrValue2);

                // Assert
                Assert.IsFalse(result.IsFault);
                var searchResult =
                    await
                    it.SearchAsync(new SearchCriteria
                {
                    Filter =
                        new Filter
                    {
                        Query = "/Person[ObjectID='" + testResource.ObjectID + "']"
                    },
                    Selection = new List <string> {
                        "ProxyAddressCollection"
                    }
                });

                Assert.IsFalse(searchResult.First().GetAttrValues(attrName).Contains(attrValue2));
            }
            finally
            {
                // Afterwards
                it.DeleteAsync(testResource.ObjectID);
            }
        }
コード例 #25
0
        public async Task It_throws_an_exception_when_you_treat_a_single_valued_attribute_as_if_it_is_multi_valued()
        {
            // Arrange
            const string attrName     = "FirstName";
            const string attrValue    = "Testing";
            var          it           = IdmNetClientFactory.BuildClient();
            IdmResource  testResource = await CreateTestPerson(it);

            // Act
            try
            {
                Message result = await it.AddValueAsync(testResource.ObjectID, attrName, attrValue);

                Assert.IsFalse(result.IsFault);
            }
            finally
            {
                // Afterwards
                it.DeleteAsync(testResource.ObjectID);
            }
        }
コード例 #26
0
        public async Task T003_It_can_search_for_resources_and_return_all_attributes_with_Select_STAR()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            var results =
                (await
                 it.SearchAsync(new SearchCriteria("/BindingDescription")
            {
                Selection = new List <string> {
                    "*"
                },
            })).ToArray();

            // Assert
            Assert.IsTrue(results.Length >= 40);
            Assert.AreEqual(10, results[0].Attributes.Count);
            Assert.AreEqual("Account Name", results[0].DisplayName);
            Assert.AreEqual("XOML", results[results.Length - 1].DisplayName);
        }
コード例 #27
0
        public async Task It_can_return_the_entire_schema_for_a_particular_object_type()
        {
            // Arrange
            var personOid = "6cb7e506-b4b3-4901-8b8c-ff044f14e743";
            var it        = IdmNetClientFactory.BuildClient();

            // Act
            Schema result = await it.GetSchemaAsync("Person");

            //// Assert
            Assert.AreEqual("User", result.DisplayName);
            Assert.IsTrue(result.CreatedTime >= new DateTime(2010, 1, 1));
            Assert.AreEqual(null, result.Creator);
            Assert.AreEqual("This resource defines applicable policies to manage incoming requests. ", result.Description);
            Assert.AreEqual("Person", result.Name);
            Assert.AreEqual(personOid, result.ObjectID);
            Assert.AreEqual("ObjectTypeDescription", result.ObjectType);
            Assert.AreEqual(null, result.ResourceTime);
            Assert.AreEqual("Microsoft.ResouceManagement.PortalClient", result.UsageKeyword[0]);

            var expectedBindingCount = 59;

            Assert.IsTrue(result.BindingDescriptions.Count >= expectedBindingCount);
            for (int i = 0; i < expectedBindingCount; i++)
            {
                Assert.AreEqual(personOid, result.BindingDescriptions[i].BoundObjectType.ObjectID);
            }
            Assert.AreEqual("3e04bbbf-014f-413c-8d07-6276cd383be8", result.BindingDescriptions[0].BoundAttributeType.ObjectID);
            Assert.AreEqual(false, result.BindingDescriptions[0].Required);

            Assert.AreEqual("String", result.BindingDescriptions[0].BoundAttributeType.DataType);
            Assert.AreEqual(false, result.BindingDescriptions[0].BoundAttributeType.Multivalued);
            Assert.AreEqual("Account Name", result.BindingDescriptions[0].BoundAttributeType.DisplayName);
            Assert.AreEqual("User's log on name", result.BindingDescriptions[0].BoundAttributeType.Description);
            Assert.AreEqual(null, result.BindingDescriptions[0].BoundAttributeType.IntegerMaximum);
            Assert.AreEqual(null, result.BindingDescriptions[0].BoundAttributeType.IntegerMinimum);
            Assert.AreEqual("AccountName", result.BindingDescriptions[0].BoundAttributeType.Name);
            Assert.AreEqual(null, result.BindingDescriptions[0].BoundAttributeType.StringRegex);
            Assert.AreEqual("Microsoft.ResourceManagement.WebServices", result.BindingDescriptions[0].BoundAttributeType.UsageKeyword[0]);
        }
コード例 #28
0
        public async Task T002_It_can_search_for_resources_and_return_specific_attributes()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            var results =
                (await
                 it.SearchAsync(new SearchCriteria("/ObjectTypeDescription")
            {
                Selection = new List <string> {
                    "DisplayName", "Name"
                }
            })).ToArray();

            // Assert
            Assert.IsTrue(results.Length >= 40);
            Assert.AreEqual(4, results[0].Attributes.Count);
            Assert.IsTrue(results[0].DisplayName.Length > 0);
            Assert.IsTrue(results[results.Length - 1].DisplayName.Length > 0);
            Assert.AreEqual("ActivityInformationConfiguration", results[0].GetAttrValue("Name"));
            Assert.IsTrue(results[1].GetAttrValue("Name").Length > 0);
        }
コード例 #29
0
        public async Task T008_It_can_create_objects_in_Identity_Manager()
        {
            // Arrange
            var it = IdmNetClientFactory.BuildClient();

            // Act
            var newUser = new IdmResource {
                ObjectType = "Person", DisplayName = "Test User"
            };
            IdmResource createResult = await it.PostAsync(newUser);

            Assert.AreEqual(newUser.DisplayName, createResult.DisplayName);

            // assert
            var result = await it.GetAsync(createResult.ObjectID, new List <string> {
                "DisplayName"
            });

            Assert.AreEqual(newUser.DisplayName, result.DisplayName);

            // afterwards
            await it.DeleteAsync(createResult.ObjectID);
        }
コード例 #30
0
        public async Task It_can_modify_single_valued_attribute_that_was_previously_null()
        {
            // Arrange
            const string attrName     = "FirstName";
            const string attrValue    = "TestFirstName";
            var          it           = IdmNetClientFactory.BuildClient();
            IdmResource  testResource = await CreateTestPerson(it);

            try
            {
                // Act
                Message result = await it.ReplaceValueAsync(testResource.ObjectID, attrName, attrValue);

                // Assert
                Assert.IsFalse(result.IsFault);
                var searchResult =
                    await
                    it.SearchAsync(new SearchCriteria
                {
                    Filter =
                        new Filter
                    {
                        Query = "/Person[ObjectID='" + testResource.ObjectID + "']"
                    },
                    Selection = new List <string> {
                        attrName
                    }
                });

                Assert.AreEqual(attrValue, searchResult.First().GetAttrValue(attrName));
            }
            finally
            {
                // Afterwards
                it.DeleteAsync(testResource.ObjectID);
            }
        }