def test_indirect_associations(self): """ Hostgroup indirect associations """ self.init_app() host = host_tasks() host.setup(self.driver, self.config) # add # --- self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA3, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA4, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA5, navigate=False) self.add_record(HOST_ENTITY, host.data2) # prepare indirect member self.navigate_to_entity(hostgroup.ENTITY, 'search') self.navigate_to_record(hostgroup.PKEY2) self.add_associations([host.pkey2]) self.add_associations([hostgroup.PKEY3], 'member_hostgroup') self.navigate_to_entity(hostgroup.ENTITY, 'search') self.navigate_to_record(hostgroup.PKEY) self.add_associations([hostgroup.PKEY2], 'member_hostgroup') # prepare indirect memberof self.navigate_to_entity(hostgroup.ENTITY, 'search') self.navigate_to_record(hostgroup.PKEY4) self.add_associations([hostgroup.PKEY], 'member_hostgroup') self.add_associations([hostgroup.PKEY5], 'memberof_hostgroup') self.add_record(hbac.RULE_ENTITY, hbac.RULE_DATA) self.navigate_to_record(hbac.RULE_PKEY) self.add_table_associations('memberhost_hostgroup', [hostgroup.PKEY4]) self.add_record(sudo.RULE_ENTITY, sudo.RULE_DATA) self.navigate_to_record(sudo.RULE_PKEY) self.add_table_associations('memberhost_hostgroup', [hostgroup.PKEY4]) # check indirect associations # --------------------------- self.navigate_to_entity(hostgroup.ENTITY, 'search') self.navigate_to_record(hostgroup.PKEY) self.assert_indirect_record(hostgroup.PKEY3, hostgroup.ENTITY, 'member_hostgroup') self.assert_indirect_record(host.pkey2, hostgroup.ENTITY, 'member_host') self.assert_indirect_record(hostgroup.PKEY5, hostgroup.ENTITY, 'memberof_hostgroup') self.assert_indirect_record(hbac.RULE_PKEY, hostgroup.ENTITY, 'memberof_hbacrule') self.assert_indirect_record(sudo.RULE_PKEY, hostgroup.ENTITY, 'memberof_sudorule') ## cleanup ## ------- self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2, hostgroup.DATA3, hostgroup.DATA4, hostgroup.DATA5]) self.delete(HOST_ENTITY, [host.data2]) self.delete(hbac.RULE_ENTITY, [hbac.RULE_DATA]) self.delete(sudo.RULE_ENTITY, [sudo.RULE_DATA])
def test_hosts(self): """ Apply to hosts and host groups """ self.init_app() host = host_tasks() host.setup(self.driver, self.config) self.add_record(HOST_ENTITY, host.data) self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.navigate_to_record(hostgroup.PKEY) self.add_associations([host.pkey]) self.add_record(idview.ENTITY, idview.DATA) self.navigate_to_record(idview.PKEY) self.switch_to_facet(idview.HOST_FACET) # apply to host self.add_associations([host.pkey], facet='appliedtohosts', facet_btn='idview_apply') self.delete_record([host.pkey], facet_btn='idview_unapply') # apply to hostgroup self.add_associations([hostgroup.PKEY], facet_btn='idview_apply_hostgroups', member_pkeys=[host.pkey]) self.delete_associations([hostgroup.PKEY], facet_btn='idview_unapply_hostgroups', member_pkeys=[host.pkey]) # cleanup self.delete(idview.ENTITY, [idview.DATA]) self.delete(hostgroup.ENTITY, [hostgroup.DATA]) self.delete(HOST_ENTITY, [host.data])
def test_member_manager_user(self): """ Test member manager user has permissions to add and remove host group members """ self.init_app() host = host_tasks() host.driver = self.driver host.config = self.config host.prep_data2() self.add_record(user.ENTITY, [user.DATA_MEMBER_MANAGER]) self.add_record(HOST_ENTITY, host.data2) self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.navigate_to_record(hostgroup.PKEY) self.add_associations([user.PKEY_MEMBER_MANAGER], facet='membermanager_user') # try to add host to group with member manager permissions self.logout() self.login(user.PKEY_MEMBER_MANAGER, user.PASSWD_MEMBER_MANAGER) self.navigate_to_record(hostgroup.PKEY, entity=hostgroup.ENTITY) self.add_associations([host.pkey2], delete=True) # re-login as admin and clean up data self.logout() self.init_app() self.delete(HOST_ENTITY, [host.data2]) self.delete(user.ENTITY, [user.DATA_MEMBER_MANAGER]) self.delete(hostgroup.ENTITY, [hostgroup.DATA])
def test_hosts(self): """ Apply to hosts and host groups """ self.init_app() host = host_tasks() host.setup(self.driver, self.config) self.add_record(HOST_ENTITY, host.data) self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.navigate_to_record(hostgroup.PKEY) self.add_associations([host.pkey]) self.add_record(idview.ENTITY, idview.DATA) self.navigate_to_record(idview.PKEY) self.switch_to_facet(idview.HOST_FACET) # apply to host self.add_associations( [host.pkey], facet='appliedtohosts', facet_btn='idview_apply') self.delete_record([host.pkey], facet_btn='idview_unapply') # apply to hostgroup self.add_associations( [hostgroup.PKEY], facet_btn='idview_apply_hostgroups', member_pkeys=[host.pkey]) self.delete_associations( [hostgroup.PKEY], facet_btn='idview_unapply_hostgroups', member_pkeys=[host.pkey]) # cleanup self.delete(idview.ENTITY, [idview.DATA]) self.delete(hostgroup.ENTITY, [hostgroup.DATA]) self.delete(HOST_ENTITY, [host.data])
def test_mod(self): """ Mod: netgroup """ self.init_app() host = host_tasks() host.setup(self.driver, self.config) self.add_record(netgroup.ENTITY, netgroup.DATA2) self.add_record(user.ENTITY, user.DATA) self.add_record(user.ENTITY, user.DATA2, navigate=False) self.add_record(group.ENTITY, group.DATA) self.add_record(group.ENTITY, group.DATA2, navigate=False) self.add_record(HOST_ENTITY, host.data) self.add_record(HOST_ENTITY, host.data2, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(netgroup.ENTITY, netgroup.DATA) self.navigate_to_record(netgroup.PKEY, entity=netgroup.ENTITY) tables = [ [ 'memberuser_user', [user.PKEY, user.PKEY2], ], [ 'memberuser_group', [group.PKEY, group.PKEY2], ], [ 'memberhost_host', [host.pkey, host.pkey2], ], [ 'memberhost_hostgroup', [hostgroup.PKEY, hostgroup.PKEY2], ], ] categories = [ 'usercategory', 'hostcategory', ] self.mod_rule_tables(tables, categories, []) # cleanup # ------- self.delete(netgroup.ENTITY, [netgroup.DATA, netgroup.DATA2]) self.delete(user.ENTITY, [user.DATA, user.DATA2]) self.delete(group.ENTITY, [group.DATA, group.DATA2]) self.delete(HOST_ENTITY, [host.data, host.data2]) self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2])
def test_associations(self): """ Hostgroup associations """ self.init_app() host = host_tasks() host.driver = self.driver host.config = self.config host.prep_data2() # prepare # ------- self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA3, navigate=False) self.add_record(HOST_ENTITY, host.data2) self.add_record(netgroup.ENTITY, netgroup.DATA) self.add_record(hbac.RULE_ENTITY, hbac.RULE_DATA) self.add_record(sudo.RULE_ENTITY, sudo.RULE_DATA) # add & remove associations # ------------------------- self.navigate_to_entity(hostgroup.ENTITY) self.navigate_to_record(hostgroup.PKEY) # members self.add_associations([hostgroup.PKEY2], facet='member_hostgroup', delete=True) self.add_associations([host.pkey2], facet='member_host', delete=True) # member of self.add_associations([hostgroup.PKEY3], facet='memberof_hostgroup', delete=True) self.add_associations([netgroup.PKEY], facet='memberof_netgroup', delete=True) self.add_associations([hbac.RULE_PKEY], facet='memberof_hbacrule', delete=True) self.add_associations([sudo.RULE_PKEY], facet='memberof_sudorule', delete=True) # cleanup # ------- self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2, hostgroup.DATA3]) self.delete(HOST_ENTITY, [host.data2]) self.delete(netgroup.ENTITY, [netgroup.DATA]) self.delete(hbac.RULE_ENTITY, [hbac.RULE_DATA]) self.delete(sudo.RULE_ENTITY, [sudo.RULE_DATA])
def test_mod(self): """ Mod: selinuxusermap """ self.init_app() host = host_tasks() host.setup(self.driver, self.config) self.add_record(user.ENTITY, user.DATA) self.add_record(user.ENTITY, user.DATA2, navigate=False) self.add_record(group.ENTITY, group.DATA) self.add_record(group.ENTITY, group.DATA2, navigate=False) self.add_record(HOST_ENTITY, host.data) self.close_notifications() self.add_record(HOST_ENTITY, host.data2, navigate=False) self.close_notifications() self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(selinuxmap.ENTITY, selinuxmap.DATA) self.navigate_to_record(selinuxmap.PKEY) tables = [ ['memberuser_user', [user.PKEY, user.PKEY2], ], ['memberuser_group', [group.PKEY, group.PKEY2], ], ['memberhost_host', [host.pkey, host.pkey2], ], ['memberhost_hostgroup', [hostgroup.PKEY, hostgroup.PKEY2], ], ] categories = [ 'usercategory', 'hostcategory', ] self.mod_rule_tables(tables, categories, []) # add associations then cancel for t in tables: table = t[0] keys = t[1] self.add_table_associations(table, [keys[0]], confirm_btn='cancel') # cleanup # ------- self.delete(selinuxmap.ENTITY, [selinuxmap.DATA]) self.delete(user.ENTITY, [user.DATA, user.DATA2]) self.delete(group.ENTITY, [group.DATA, group.DATA2]) self.delete(HOST_ENTITY, [host.data, host.data2]) self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2])
def test_mod(self): """ Mod: netgroup """ self.init_app() host = host_tasks() host.setup(self.driver, self.config) self.add_record(netgroup.ENTITY, netgroup.DATA2) self.add_record(user.ENTITY, user.DATA) self.add_record(user.ENTITY, user.DATA2, navigate=False) self.add_record(group.ENTITY, group.DATA) self.add_record(group.ENTITY, group.DATA2, navigate=False) self.add_record(HOST_ENTITY, host.data) self.add_record(HOST_ENTITY, host.data2, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(netgroup.ENTITY, netgroup.DATA) self.navigate_to_record(netgroup.PKEY, entity=netgroup.ENTITY) tables = [ ['memberuser_user', [user.PKEY, user.PKEY2], ], ['memberuser_group', [group.PKEY, group.PKEY2], ], ['memberhost_host', [host.pkey, host.pkey2], ], ['memberhost_hostgroup', [hostgroup.PKEY, hostgroup.PKEY2], ], ] categories = [ 'usercategory', 'hostcategory', ] self.mod_rule_tables(tables, categories, []) # cleanup # ------- self.delete(netgroup.ENTITY, [netgroup.DATA, netgroup.DATA2]) self.delete(user.ENTITY, [user.DATA, user.DATA2]) self.delete(group.ENTITY, [group.DATA, group.DATA2]) self.delete(HOST_ENTITY, [host.data, host.data2]) self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2])
def test_mod(self): """ Mod: selinuxusermap """ self.init_app() host = host_tasks() host.setup(self.driver, self.config) self.add_record(user.ENTITY, user.DATA) self.add_record(user.ENTITY, user.DATA2, navigate=False) self.add_record(group.ENTITY, group.DATA) self.add_record(group.ENTITY, group.DATA2, navigate=False) self.add_record(HOST_ENTITY, host.data) self.add_record(HOST_ENTITY, host.data2, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(ENTITY, DATA) self.navigate_to_record(PKEY) tables = [ ["memberuser_user", [user.PKEY, user.PKEY2]], ["memberuser_group", [group.PKEY, group.PKEY2]], ["memberhost_host", [host.pkey, host.pkey2]], ["memberhost_hostgroup", [hostgroup.PKEY, hostgroup.PKEY2]], ] categories = ["usercategory", "hostcategory"] self.mod_rule_tables(tables, categories, []) # cleanup # ------- self.delete(ENTITY, [DATA]) self.delete(user.ENTITY, [user.DATA, user.DATA2]) self.delete(group.ENTITY, [group.DATA, group.DATA2]) self.delete(HOST_ENTITY, [host.data, host.data2]) self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2])
def test_mod(self): """ Mod: netgroup """ self.init_app() host = host_tasks() host.setup(self.driver, self.config) self.add_record(netgroup.ENTITY, netgroup.DATA2) self.add_record(user.ENTITY, user.DATA) self.add_record(user.ENTITY, user.DATA2, navigate=False) self.add_record(group.ENTITY, group.DATA) self.add_record(group.ENTITY, group.DATA2, navigate=False) self.add_record(HOST_ENTITY, host.data) self.add_record(HOST_ENTITY, host.data2, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(netgroup.ENTITY, netgroup.DATA) self.navigate_to_record(netgroup.PKEY, entity=netgroup.ENTITY) tables = [ ['memberuser_user', [user.PKEY, user.PKEY2], ], ['memberuser_group', [group.PKEY, group.PKEY2], ], ['memberhost_host', [host.pkey, host.pkey2], ], ['memberhost_hostgroup', [hostgroup.PKEY, hostgroup.PKEY2], ], ] categories = [ 'usercategory', 'hostcategory', ] self.mod_rule_tables(tables, categories, []) # add associations then cancel def get_t_vals(t): table = t[0] k = t[1] e = [] if len(t) > 2: e = t[2] return table, k, e for t in tables: table, keys, _exts = get_t_vals(t) self.add_table_associations(table, [keys[0]], confirm_btn='cancel') # verifying members listed as links ticket#2670 self.add_table_associations(table, [keys[0]]) self.wait_for_request(n=2) self.navigate_to_record(keys[0], table_name=table) page_pkey = self.get_text('.facet-pkey') assert keys[0] in page_pkey self.navigate_to_record(netgroup.PKEY, entity=netgroup.ENTITY) for cat in categories: # verifying undo on memberships self.check_option(cat, 'all') self.assert_facet_button_enabled('save', enabled=True) undo = "div[name = %s] > button[name='undo']" % cat self._button_click(undo, parent=None) self.assert_facet_button_enabled('save', enabled=False) # verifying Revert on memberships self.check_option(cat, 'all') self.facet_button_click('revert') self.assert_facet_button_enabled('save', enabled=False) # verifying refresh on memberships self.check_option(cat, 'all') self.facet_button_click('refresh') self.assert_facet_button_enabled('save', enabled=False) # cleanup # ------- self.delete(netgroup.ENTITY, [netgroup.DATA, netgroup.DATA2]) self.delete(user.ENTITY, [user.DATA, user.DATA2]) self.delete(group.ENTITY, [group.DATA, group.DATA2]) self.delete(HOST_ENTITY, [host.data, host.data2]) self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2])
def test_mod(self): """ Mod: sudo """ self.init_app() host = host_tasks(self.driver, self.config) self.add_record(netgroup.ENTITY, netgroup.DATA2) self.add_record(user.ENTITY, user.DATA) self.add_record(user.ENTITY, user.DATA2, navigate=False) self.add_record(group.ENTITY, group.DATA) self.add_record(group.ENTITY, group.DATA2, navigate=False) self.add_record(HOST_ENTITY, host.data) self.add_record(HOST_ENTITY, host.data2, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(sudo.CMDENTITY, sudo.CMD_DATA) self.add_record(sudo.CMDENTITY, sudo.CMD_DATA2, navigate=False) self.add_record(sudo.CMDGROUP_ENTITY, sudo.CMDGROUP_DATA) self.add_record(sudo.CMDGROUP_ENTITY, sudo.CMDGROUP_DATA2, navigate=False) self.add_record(sudo.RULE_ENTITY, sudo.RULE_DATA) self.navigate_to_record(sudo.RULE_PKEY, entity=sudo.RULE_ENTITY) tables = [ ['memberuser_user', [user.PKEY, user.PKEY2], ], ['memberuser_group', [group.PKEY, group.PKEY2], ], ['memberhost_host', [host.pkey, host.pkey2], ], ['memberhost_hostgroup', [hostgroup.PKEY, hostgroup.PKEY2], ], ['memberallowcmd_sudocmd', [sudo.CMD_PKEY, sudo.CMD_PKEY2], ], ['memberallowcmd_sudocmdgroup', [sudo.CMD_GROUP_PKEY, sudo.CMD_GROUP_PKEY2], ], ['memberdenycmd_sudocmd', [sudo.CMD_PKEY, sudo.CMD_PKEY2], ], ['memberdenycmd_sudocmdgroup', [sudo.CMD_GROUP_PKEY, sudo.CMD_GROUP_PKEY2], ], ['ipasudorunas_user', ['admin'], ], ['ipasudorunas_group', ['editors', 'admins'], ], ['ipasudorunasgroup_group', ['editors', 'admins'], ], ] categories = [ 'usercategory', 'hostcategory', 'cmdcategory', 'ipasudorunasusercategory', 'ipasudorunasgroupcategory', ] no_cats = [ 'memberdenycmd_sudocmd', 'memberdenycmd_sudocmdgroup', ] self.mod_rule_tables(tables, categories, no_cats) # cleanup # ------- self.delete(sudo.RULE_ENTITY, [sudo.RULE_DATA]) self.delete(user.ENTITY, [user.DATA, user.DATA2]) self.delete(group.ENTITY, [group.DATA, group.DATA2]) self.delete(HOST_ENTITY, [host.data, host.data2]) self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2]) self.delete(sudo.CMDENTITY, [sudo.CMD_DATA, sudo.CMD_DATA2]) self.delete(sudo.CMDGROUP_ENTITY, [sudo.CMDGROUP_DATA, sudo.CMDGROUP_DATA2])
def test_mod(self): """ Mod: selinuxusermap """ self.init_app() host = host_tasks() host.driver = self.driver host.config = self.config host.prep_data() host.prep_data2() self.add_record(user.ENTITY, user.DATA) self.add_record(user.ENTITY, user.DATA2, navigate=False) self.add_record(group.ENTITY, group.DATA) self.add_record(group.ENTITY, group.DATA2, navigate=False) self.add_record(HOST_ENTITY, host.data) self.close_notifications() self.add_record(HOST_ENTITY, host.data2, navigate=False) self.close_notifications() self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(selinuxmap.ENTITY, selinuxmap.DATA) self.navigate_to_record(selinuxmap.PKEY) tables = [ [ 'memberuser_user', [user.PKEY, user.PKEY2], ], [ 'memberuser_group', [group.PKEY, group.PKEY2], ], [ 'memberhost_host', [host.pkey, host.pkey2], ], [ 'memberhost_hostgroup', [hostgroup.PKEY, hostgroup.PKEY2], ], ] categories = [ 'usercategory', 'hostcategory', ] self.mod_rule_tables(tables, categories, []) # add associations then cancel for t in tables: table = t[0] keys = t[1] self.add_table_associations(table, [keys[0]], confirm_btn='cancel') # cleanup # ------- self.delete(selinuxmap.ENTITY, [selinuxmap.DATA]) self.delete(user.ENTITY, [user.DATA, user.DATA2]) self.delete(group.ENTITY, [group.DATA, group.DATA2]) self.delete(HOST_ENTITY, [host.data, host.data2]) self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2])
def test_rebuild_membership_hosts(self): """ Test automember rebuild membership feature for hosts """ self.init_app() host_util = host_tasks() host_util.setup(self.driver, self.config) domain = self.config.get('ipa_domain') host1 = 'web1.%s' % domain host2 = 'web2.%s' % domain # Add a hostgroup self.add_record( 'hostgroup', { 'pkey': 'webservers', 'add': [ ('textbox', 'cn', 'webservers'), ('textarea', 'description', 'webservers'), ] }) # Add hosts self.add_record('host', host_util.get_data("web1", domain)) self.add_record('host', host_util.get_data("web2", domain)) # Add an automember rule self.add_record('automember', { 'pkey': 'webservers', 'add': [('combobox', 'cn', 'webservers')] }, facet='searchhostgroup') # Add a condition for automember rule self.navigate_to_record('webservers') self.add_table_record( 'automemberinclusiveregex', { 'fields': [('selectbox', 'key', 'fqdn'), ('textbox', 'automemberinclusiveregex', '^web[1-9]+')] }) # Assert that hosts are not members of hostgroup self.navigate_to_record('webservers', entity='hostgroup') self.facet_button_click('refresh') self.wait_for_request() self.assert_record(host1, negative=True) self.assert_record(host2, negative=True) # Rebuild membership for first host, using action on host details facet self.navigate_to_record(host1, entity='host') self.action_list_action('automember_rebuild') # Assert that host is now a member of hostgroup self.navigate_to_record('webservers', entity='hostgroup') self.facet_button_click('refresh') self.wait_for_request() self.assert_record(host1) self.assert_record(host2, negative=True) # Remove host from hostgroup self.delete_record(host1) # Assert that host is not a member of hostgroup self.facet_button_click('refresh') self.wait_for_request() self.assert_record(host1, negative=True) self.assert_record(host2, negative=True) # Rebuild membership for all hosts, using action on hosts search facet self.navigate_by_menu('identity/host') self.action_list_action('automember_rebuild') # Assert that hosts are now members of hostgroup self.navigate_to_record('webservers', entity='hostgroup') self.facet_button_click('refresh') self.wait_for_request() self.assert_record(host1) self.assert_record(host2) # Delete hostgroup, hosts and automember rule self.delete('hostgroup', [{'pkey': 'webservers'}]) self.delete('host', [{'pkey': host1}, {'pkey': host2}]) self.delete('automember', [{ 'pkey': 'webservers' }], facet='searchhostgroup')
def test_rebuild_membership_hosts(self): """ Test automember rebuild membership feature for hosts """ self.init_app() host_util = host_tasks() host_util.setup(self.driver, self.config) domain = self.config.get('ipa_domain') host1 = 'web1.%s' % domain host2 = 'web2.%s' % domain # Add a hostgroup self.add_record('hostgroup', { 'pkey': 'webservers', 'add': [ ('textbox', 'cn', 'webservers'), ('textarea', 'description', 'webservers'), ] }) # Add hosts self.add_record('host', host_util.get_data("web1", domain)); self.add_record('host', host_util.get_data("web2", domain)); # Add an automember rule self.add_record( 'automember', {'pkey': 'webservers', 'add': [('combobox', 'cn', 'webservers')]}, facet='searchhostgroup' ) # Add a condition for automember rule self.navigate_to_record('webservers') self.add_table_record( 'automemberinclusiveregex', {'fields': [ ('selectbox', 'key', 'fqdn'), ('textbox', 'automemberinclusiveregex', '^web[1-9]+') ]} ) # Assert that hosts are not members of hostgroup self.navigate_to_record('webservers', entity='hostgroup') self.facet_button_click('refresh') self.wait_for_request() self.assert_record(host1, negative=True) self.assert_record(host2, negative=True) # Rebuild membership for first host, using action on host details facet self.navigate_to_record(host1, entity='host') self.action_list_action('automember_rebuild') # Assert that host is now a member of hostgroup self.navigate_to_record('webservers', entity='hostgroup') self.facet_button_click('refresh') self.wait_for_request() self.assert_record(host1) self.assert_record(host2, negative=True) # Remove host from hostgroup self.delete_record(host1) # Assert that host is not a member of hostgroup self.facet_button_click('refresh') self.wait_for_request() self.assert_record(host1, negative=True) self.assert_record(host2, negative=True) # Rebuild membership for all hosts, using action on hosts search facet self.navigate_by_menu('identity/host') self.navigate_by_breadcrumb('Hosts') self.action_list_action('automember_rebuild') # Assert that hosts are now members of hostgroup self.navigate_to_record('webservers', entity='hostgroup') self.facet_button_click('refresh') self.wait_for_request() self.assert_record(host1) self.assert_record(host2) # Delete hostgroup, hosts and automember rule self.delete('hostgroup', [{'pkey': 'webservers'}]) self.delete('host', [{'pkey': host1}, {'pkey': host2}]) self.delete('automember', [{'pkey': 'webservers'}], facet='searchhostgroup')
def test_names_and_button(self): """ Hostgroup names and buttons """ self.init_app() host = host_tasks() host.driver = self.driver host.config = self.config self.add_record(hostgroup.ENTITY, hostgroup.DATA6) self.add_record(hostgroup.ENTITY, hostgroup.DATA7, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA8, navigate=False) # test invalid names invalid_names = [ hostgroup.LEADING_SPACE, hostgroup.TRAILING_SPACE, hostgroup.NAME_SPACE ] check_invalid_names(self, invalid_names, hostgroup.CHAR_WARNING_MSG) invalid_names = [hostgroup.PKEY6] check_invalid_names(self, invalid_names, hostgroup.DUPLICATE_WARNING_MSG) # test invalid description self.button_click(name='add') self.fill_input('cn', hostgroup.PKEY) self.fill_textarea('description', hostgroup.LEADING_SPACE) self.dialog_button_click('add') assert hostgroup.DESCRIPTION_ERROR_DIALOG in \ self.get_last_error_dialog().text self.dialog_button_click('cancel') self.wait() self.fill_textarea('description', hostgroup.TRAILING_SPACE) self.dialog_button_click('add') assert hostgroup.DESCRIPTION_ERROR_DIALOG in \ self.get_last_error_dialog().text self.dialog_button_click('cancel') self.dialog_button_click('cancel') # duplicate self.button_click(name='add') self.fill_input('cn', hostgroup.PKEY6) self.dialog_button_click('add') assert hostgroup.DUPLICATE_WARNING_MSG in \ self.get_last_error_dialog().text self.dialog_button_click('cancel') self.dialog_button_click('cancel') self.button_click(name='add') self.fill_input('cn', "") self.dialog_button_click('add') text_warning = self.get_text('.help-block', parent=self.get_dialog()) assert text_warning in hostgroup.EMPTY_WARNING_MSG self.dialog_button_click(name='cancel') # test buttons self.button_click('add') self.fill_input('cn', hostgroup.DATA['pkey']) self.dialog_button_click(name='add_and_add_another') self.wait_for_request(n=3) self.fill_input('cn', hostgroup.DATA2['pkey']) self.dialog_button_click(name='add_and_edit') self.wait_for_request(n=4) self.navigate_to_entity(hostgroup.ENTITY) self.button_click('add') self.fill_input('cn', hostgroup.DATA['pkey']) self.dialog_button_click('cancel') self.select_record(hostgroup.PKEY) self.button_click('remove') self.dialog_button_click('cancel') self.wait() self.select_record(hostgroup.PKEY, unselect=True) # test to rewrite invalid input_type self.button_click('add') self.fill_input('cn', hostgroup.LEADING_SPACE) self.fill_input('cn', hostgroup.PKEY3) self.dialog_button_click('add') self.wait_for_request(n=3) self.button_click('add') self.fill_input('cn', hostgroup.TRAILING_SPACE) self.fill_input('cn', hostgroup.PKEY4) self.dialog_button_click('add') self.wait_for_request(n=3) # multiple delete clean up self.select_record(hostgroup.PKEY6.lower()) self.select_record(hostgroup.PKEY7.lower()) self.button_click('remove') self.dialog_button_click('ok') # clean up self.delete(hostgroup.ENTITY, [ hostgroup.DATA, hostgroup.DATA2, hostgroup.DATA3, hostgroup.DATA4, hostgroup.DATA8 ])
def get_host_util(self): host_util = host_tasks() host_util.driver = self.driver host_util.config = self.config return host_util
def test_names_and_button(self): """ Hostgroup names and buttons """ self.init_app() host = host_tasks() host.setup(self.driver, self.config) self.add_record(hostgroup.ENTITY, hostgroup.DATA6) self.add_record(hostgroup.ENTITY, hostgroup.DATA7, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA8, navigate=False) # test invalid names invalid_names = [hostgroup.LEADING_SPACE, hostgroup.TRAILING_SPACE, hostgroup.NAME_SPACE] check_invalid_names(self, invalid_names, hostgroup.CHAR_WARNING_MSG) invalid_names = [hostgroup.PKEY6] check_invalid_names(self, invalid_names, hostgroup.DUPLICATE_WARNING_MSG) # test invalid description self.button_click(name='add') self.fill_input('cn', hostgroup.PKEY) self.fill_textarea('description', hostgroup.LEADING_SPACE) self.dialog_button_click('add') assert hostgroup.DESCRIPTION_ERROR_DIALOG in \ self.get_last_error_dialog().text self.dialog_button_click('cancel') self.wait() self.fill_textarea('description', hostgroup.TRAILING_SPACE) self.dialog_button_click('add') assert hostgroup.DESCRIPTION_ERROR_DIALOG in \ self.get_last_error_dialog().text self.dialog_button_click('cancel') self.dialog_button_click('cancel') # duplicate self.button_click(name='add') self.fill_input('cn', hostgroup.PKEY6) self.dialog_button_click('add') assert hostgroup.DUPLICATE_WARNING_MSG in \ self.get_last_error_dialog().text self.dialog_button_click('cancel') self.dialog_button_click('cancel') self.button_click(name='add') self.fill_input('cn', "") self.dialog_button_click('add') text_warning = self.get_text('.help-block', parent=self.get_dialog()) assert text_warning in hostgroup.EMPTY_WARNING_MSG self.dialog_button_click(name='cancel') # test buttons self.button_click('add') self.fill_input('cn', hostgroup.DATA['pkey']) self.dialog_button_click(name='add_and_add_another') self.wait_for_request(n=3) self.fill_input('cn', hostgroup.DATA2['pkey']) self.dialog_button_click(name='add_and_edit') self.wait_for_request(n=4) self.navigate_to_entity(hostgroup.ENTITY) self.button_click('add') self.fill_input('cn', hostgroup.DATA['pkey']) self.dialog_button_click('cancel') self.select_record(hostgroup.PKEY) self.button_click('remove') self.dialog_button_click('cancel') self.wait() self.select_record(hostgroup.PKEY, unselect=True) # test to rewrite invalid input_type self.button_click('add') self.fill_input('cn', hostgroup.LEADING_SPACE) self.fill_input('cn', hostgroup.PKEY3) self.dialog_button_click('add') self.wait_for_request(n=3) self.button_click('add') self.fill_input('cn', hostgroup.TRAILING_SPACE) self.fill_input('cn', hostgroup.PKEY4) self.dialog_button_click('add') self.wait_for_request(n=3) # multiple delete clean up self.select_record(hostgroup.PKEY6.lower()) self.select_record(hostgroup.PKEY7.lower()) self.button_click('remove') self.dialog_button_click('ok') # clean up self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2, hostgroup.DATA3, hostgroup.DATA4, hostgroup.DATA8])
def test_mod(self): """ Mod: netgroup """ self.init_app() host = host_tasks() host.setup(self.driver, self.config) self.add_record(netgroup.ENTITY, netgroup.DATA2) self.add_record(user.ENTITY, user.DATA) self.add_record(user.ENTITY, user.DATA2, navigate=False) self.add_record(group.ENTITY, group.DATA) self.add_record(group.ENTITY, group.DATA2, navigate=False) self.add_record(HOST_ENTITY, host.data) self.add_record(HOST_ENTITY, host.data2, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(netgroup.ENTITY, netgroup.DATA) self.navigate_to_record(netgroup.PKEY, entity=netgroup.ENTITY) tables = [ [ 'memberuser_user', [user.PKEY, user.PKEY2], ], [ 'memberuser_group', [group.PKEY, group.PKEY2], ], [ 'memberhost_host', [host.pkey, host.pkey2], ], [ 'memberhost_hostgroup', [hostgroup.PKEY, hostgroup.PKEY2], ], ] categories = [ 'usercategory', 'hostcategory', ] self.mod_rule_tables(tables, categories, []) # add associations then cancel def get_t_vals(t): table = t[0] k = t[1] e = [] if len(t) > 2: e = t[2] return table, k, e for t in tables: table, keys, _exts = get_t_vals(t) self.add_table_associations(table, [keys[0]], confirm_btn='cancel') # verifying members listed as links ticket#2670 self.add_table_associations(table, [keys[0]]) self.wait_for_request(n=2) self.navigate_to_record(keys[0], table_name=table) page_pkey = self.get_text('.facet-pkey') assert keys[0] in page_pkey self.navigate_to_record(netgroup.PKEY, entity=netgroup.ENTITY) for cat in categories: # verifying undo on memberships self.check_option(cat, 'all') self.assert_facet_button_enabled('save', enabled=True) undo = "div[name = %s] > button[name='undo']" % cat self._button_click(undo, parent=None) self.assert_facet_button_enabled('save', enabled=False) # verifying Revert on memberships self.check_option(cat, 'all') self.facet_button_click('revert') self.assert_facet_button_enabled('save', enabled=False) # verifying refresh on memberships self.check_option(cat, 'all') self.facet_button_click('refresh') self.assert_facet_button_enabled('save', enabled=False) # cleanup # ------- self.delete(netgroup.ENTITY, [netgroup.DATA, netgroup.DATA2]) self.delete(user.ENTITY, [user.DATA, user.DATA2]) self.delete(group.ENTITY, [group.DATA, group.DATA2]) self.delete(HOST_ENTITY, [host.data, host.data2]) self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2])
def test_mod(self): """ Mod: sudo """ self.init_app() host = host_tasks() host.driver = self.driver host.config = self.config host.prep_data() host.prep_data2() self.add_record(netgroup.ENTITY, netgroup.DATA2) self.add_record(user.ENTITY, user.DATA) self.add_record(user.ENTITY, user.DATA2, navigate=False) self.add_record(group.ENTITY, group.DATA) self.add_record(group.ENTITY, group.DATA2, navigate=False) self.add_record(HOST_ENTITY, host.data) self.add_record(HOST_ENTITY, host.data2, navigate=False) self.add_record(hostgroup.ENTITY, hostgroup.DATA) self.add_record(hostgroup.ENTITY, hostgroup.DATA2, navigate=False) self.add_record(sudo.CMDENTITY, sudo.CMD_DATA) self.add_record(sudo.CMDENTITY, sudo.CMD_DATA2, navigate=False) self.add_record(sudo.CMDGROUP_ENTITY, sudo.CMDGROUP_DATA) self.add_record(sudo.CMDGROUP_ENTITY, sudo.CMDGROUP_DATA2, navigate=False) self.add_record(sudo.RULE_ENTITY, sudo.RULE_DATA) self.navigate_to_record(sudo.RULE_PKEY, entity=sudo.RULE_ENTITY) tables = [ [ 'memberuser_user', [user.PKEY, user.PKEY2], ], [ 'memberuser_group', [group.PKEY, group.PKEY2], ], [ 'memberhost_host', [host.pkey, host.pkey2], ], [ 'memberhost_hostgroup', [hostgroup.PKEY, hostgroup.PKEY2], ], [ 'memberallowcmd_sudocmd', [sudo.CMD_PKEY, sudo.CMD_PKEY2], ], [ 'memberallowcmd_sudocmdgroup', [sudo.CMD_GROUP_PKEY, sudo.CMD_GROUP_PKEY2], ], [ 'memberdenycmd_sudocmd', [sudo.CMD_PKEY, sudo.CMD_PKEY2], ], [ 'memberdenycmd_sudocmdgroup', [sudo.CMD_GROUP_PKEY, sudo.CMD_GROUP_PKEY2], ], [ 'ipasudorunas_user', ['admin'], ], [ 'ipasudorunas_group', ['editors', 'admins'], ], [ 'ipasudorunasgroup_group', ['editors', 'admins'], ], ] categories = [ 'usercategory', 'hostcategory', 'cmdcategory', 'ipasudorunasusercategory', 'ipasudorunasgroupcategory', ] no_cats = [ 'memberdenycmd_sudocmd', 'memberdenycmd_sudocmdgroup', ] self.mod_rule_tables(tables, categories, no_cats) # cleanup # ------- self.delete(sudo.RULE_ENTITY, [sudo.RULE_DATA]) self.delete(user.ENTITY, [user.DATA, user.DATA2]) self.delete(group.ENTITY, [group.DATA, group.DATA2]) self.delete(HOST_ENTITY, [host.data, host.data2]) self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2]) self.delete(sudo.CMDENTITY, [sudo.CMD_DATA, sudo.CMD_DATA2]) self.delete(sudo.CMDGROUP_ENTITY, [sudo.CMDGROUP_DATA, sudo.CMDGROUP_DATA2])