public void Handler_SearchTestsSuccess()
        {
            Dictionary <string, string> parameters = new Dictionary <string, string>();

            // Create Objects To Search
            UserPrincipal up1 = Utility.CreateUser(workspaceName);
            UserPrincipal up2 = Utility.CreateUser(workspaceName);
            UserPrincipal up3 = Utility.CreateUser(workspaceName);
            UserPrincipal up4 = Utility.CreateUser(workspaceName);

            GroupPrincipal gp1 = Utility.CreateGroup(workspaceName);
            GroupPrincipal gp2 = Utility.CreateGroup(workspaceName);


            // Search For Users
            Console.WriteLine($"Searching For All Users In : [{workspaceName}]");
            parameters.Clear();
            parameters.Add("searchbase", workspaceName);
            parameters.Add("filter", "(objectClass=User)");
            parameters.Add("attributes", @"[ ""objectGUID"", ""objectSid"" ]");

            ActiveDirectoryHandlerResults result = Utility.CallPlan("Search", parameters);

            Assert.That(result.Results[0].Statuses[0].StatusId, Is.EqualTo(AdStatusType.Success));
            Assert.That(result.Results[0].SearchResults.Results.Count, Is.EqualTo(4));

            // Search For Groups
            Console.WriteLine($"Searching For All Groups In : [{workspaceName}]");
            parameters.Clear();
            parameters.Add("searchbase", workspaceName);
            parameters.Add("filter", "(objectClass=Group)");
            parameters.Add("attributes", @"[ ""objectGUID"", ""objectSid"" ]");

            result = Utility.CallPlan("Search", parameters);
            Assert.That(result.Results[0].Statuses[0].StatusId, Is.EqualTo(AdStatusType.Success));
            Assert.That(result.Results[0].SearchResults.Results.Count, Is.EqualTo(2));

            // Check Group Membership (GetAllGroups)
            DirectoryServices.AddToGroup(gp2.DistinguishedName, gp1.DistinguishedName, "group");
            DirectoryServices.AddToGroup(gp1.DistinguishedName, up1.DistinguishedName, "user");

            Console.WriteLine($"Searching For All Groups For User : [{up1.DistinguishedName}]");
            parameters.Clear();
            parameters.Add("distinguishedname", up1.DistinguishedName);

            result = Utility.CallPlan("GetAllGroups", parameters);
            Assert.That(result.Results[0].Statuses[0].StatusId, Is.EqualTo(AdStatusType.Success));
            Assert.That(result.Results[0].SearchResults.Results.Count, Is.EqualTo(3));

            // Delete Search Objects
            Utility.DeleteUser(up1.DistinguishedName);
            Utility.DeleteUser(up2.DistinguishedName);
            Utility.DeleteUser(up3.DistinguishedName);
            Utility.DeleteUser(up4.DistinguishedName);
            Utility.DeleteGroup(gp1.DistinguishedName);
            Utility.DeleteGroup(gp2.DistinguishedName);
        }
        public void Core_AddNonExistantGroupToGroup()
        {
            // Get Group That Does Not Exist
            String groupName = $"testgroup_{Utility.GenerateToken( 8 )}";
            String groupDistinguishedName = $"OU={groupName},{workspaceName}";

            Console.WriteLine($"Adding Group [{groupDistinguishedName}] Which Should Not Exist To Group [{group.DistinguishedName}].");
            AdException ex = Assert.Throws <AdException>(() => DirectoryServices.AddToGroup(group.DistinguishedName, groupDistinguishedName, "group"));

            Console.WriteLine($"Exception Message : {ex.Message}");
            Assert.That(ex.Message, Contains.Substring("cannot be found"));
        }
        public void Core_GroupManagementTestSuccess()
        {
            // Add User To Group
            UserPrincipal       user = Utility.CreateUser(workspaceName);
            UserPrincipalObject upo  = DirectoryServices.GetUser(user.DistinguishedName, true, false, false);
            int beforeCount          = upo.Groups.Count;

            Console.WriteLine($"Adding User [{user.Name}] To Group [{group.Name}].");
            DirectoryServices.AddToGroup(group.DistinguishedName, user.DistinguishedName, "user");
            upo = DirectoryServices.GetUser(user.DistinguishedName, true, false, false);
            int afterCount = upo.Groups.Count;

            Assert.That(afterCount, Is.EqualTo(beforeCount + 1));

            // Remove User From Group
            beforeCount = afterCount;
            Console.WriteLine($"Removing User [{user.Name}] From Group [{group.Name}].");
            DirectoryServices.RemoveFromGroup(group.DistinguishedName, user.DistinguishedName, "user");
            upo        = DirectoryServices.GetUser(user.DistinguishedName, true, false, false);
            afterCount = upo.Groups.Count;
            Assert.That(afterCount, Is.EqualTo(beforeCount - 1));

            // Delete User
            Utility.DeleteUser(user.DistinguishedName);

            // Add Group To Group
            GroupPrincipal       newGroup = Utility.CreateGroup(workspaceName);
            GroupPrincipalObject gpo      = DirectoryServices.GetGroup(newGroup.DistinguishedName, true, false, false);

            beforeCount = gpo.Groups.Count;
            Console.WriteLine($"Adding Group [{newGroup.Name}] To Group [{group.Name}].");
            DirectoryServices.AddToGroup(group.DistinguishedName, newGroup.DistinguishedName, "group");
            gpo        = DirectoryServices.GetGroup(newGroup.DistinguishedName, true, false, false);
            afterCount = gpo.Groups.Count;
            Assert.That(afterCount, Is.EqualTo(beforeCount + 1));

            // Remove Group From Group
            beforeCount = afterCount;
            Console.WriteLine($"Removing Group [{newGroup.Name}] From Group [{group.Name}].");
            DirectoryServices.RemoveFromGroup(group.DistinguishedName, newGroup.DistinguishedName, "group");
            gpo        = DirectoryServices.GetGroup(newGroup.DistinguishedName, true, false, false);
            afterCount = gpo.Groups.Count;
            Assert.That(afterCount, Is.EqualTo(beforeCount - 1));

            // Delete Groups
            Utility.DeleteGroup(newGroup.DistinguishedName);
        }