def __testuser(self): uname = '00000000%s' % randomName(5) self.users.append(uname) try: self.conn.newuser(uname, randomName(20)) except ldb.LdbError: pass # Ignore password issues return uname
def test_delegation(self): fzone_name = ('00000000.%s.com' % randomName(10)).lower() create_zone(self.creds.get_domain(), fzone_name, self.creds.get_username(), self.creds.get_password()) self.zones.append(fzone_name) self.__open_dns() self.press('Tab') for _ in range(0, 2): self.press('Down') self.press('Space') # Expand Forward Lookup Zones self.__select_zone(fzone_name) ### Create a delegation ### self.press('BTab') self.press('Enter') # Action for _ in range(0, 3): self.press('Down') self.assertSeen('New Delegation...') self.press('Enter') # New Delegation self.assertSeen('New Delegation Wizard') dname = randomName(10) self.press(dname) self.press('Tab') self.press('Enter') # Next self.assertSeen('Specify the names and IP addresses of the DNS servers') self.press('Tab') self.press('Enter') # Add self.assertSeen('New Name Server Record') self.press(self.creds.get_domain()) self.press('Tab') self.press('Enter') # Resolve for _ in range(0, 3): self.press('Tab') self.press('Enter') # OK for _ in range(0, 4): self.press('Tab') self.press('Enter') # Finish self.assertSeen(dname) ### Validate new delegation ### fqdn = '%s.%s' % (dname, fzone_name) self.press('Enter') # Properties self.assertSeen('%s Properties' % fqdn) self.press('BTab') self.press('Enter') # Cancel ### Delete the new delegation ### for _ in range(0, 2): self.press('Tab') self.press('Enter') # Action self.assertSeen('Delete') self.press('Enter') # Delete self.assertSeen('Do you want to delete the record %s from the server?' % fqdn) self.press('Enter') # Yes self.assertSeen('Record deleted successfully') self.press('Enter') # Ok sleep(3) self.assertNotSeen(dname)
def test_create_delete_txt_record(self): fzone_name = ('00000000.%s.com' % randomName(10)).lower() create_zone(self.creds.get_domain(), fzone_name, self.creds.get_username(), self.creds.get_password()) self.zones.append(fzone_name) self.__open_dns() self.press('Tab') for _ in range(0, 2): self.press('Down') self.press('Space') # Expand Forward Lookup Zones self.__select_zone(fzone_name) ### Create the TXT record ### self.press('BTab') self.press('Enter') # Action self.assertSeen('Other New Records...') for _ in range(0, 4): self.press('Down') self.press('Enter') # Other New Records self.assertSeen('New Resource Record Type') for _ in range(0, 5): self.press('Down') # Text (TXT) self.press('Tab') self.press('Enter') # Create Record self.assertSeen('Record name') self.press('Tab') rname = randomName(10) self.press(rname) self.press('Tab') rtext = ' '.join([randomName(5) for _ in range(0, 4)]) self.press(rtext) self.press('Tab') self.press('Enter') # OK for _ in range(0, 2): self.press('Tab') self.press('Enter') # Done self.assertSeen('Record added successfully') self.press('Enter') # Ok ### Verify the TXT record ### self.press('Enter') # Record Properties self.assertSeen('%s Properties' % rname) self.assertSeen(rtext) for _ in range(0, 3): self.press('Tab') self.press('Enter') # Cancel ### Delete the TXT record ### for _ in range(0, 2): self.press('Tab') self.press('Enter') # Action self.assertSeen('Delete') self.press('Enter') # Delete self.assertSeen('Do you want to delete the record %s from the server?' % rname) self.press('Enter') # Yes self.assertSeen('Record deleted successfully') self.press('Enter') # Ok self.assertNotSeen(rname)
def test_create_delete_gpo(self): self.__open_gpmc() ### Create a GPO ### self.press('Down') self.press('BTab') self.press('Enter') # Action menu self.assertSeen('Create a GPO in this domain, and Link it here...') self.press('Enter') self.assertSeen('New GPO') gpo_name = '00000000%s' % randomName(10) self.press(gpo_name) self.press('Tab') self.press('Enter') # OK ### Verify creation ### self.assertSeen(gpo_name) sleep(3) self.press('Tab') self.__select_gpo_by_name(gpo_name) ### Delete the GPO ### self.press('BTab') self.press('Enter') # Action menu self.press('Down') self.press('Enter') # Delete self.assertSeen('Do you want to delete this GPO and all links') self.press('Enter') # Yes self.assertNotSeen(gpo_name)
def test_create_delete_mx_record(self): fzone_name = ('00000000.%s.com' % randomName(10)).lower() create_zone(self.creds.get_domain(), fzone_name, self.creds.get_username(), self.creds.get_password()) self.zones.append(fzone_name) self.__open_dns() self.press('Tab') for _ in range(0, 2): self.press('Down') self.press('Space') # Expand Forward Lookup Zones self.__select_zone(fzone_name) ### Create MX record ### self.press('BTab') self.press('Enter') # Action self.assertSeen('│New Mail Exchanger \(MX\)\.\.\.\s*│') for _ in range(0, 2): self.press('Down') self.press('Enter') # New Mail Exchanger self.assertSeen('New Resource Record') self.press('Tab') mx = '00000000%s' % randomName(10) self.press(mx) self.press('Tab') self.press(self.creds.get_domain().lower()) for _ in range(0, 2): self.press('Tab') self.press('Enter') # OK self.assertSeen('Record added successfully') self.press('Enter') # Ok self.assertSeen('│%s\s*│Mail Exchanger \(MX\)\s*│\[10\] %s\.\s*│' % (mx, self.creds.get_domain().lower())) ### Delete MX record ### self.press('Up') self.press('Down') for _ in range(0, 2): self.press('Tab') self.press('Enter') # Action self.assertSeen('│Delete\s*│') self.press('Enter') # Delete self.assertSeen('Do you want to delete the record %s from the server\?' % mx) self.press('Enter') # Yes self.assertSeen('Record deleted successfully') self.press('Enter') # Ok sleep(3) self.assertNotSeen(mx)
def test_create_delete_forward_zone(self): self.__open_dns() self.press('Tab') for _ in range(0, 2): self.press('Down') ### Create a forward lookup zone ### fzone_name = ('00000000.%s.com' % randomName(10)).lower() self.press('BTab') self.press('Enter') # Action self.assertSeen('New Zone...') self.press('Enter') self.assertSeen('New Zone Wizard') self.press(fzone_name) self.press('Tab') self.press('Enter') # Finish self.assertSeen('Zone %s created successfully' % fzone_name) self.press('Enter') # Ok for _ in range(0, 3): self.press('Tab') self.press('Space') # Expand Forward Lookup Zones self.__select_zone(fzone_name) self.assertSeen(fzone_name) results = zonelist(self.creds.get_domain(), self.creds.get_username(), self.creds.get_password()) self.assertIn(fzone_name, results.keys()) ### Delete a forward lookup zone ### self.press('BTab') self.press('Enter') # Action for _ in range(0, 5): self.press('Down') self.assertSeen('│Delete\s*│') self.press('Enter') self.assertSeen('Do you want to delete the zone %s from the server?' % fzone_name) self.press('Enter') # Yes self.assertSeen('Zone %s deleted successfully' % fzone_name) self.press('Enter') # Ok sleep(3) for _ in range(0, 3): self.press('Tab') for _ in range(0, 2): self.press('Down') self.press('Space') sleep(1) self.assertNotSeen(fzone_name) results = zonelist(self.creds.get_domain(), self.creds.get_username(), self.creds.get_password()) self.assertNotIn(fzone_name, results.keys())
def test_create_delete_ou(self): self.__open_aduc() # Highlight the domain for _ in range(0, 50): self.press('Up') self.press('Tab') self.press('Tab') # Open the Action Menu self.press('BTab') self.press('Enter') self.assertSeen('New') # Select New self.press('Down') self.press('Enter') # Select Organizational Unit self.assertSeen('Organizational Unit') for _ in range(0, 5): self.press('Down') self.press('Enter') self.assertSeen('New Object - Organizationalunit') # Provide an OU name name = '00000000%s' % randomName(10) self.press(name) self.press('Tab') self.press('Enter') self.assertSeen(name, 'OU not found') # Delete the OU self.press('Tab') self.press('Tab') self.press('Down') self.press('Up') self.press('Tab') self.press('Tab') self.press('Enter') # Action menu self.assertSeen('Delete') self.press('Down') self.press('Enter') # Delete self.assertSeen("Are you sure you want to delete '%s'?" % name) self.press('Enter') # Yes self.assertNotSeen(name, 'OU found after deletion!')
def test_create_delete_group(self): self.__open_aduc() # Open the Action Menu self.press('BTab') self.press('Enter') self.assertSeen('New') # Select New self.press('Down') self.press('Enter') # Select Group self.assertSeen('Group') for _ in range(0, 2): self.press('Down') self.press('Enter') self.assertSeen('New Object - Group') # Group name, etc gname = '00000000%s' % randomName(5) self.press(gname) self.press('Tab') self.press(gname) self.press('BTab') self.press('BTab') self.press('BTab') self.press('Enter') self.assertSeen(gname, 'Group not found') # Delete the group self.press('Tab') self.press('Tab') self.press('Down') self.press('Up') # ADUC automatically selects the object, but does not update the menu self.press('Tab') self.press('Tab') self.press('Enter') # Action menu self.assertSeen('Delete') self.press('Down') self.press('Enter') # Delete self.assertSeen("Are you sure you want to delete '%s'?" % gname) self.press('Enter') # Yes self.assertNotSeen(gname, 'Group found after deletion!')
def test_modify_account_policy_gpo(self): self.__open_gpmc() ### Create a GPO ### self.press('Down') self.press('BTab') self.press('Enter') # Action menu self.assertSeen('Create a GPO in this domain, and Link it here...') self.press('Enter') self.assertSeen('New GPO') gpo_name = '00000000%s' % randomName(10) self.press(gpo_name) self.press('Tab') self.press('Enter') # OK ### Verify creation ### self.assertSeen(gpo_name) sleep(3) self.press('Tab') self.__select_gpo_by_name(gpo_name) ### Modify Password Policy ### self.press('BTab') self.press('Enter') # Action menu self.assertSeen('Edit...') self.press('Enter') # Edit self.assertSeen('Group Policy Management Editor') self.press('Down') # Policies self.press('Space') self.assertSeen('OS Settings') self.press('Down') # OS Settings self.press('Space') self.assertSeen('Security Settings') self.press('Down') # Security Settings self.press('Space') self.assertSeen('Account Policy') self.press('Down') # Account Policy self.press('Space') self.assertSeen('Password Policy') self.press('Down') # Password Policy self.assertSeen('Minimum password age\s*│Not Defined') self.press('Tab') self.press('Enter') # Minimum password age self.assertSeen('MinimumPasswordAge Properties') self.press('1') self.press('Tab') self.press('Enter') # OK self.assertSeen('Minimum password age\s*│1 days') self.press('Down') self.assertSeen('Maximum password age\s*│Not Defined') self.press('Enter') # Maximum password age self.assertSeen('MaximumPasswordAge Properties') self.press('99') self.press('Tab') self.press('Enter') # OK self.assertSeen('Maximum password age\s*│99 days') for _ in range(0, 2): self.press('Down') self.assertSeen('Minimum password length\s*│Not Defined') self.press('Enter') # Minimum password length self.assertSeen('MinimumPasswordLength Properties') self.press('10') self.press('Tab') self.press('Enter') # OK self.assertSeen('Minimum password length\s*│10 characters') for _ in range(0, 3): self.press('Down') self.assertSeen( 'Password must meet complexity requirements\s*│Not Defined') self.press('Enter') # Password must meet complexity requirements self.assertSeen('PasswordComplexity Properties') self.press('Down') self.press('Enter') self.press('Tab') self.press('Enter') # OK self.assertSeen( 'Password must meet complexity requirements\s*│Enabled') for _ in range(0, 4): self.press('Down') self.assertSeen('Enforce password history\s*│Not Defined') self.press('Enter') # Enforce password history self.assertSeen('PasswordHistorySize Properties') self.press('10') self.press('Tab') self.press('Enter') # OK self.assertSeen('Enforce password history\s*│10 passwords remembered') for _ in range(0, 5): self.press('Down') self.assertSeen( 'Store passwords using reversible encryption\s*│Not Defined') self.press('Enter') # Store passwords using reversible encryption self.assertSeen('ClearTextPassword Properties') self.press('Down') self.press('Enter') self.press('Tab') self.press('Enter') # OK self.assertSeen( 'Store passwords using reversible encryption\s*│Enabled') ### Modify Account Lockout Policy ### self.press('BTab') self.press('Down') self.press('Tab') self.assertSeen('Account lockout duration\s*│Not Defined') self.press('Enter') # Account lockout duration self.assertSeen('LockoutDuration Properties') self.press('10') self.press('Tab') self.press('Enter') # OK self.assertSeen('Account lockout duration\s*│10 minutes') self.press('Down') self.assertSeen('Account lockout threshold\s*│Not Defined') self.press('Enter') # Account lockout threshold self.assertSeen('LockoutBadCount Properties') self.press('3') self.press('Tab') self.press('Enter') # OK self.assertSeen( 'Account lockout threshold\s*│3 invalid logon attempts') for _ in range(0, 2): self.press('Down') self.assertSeen('Reset account lockout counter after\s*│Not Defined') self.press('Enter') # Reset account lockout counter after self.assertSeen('ResetLockoutCount Properties') self.press('10') self.press('Tab') self.press('Enter') # OK self.assertSeen('Reset account lockout counter after\s*│10 minutes') ### Modify Kerberos Policy ### self.press('BTab') self.press('Down') self.press('Tab') self.assertSeen('Maximum lifetime for user ticket\s*│Not Defined') self.press('Enter') # Maximum lifetime for user ticket self.assertSeen('MaxTicketAge Properties') self.press('10') self.press('Tab') self.press('Enter') # OK self.assertSeen('Maximum lifetime for user ticket\s*│10 hours') self.press('Down') self.assertSeen( 'Maximum lifetime for user ticket renewal\s*│Not Defined') self.press('Enter') # Maximum lifetime for user ticket renewal self.assertSeen('MaxRenewAge Properties') self.press('600') self.press('Tab') self.press('Enter') # OK self.assertSeen( 'Maximum lifetime for user ticket renewal\s*│600 minutes') for _ in range(0, 2): self.press('Down') self.assertSeen('Maximum lifetime for service ticket\s*│Not Defined') self.press('Enter') # Maximum lifetime for service ticket self.assertSeen('MaxServiceAge Properties') self.press('600') self.press('Tab') self.press('Enter') # OK self.assertSeen('Maximum lifetime for service ticket\s*│600 minutes') for _ in range(0, 3): self.press('Down') self.assertSeen( 'Maximum tolerance for computer clock synchronization\s*│Not Defined' ) self.press( 'Enter') # Maximum tolerance for computer clock synchronization self.assertSeen('MaxClockSkew Properties') self.press('5') self.press('Tab') self.press('Enter') # OK self.assertSeen( 'Maximum tolerance for computer clock synchronization\s*│5 minutes' ) for _ in range(0, 4): self.press('Down') self.assertSeen('Enforce user logon restrictions\s*│Not Defined') self.press('Enter') # Enforce user logon restrictions self.assertSeen('TicketValidateClient Properties') self.press('Down') self.press('Enter') self.press('Tab') self.press('Enter') # OK self.assertSeen('Enforce user logon restrictions\s*│Enabled') ### Close the Group Policy Management Editor ### self.press('Tab') self.press('Enter') # File self.press('Enter') # Exit self.__select_gpo_by_name(gpo_name) ### Delete the GPO ### self.press('BTab') self.press('Enter') # Action menu self.press('Down') self.press('Enter') # Delete self.assertSeen('Do you want to delete this GPO and all links') self.press('Enter') # Yes self.assertNotSeen(gpo_name)
def test_modify_browser_maintenance_gpo(self): self.__open_gpmc() ### Create a GPO ### self.press('Down') self.press('BTab') self.press('Enter') # Action menu self.assertSeen('Create a GPO in this domain, and Link it here...') self.press('Enter') self.assertSeen('New GPO') gpo_name = '00000000%s' % randomName(10) self.press(gpo_name) self.press('Tab') self.press('Enter') # OK ### Verify creation ### self.assertSeen(gpo_name) sleep(3) self.press('Tab') self.__select_gpo_by_name(gpo_name) ### Modify Browser Proxy Settings Policy ### self.press('BTab') self.press('Enter') # Action menu self.assertSeen('Edit...') self.press('Enter') # Edit self.assertSeen('Group Policy Management Editor') for _ in range(0, 3): self.press('Down') self.press('Space') # Policies self.assertSeen('OS Settings') self.press('Down') self.press('Space') # OS Settings self.assertSeen('Internet Browser Maintenance') self.press('Down') self.press('Space') # Internet Browser Maintenance self.assertSeen('Connection') self.press('Down') # Connection self.press('Tab') self.assertSeen('Proxy Settings\s*│Settings for proxy') self.press('Enter') # Proxy Settings self.assertSeen('Proxy Settings Properties') self.press('Down') self.press('Up') self.press('Enter') # Enable proxy settings self.press('Tab') self.press('example.com') # Address of HTTP proxy for _ in range(0, 5): self.press('Tab') self.press('Down') self.press('Up') self.press('Enter') # Use the same proxy server for all addresses for _ in range(0, 2): self.press('Tab') self.press('Enter') # OK self.assertNotSeen('Proxy Settings Properties') ### Reopen the dialog and ensure the settings were saved ### self.press('Enter') # Proxy Settings self.assertSeen('Enable proxy settings\s*│\s*│\s*│\s*│\s*Enabled') self.assertSeen('Address of HTTP proxy\s*│\s*│\s*│\s*│\s*example.com') self.assertSeen( 'Use the same proxy server for all addresses\s*│\s*│\s*│\s*│\s*Enabled' ) for _ in range(0, 2): self.press('BTab') self.press('Enter') # Cancel ### Modify Browser User Agent String Policy ### self.press('Down') self.assertSeen('User Agent String\s*│Settings for user agent string') self.press('Enter') self.assertSeen('User Agent String Properties') self.press('AppleTV6,2/11.1') self.press('Tab') self.press('Enter') # OK ### Reopen the dialog and ensure the settings were saved ### self.press('Down') self.press('Enter') self.assertSeen('AppleTV6,2/11.1') for _ in range(0, 2): self.press('BTab') self.press('Enter') # Cancel ### Close the Group Policy Management Editor ### self.press('Tab') self.press('Enter') # File self.press('Enter') # Exit self.__select_gpo_by_name(gpo_name) ### Delete the GPO ### self.press('BTab') self.press('Enter') # Action menu self.press('Down') self.press('Enter') # Delete self.assertSeen('Do you want to delete this GPO and all links') self.press('Enter') # Yes self.assertNotSeen(gpo_name)
def test_create_delete_user(self): self.__open_aduc() # Open the Action Menu self.press('BTab') self.press('Enter') self.assertSeen('New') # Select New self.press('Down') self.press('Enter') # Select User self.assertSeen('User') for _ in range(0, 6): self.press('Down') self.press('Enter') self.assertSeen('New Object - User') # Username, etc fname = '00000000%s' % randomName(5) ini = randomName(1) lname = randomName(8) self.press(fname) self.press('Tab') self.press(ini) self.press('Tab') self.press(lname) self.press('Tab') self.press(' '.join([fname, ini, lname])) uname = ('%s%s' % (fname[0], lname)).lower() self.press('Tab') self.press(uname) self.press('Tab') self.press(uname) self.press('Tab') self.press('Enter') # Next self.assertSeen('UID number:') # Enter a GID self.press('Tab') self.press('1000') for _ in range(0, 5): self.press('Tab') self.press('Enter') # Next self.assertSeen('User must change password at next logon') # Enter password, etc self.press('locDCpass1') self.press('Tab') self.press('locDCpass1') self.press('Tab') self.press('Space') # Uncheck User must change password self.press('Tab') self.press('Space') # Check Password never expires self.press('Tab') # Do not disable the account self.press('Tab') self.press('Tab') self.press('Enter') # Click finish self.assertSeen(' '.join([fname, ini, lname]), 'User not found') # Delete the user self.press('Tab') self.press('Tab') self.press('Down') self.press('Up') # ADUC automatically selects the object, but does not update the menu self.press('Tab') self.press('Tab') self.press('Enter') # Action menu self.assertSeen('Delete') for _ in range(0, 3): self.press('Down') self.press('Enter') # Delete self.assertSeen("Are you sure you want to delete '%s'?" % ' '.join([fname, ini, lname])) self.press('Enter') # Yes self.assertNotSeen(' '.join([fname, ini, lname]), 'User found after deletion!')
def __testgroup(self): gname = '00000000%s' % randomName(5) self.groups.append(gname) self.conn.newgroup(gname) return gname
def test_modify_user(self): self.__open_aduc() # Open the Action Menu self.press('BTab') self.press('Enter') self.assertSeen('New') # Select New self.press('Down') self.press('Enter') # Select User self.assertSeen('User') for _ in range(0, 6): self.press('Down') self.press('Enter') self.assertSeen('New Object - User') # Username, etc fname = '00000000%s' % randomName(5) ini = randomName(1) lname = randomName(8) self.press(fname) self.press('Tab') self.press(ini) self.press('Tab') self.press(lname) self.press('Tab') self.press(' '.join([fname, ini, lname])) uname = ('%s%s' % (fname[0], lname)).lower() self.press('Tab') self.press(uname) self.press('Tab') self.press(uname) self.press('Tab') self.press('Enter') # Next self.assertSeen('UID number:') # Enter a GID self.press('Tab') self.press('1000') for _ in range(0, 5): self.press('Tab') self.press('Enter') # Next self.assertSeen('User must change password at next logon') # Enter password, etc self.press('locDCpass1') self.press('Tab') self.press('locDCpass1') self.press('Tab') self.press('Space') # Uncheck User must change password self.press('Tab') self.press('Space') # Check Password never expires self.press('Tab') # Do not disable the account self.press('Tab') self.press('Tab') self.press('Enter') # Click finish self.assertSeen(' '.join([fname, ini, lname]), 'User not found') ### Disable the user ### self.press('Tab') self.press('Tab') self.press('Enter') self.assertSeen('%s Properties' % ' '.join([fname, ini, lname]), 'Properties dialog not found') self.press('Right') self.assertSeen('Street:') # Address Tab self.press('Right') # Account Tab self.assertSeen('\[ \] Account is disabled', 'Account should not be disabled!') for _ in range(0, 5): self.press('Tab') self.press('Space') # Check 'Account is disabled' self.press('Tab') self.press('Enter') # OK ### Verify account is disabled ### for _ in range(0, 3): self.press('Tab') self.press('Enter') self.assertSeen('%s Properties' % ' '.join([fname, ini, lname]), 'Properties dialog not found') self.press('Right') self.assertSeen('Street:') # Address Tab self.press('Right') # Account Tab self.assertSeen('\[x\] Account is disabled', 'Account should be disabled!') ### Modify user shell ### self.press('Right') # Unix Attributes tab self.assertSeen('/bin/sh', 'Should have seen the default shell for test user') for _ in range(0, 5): self.press('Tab') self.press('BSpace') self.press('BSpace') self.press('bash') self.assertSeen('/bin/bash') self.press('Tab') self.press('Enter') # OK ### Verify user shell has changed ### for _ in range(0, 3): self.press('Tab') self.press('Enter') self.assertSeen('%s Properties' % ' '.join([fname, ini, lname]), 'Properties dialog not found') for _ in range(0, 3): self.press('Right') self.assertSeen('/bin/bash', 'Should have seen the modified shell for test user') self.press('BTab') self.press('BTab') self.press('Enter') # Cancel # Delete the user self.press('Tab') self.press('Tab') self.press('Tab') self.press('Down') self.press('Up') # ADUC automatically selects the object, but does not update the menu self.press('Tab') self.press('Tab') self.press('Enter') # Action menu self.assertSeen('Delete') for _ in range(0, 3): self.press('Down') self.press('Enter') # Delete self.assertSeen("Are you sure you want to delete '%s'?" % ' '.join([fname, ini, lname])) self.press('Enter') # Yes self.assertNotSeen(' '.join([fname, ini, lname]), 'User found after deletion!')
def test_move_group(self): self.__open_aduc() ### Create a test OU ### # Highlight the domain for _ in range(0, 50): self.press('Up') self.press('Tab') self.press('Tab') # Open the Action Menu self.press('BTab') self.press('Enter') self.assertSeen('New') # Select New self.press('Down') self.press('Enter') # Select Organizational Unit self.assertSeen('Organizational Unit') for _ in range(0, 5): self.press('Down') self.press('Enter') self.assertSeen('New Object - Organizationalunit') # Provide an OU name name = '00000000%s' % randomName(10) self.press(name) self.press('Tab') self.press('Enter') self.assertSeen(name, 'OU not found') ### Create a test Group ### self.press('Tab') for _ in range(0, 50): # Select Users self.press('Down') # Open the Action Menu self.press('BTab') self.press('Enter') self.assertSeen('New') # Select New self.press('Down') self.press('Enter') # Select Group self.assertSeen('Group') for _ in range(0, 2): self.press('Down') self.press('Enter') self.assertSeen('New Object - Group') # Group name, etc gname = '00000000%s' % randomName(5) self.press(gname) self.press('Tab') self.press(gname) self.press('BTab') self.press('BTab') self.press('BTab') self.press('Enter') self.assertSeen(gname, 'Group not found') ### Move the test group to the test OU ### self.press('Tab') self.press('Tab') self.press('Down') self.press('Up') # ADUC automatically selects the object, but does not update the menu self.press('Tab') self.press('Tab') self.press('Enter') # Action menu self.assertSeen('Move...') self.press('Enter') # Move self.assertSeen('Move object into container:') self.press('Down') # Select the test OU self.press('Tab') self.press('Enter') # OK self.assertSeen('Are you sure you want to move this object?') self.press('Enter') # Yes # Select the test OU self.press('Tab') for _ in range(0, 50): self.press('Up') self.press('Tab') self.press('Tab') self.press('Down') self.press('Tab') self.assertSeen(gname, 'Group not found after object move') ### Delete the test group ### # No easy way to hightlight the test group when there is only one object self.press('Enter') # Open the properties window self.assertSeen('%s Properties' % gname) self.press('BTab') self.press('BTab') self.press('Enter') # Cancel (now the object is selected) self.assertNotSeen('%s Properties' % gname) self.press('Tab') self.press('Tab') self.press('Enter') # Action menu self.assertSeen('Delete') self.press('Down') self.press('Enter') # Delete self.assertSeen("Are you sure you want to delete '%s'?" % gname) self.press('Enter') # Yes self.assertNotSeen(gname, 'Group found after deletion!') ### Delete the test OU ### self.press('Tab') self.press('Up') # For some reason selecting the domain moves the cursor to the file menu self.press('Tab') self.press('Tab') self.press('Tab') self.press('Down') self.press('Up') self.press('Tab') self.press('Tab') self.press('Enter') # Action menu self.assertSeen('Delete') self.press('Down') self.press('Enter') # Delete self.assertSeen("Are you sure you want to delete '%s'?" % name) self.press('Enter') # Yes self.assertNotSeen(name, 'OU found after deletion!')
def test_create_delete_host_pointer_records(self): fzone_name = ('00000000.%s.com' % randomName(10)).lower() create_zone(self.creds.get_domain(), fzone_name, self.creds.get_username(), self.creds.get_password()) self.zones.append(fzone_name) ip1 = randint(1, 254) ip2 = randint(1, 254) ip3 = randint(1, 254) rzone_name = '%d.%d.%d.in-addr.arpa' % (ip3, ip2, ip1) create_zone(self.creds.get_domain(), rzone_name, self.creds.get_username(), self.creds.get_password()) self.zones.append(rzone_name) self.__open_dns() self.press('Tab') for _ in range(0, 2): self.press('Down') self.press('Space') # Expand Forward Lookup Zones self.__select_zone(fzone_name) ### Create Host/Pointer records ### self.press('BTab') self.press('Enter') # Action self.assertSeen('│New Host \(A or AAAA\)\.\.\.\s*│') self.press('Enter') # New Host self.assertSeen('Name \(uses parent domain name if blank\):') name = '00000000%s' % randomName(10) self.press(name) self.press('Tab') ip4 = randint(1,254) ip_addr = '%d.%d.%d.%d' % (ip1, ip2, ip3, ip4) self.press(ip_addr) self.press('Tab') self.press('Space') self.assertSeen('\[x\] Create associated pointer \(PTR\) record') self.press('Tab') self.press('Enter') # Add Host self.assertSeen('Record added successfully') self.press('Enter') # Ok self.assertSeen('%s\s*│Host \(A\)\s*│%s' % (name, ip_addr)) ### Delete Host record ### self.press('Up') self.press('Down') for _ in range(0, 2): self.press('Tab') self.press('Enter') # Action self.assertSeen('│Delete\s*│') self.press('Enter') # Delete self.assertSeen('Do you want to delete the record %s from the server?' % name) self.press('Enter') # Yes self.assertSeen('Record deleted successfully') self.press('Enter') # Ok ### Verify deletion of Pointer record ### sleep(3) self.press('BTab') timeout = 0 while timeout < 50: self.press('Down') if '%s│\s*│' % ip_addr in self.at.screenshot(): break timeout+=1 self.press('Space') self.assertSeen('[└├]──%s' % rzone_name) timeout = 0 while timeout < 50: self.press('Down') self.assertNotSeen(ip_addr) timeout+=1