public void Core_ModifyOrgUnitBadData()
        {
            String badOuName = $"ou=BadOrgUnit,{workspaceName}";

            DirectoryServices.CreateOrganizationUnit(badOuName, null);
            DirectoryEntryObject badOrgUnit = DirectoryServices.GetOrganizationalUnit(badOuName, false, true, false);
            Dictionary <string, List <string> > properties = new Dictionary <string, List <string> >();

            DirectoryServices.AddProperty(properties, "managedBy", "BadManager");
            Console.WriteLine($"Modify OrgUnit [{badOrgUnit.Name}] With Bad Property [ManagedBy]");
            AdException ex = Assert.Throws <AdException>(() => DirectoryServices.ModifyOrganizationUnit(badOrgUnit.Properties["distinguishedName"][0].ToString(), properties));

            DirectoryServices.DeleteOrganizationUnit(badOrgUnit.DistinguishedName);
        }
        public void Core_OrgUnitNotFound()
        {
            // Get OrgUnit That Does Not Exist
            String ouName = $"testou_{Utility.GenerateToken( 8 )}";
            String ouDistinguishedName = $"OU={ouName},{workspaceName}";

            Console.WriteLine($"Getting OrgUnit [{ouName}] Which Should Not Exist.");
            DirectoryEntryObject badOrgUnit = DirectoryServices.GetOrganizationalUnit(ouName, true, true, false);

            Assert.That(badOrgUnit, Is.Null);

            Console.WriteLine($"Getting OrgUnit Principal [{ouName}] Which Should Not Exist.");
            DirectoryEntry de = DirectoryServices.GetDirectoryEntry(ouDistinguishedName);

            Assert.That(de, Is.Null);
        }
        public void Core_PurgeRuleBadUser()
        {
            // Get Group That Does Not Exist
            String groupName = $"testgroup_{Utility.GenerateToken( 8 )}";
            String groupDistinguishedName = $"CN={groupName},{workspaceName}";

            String testOuName = $"ou=TestOrgUnit001,{workspaceName}";

            DirectoryServices.CreateOrganizationUnit(testOuName, null);
            DirectoryEntryObject ouo = DirectoryServices.GetOrganizationalUnit(testOuName, false, true, false);

            Console.WriteLine($"Purging AccessRule For Group [{groupName}] Which Should Not Exist From OrgUnit [{ouo.Name}].");
            AdException ex = Assert.Throws <AdException>(() => DirectoryServices.PurgeAccessRules(ouo.DistinguishedName, groupName));

            Console.WriteLine($"Exception Message : {ex.Message}");
            Assert.That(ex.Message, Contains.Substring("Can Not Be Found"));

            DirectoryServices.DeleteOrganizationUnit(ouo.DistinguishedName);
        }
        public void Core_SetRuleBadUser()
        {
            // Get Group That Does Not Exist
            String groupName = $"testgroup_{Utility.GenerateToken( 8 )}";
            String groupDistinguishedName = $"CN={groupName},{workspaceName}";

            String testOuName = $"ou=TestOrgUnit001,{workspaceName}";

            DirectoryServices.CreateOrganizationUnit(testOuName, null);
            DirectoryEntryObject ouo = DirectoryServices.GetOrganizationalUnit(testOuName, false, true, false);

            Console.WriteLine($"Setting AccessRule For Group [{groupName}] Which Should Not Exist On OrgUnit [{ouo.Name}].");
            AdException ex = Assert.Throws <AdException>(() => DirectoryServices.SetAccessRule(ouo.DistinguishedName, groupName, ActiveDirectoryRights.GenericRead, System.Security.AccessControl.AccessControlType.Allow, ActiveDirectorySecurityInheritance.None));

            Console.WriteLine($"Exception Message : {ex.Message}");
            Assert.That(ex.Message, Contains.Substring("Can Not Be Found"));

            DirectoryServices.DeleteOrganizationUnit(ouo.DistinguishedName);
        }
        public void Core_OrgUnitTestSuccess()
        {
            // Setup Test
            String name = $"testou_{Utility.GenerateToken( 8 )}";
            String distinguishedName = $"OU={name},{workspaceName}";
            Dictionary <string, List <string> > properties = new Dictionary <string, List <string> >();

            DirectoryServices.AddProperty(properties, "description", "Test OU");

            // Create OrgUnit
            Console.WriteLine($"Creating OrgUnit : [{distinguishedName}]");
            DirectoryServices.CreateOrganizationUnit(distinguishedName, properties);

            // Get OrgUnit By DistinguishedName
            Console.WriteLine($"Getting OrgUnit By DisginguishedName : [{distinguishedName}]");
            DirectoryEntryObject ouo = DirectoryServices.GetOrganizationalUnit(distinguishedName, true, true, false);

            Assert.That(ouo, Is.Not.Null);

            String guid = ouo.Guid.ToString();

            // Get OrgUnit By Name
            Console.WriteLine($"Getting OrgUnit By Name : [{name}]");
            ouo = DirectoryServices.GetOrganizationalUnit(name, false, false, false);
            Assert.That(ouo, Is.Not.Null);

            // Get OrgUnit By Name
            Console.WriteLine($"Getting OrgUnit By Guid : [{guid}]");
            ouo = DirectoryServices.GetOrganizationalUnit(guid, false, true, false);
            Assert.That(ouo, Is.Not.Null);
            Assert.That(ouo.Properties.ContainsKey("description"), Is.True);

            // Modify OrgUnit
            DirectoryServices.AddProperty(properties, "description", "~null~", true);
            DirectoryServices.ModifyOrganizationUnit(distinguishedName, properties);
            ouo = DirectoryServices.GetOrganizationalUnit(distinguishedName, false, true, false);
            Assert.That(ouo.Properties.ContainsKey("description"), Is.False);

            // Create AccessUser For AccessRule Tests (Below)
            DirectoryEntry orgUnit        = DirectoryServices.GetDirectoryEntry(distinguishedName);
            UserPrincipal  accessRuleUser = Utility.CreateUser(workspaceName);
            int            ruleCount      = DirectoryServices.GetAccessRules(orgUnit).Count;

            // Add Access Rule To OrgUnit
            Console.WriteLine($"Adding AccessRule For User [{accessRuleUser.Name}] To OrgUnit [{orgUnit.Name}].");
            DirectoryServices.AddAccessRule(orgUnit, accessRuleUser, ActiveDirectoryRights.GenericRead, System.Security.AccessControl.AccessControlType.Allow, ActiveDirectorySecurityInheritance.None);
            int newRuleCount = DirectoryServices.GetAccessRules(orgUnit).Count;

            Assert.That(newRuleCount, Is.GreaterThan(ruleCount));

            // Removing Access Rule From OrgUnit
            Console.WriteLine($"Removing AccessRule For User [{accessRuleUser.Name}] From OrgUnit [{orgUnit.Name}].");
            DirectoryServices.DeleteAccessRule(orgUnit, accessRuleUser, ActiveDirectoryRights.GenericRead, System.Security.AccessControl.AccessControlType.Allow, ActiveDirectorySecurityInheritance.None);
            newRuleCount = DirectoryServices.GetAccessRules(orgUnit).Count;
            Assert.That(newRuleCount, Is.EqualTo(ruleCount));

            // Seting Access Rule From OrgUnit
            Console.WriteLine($"Setting AccessRule For User [{accessRuleUser.Name}] On OrgUnit [{orgUnit.Name}].");
            DirectoryServices.SetAccessRule(orgUnit, accessRuleUser, ActiveDirectoryRights.GenericRead, System.Security.AccessControl.AccessControlType.Allow, ActiveDirectorySecurityInheritance.None);
            newRuleCount = DirectoryServices.GetAccessRules(orgUnit).Count;
            Assert.That(newRuleCount, Is.GreaterThan(ruleCount));

            // Purge Access Rule From OrgUnit
            Console.WriteLine($"Purging AccessRules For User [{accessRuleUser.Name}] From OrgUnit [{orgUnit.Name}].");
            DirectoryServices.PurgeAccessRules(orgUnit, accessRuleUser);
            newRuleCount = DirectoryServices.GetAccessRules(orgUnit).Count;
            Assert.That(newRuleCount, Is.EqualTo(ruleCount));

            // Delete AccessRule User
            Utility.DeleteUser(accessRuleUser.DistinguishedName);

            // Delete OrgUnit
            Console.WriteLine($"Deleting OrgUnit : [{distinguishedName}]");
            DirectoryServices.DeleteOrganizationUnit(distinguishedName);
            ouo = DirectoryServices.GetOrganizationalUnit(distinguishedName, false, false, false);
            Assert.That(ouo, Is.Null);
        }