Example #1
0
    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])
Example #2
0
    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])
Example #3
0
    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])
Example #4
0
    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])
Example #5
0
    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])
Example #6
0
    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])
Example #7
0
    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])
Example #8
0
    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])
Example #9
0
    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])
Example #10
0
    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])
Example #11
0
    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])
Example #12
0
    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])
Example #13
0
    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])
Example #14
0
    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')
Example #15
0
    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')
Example #16
0
    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
        ])
Example #17
0
 def get_host_util(self):
     host_util = host_tasks()
     host_util.driver = self.driver
     host_util.config = self.config
     return host_util
Example #18
0
    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])
Example #19
0
    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])
Example #20
0
    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])
Example #21
0
 def get_host_util(self):
     host_util = host_tasks()
     host_util.driver = self.driver
     host_util.config = self.config
     return host_util