mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Upstream Web UI tests
Documentation: http://www.freeipa.org/page/Web_UI_Integration_Tests https://fedorahosted.org/freeipa/ticket/3744
This commit is contained in:
@@ -813,6 +813,7 @@ fi
|
|||||||
%dir %{python_sitelib}/ipatests/test_ipaserver
|
%dir %{python_sitelib}/ipatests/test_ipaserver
|
||||||
%dir %{python_sitelib}/ipatests/test_ipaserver/install
|
%dir %{python_sitelib}/ipatests/test_ipaserver/install
|
||||||
%dir %{python_sitelib}/ipatests/test_pkcs10
|
%dir %{python_sitelib}/ipatests/test_pkcs10
|
||||||
|
%dir %{python_sitelib}/ipatests/test_webui
|
||||||
%dir %{python_sitelib}/ipatests/test_xmlrpc
|
%dir %{python_sitelib}/ipatests/test_xmlrpc
|
||||||
%{_bindir}/ipa-run-tests
|
%{_bindir}/ipa-run-tests
|
||||||
%{_bindir}/ipa-test-config
|
%{_bindir}/ipa-test-config
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ def setup_package():
|
|||||||
"ipatests.test_ipaserver",
|
"ipatests.test_ipaserver",
|
||||||
"ipatests.test_ipaserver.install",
|
"ipatests.test_ipaserver.install",
|
||||||
"ipatests.test_pkcs10",
|
"ipatests.test_pkcs10",
|
||||||
|
"ipatests.test_webui",
|
||||||
"ipatests.test_xmlrpc"],
|
"ipatests.test_xmlrpc"],
|
||||||
scripts=['ipa-run-tests', 'ipa-test-config'],
|
scripts=['ipa-run-tests', 'ipa-test-config'],
|
||||||
package_data = {
|
package_data = {
|
||||||
|
|||||||
1
ipatests/test_webui/README
Normal file
1
ipatests/test_webui/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
http://www.freeipa.org/page/Web_UI_Integration_Tests
|
||||||
22
ipatests/test_webui/__init__.py
Normal file
22
ipatests/test_webui/__init__.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Sub-package containing Web UI integration tests
|
||||||
|
"""
|
||||||
70
ipatests/test_webui/data_group.py
Normal file
70
ipatests/test_webui/data_group.py
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
ENTITY = 'group'
|
||||||
|
DEFAULT_FACET = 'member_user'
|
||||||
|
|
||||||
|
PKEY = 'itest-group'
|
||||||
|
DATA = {
|
||||||
|
'pkey': PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY),
|
||||||
|
('textarea', 'description','test-group desc'),
|
||||||
|
('radio', 'type','normal'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description','test-group desc modified'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
PKEY2 = 'itest-group2'
|
||||||
|
DATA2 = {
|
||||||
|
'pkey': PKEY2,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY2),
|
||||||
|
('textarea', 'description','test-group2 desc'),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
PKEY3 = 'itest-group3'
|
||||||
|
DATA3= {
|
||||||
|
'pkey': PKEY3,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY3),
|
||||||
|
('textarea', 'description','test-group3 desc'),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
PKEY4 = 'itest-group4'
|
||||||
|
DATA4= {
|
||||||
|
'pkey': PKEY4,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY4),
|
||||||
|
('textarea', 'description','test-group4 desc'),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
PKEY5 = 'itest-group5'
|
||||||
|
DATA5= {
|
||||||
|
'pkey': PKEY5,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY5),
|
||||||
|
('textarea', 'description','test-group5 desc'),
|
||||||
|
]
|
||||||
|
}
|
||||||
57
ipatests/test_webui/data_hbac.py
Normal file
57
ipatests/test_webui/data_hbac.py
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
RULE_ENTITY = 'hbacrule'
|
||||||
|
RULE_PKEY = 'itesthbacrule'
|
||||||
|
RULE_DATA = {
|
||||||
|
'pkey': RULE_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', RULE_PKEY),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'testhbacrulec desc'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
SVC_ENTITY = 'hbacsvc'
|
||||||
|
SVC_PKEY = 'itesthbacsvc'
|
||||||
|
SVC_DATA = {
|
||||||
|
'pkey': SVC_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', SVC_PKEY),
|
||||||
|
('textarea', 'description', 'testhbacsvc desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'testhbacsvc desc mod'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
SVCGROUP_ENTITY = 'hbacsvcgroup'
|
||||||
|
SVCGROUP_DEF_FACET = 'member_hbacsvc'
|
||||||
|
SVCGROUP_PKEY = 'itesthbaccvcgroup'
|
||||||
|
SVCGROUP_DATA = {
|
||||||
|
'pkey': SVCGROUP_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', SVCGROUP_PKEY),
|
||||||
|
('textarea', 'description', 'testhbaccvcgroup desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'testhbaccvcgroup desc mod'),
|
||||||
|
],
|
||||||
|
}
|
||||||
81
ipatests/test_webui/data_hostgroup.py
Normal file
81
ipatests/test_webui/data_hostgroup.py
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
ENTITY = 'hostgroup'
|
||||||
|
DEFAULT_FACET = 'member_host'
|
||||||
|
|
||||||
|
PKEY = 'itest-hostgroup'
|
||||||
|
DATA = {
|
||||||
|
'pkey': PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY),
|
||||||
|
('textarea', 'description','test-hostgroup desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description','test-hostgroup desc modified'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
PKEY2 = 'itest-hostgroup2'
|
||||||
|
DATA2 = {
|
||||||
|
'pkey': PKEY2,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY2),
|
||||||
|
('textarea', 'description','test-hostgroup2 desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description','test-hostgroup2 desc modified'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
PKEY3 = 'itest-hostgroup3'
|
||||||
|
DATA3 = {
|
||||||
|
'pkey': PKEY3,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY3),
|
||||||
|
('textarea', 'description','test-hostgroup3 desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description','test-hostgroup3 desc modified'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
PKEY4 = 'itest-hostgroup4'
|
||||||
|
DATA4 = {
|
||||||
|
'pkey': PKEY4,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY4),
|
||||||
|
('textarea', 'description','test-hostgroup4 desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description','test-hostgroup4 desc modified'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
PKEY5 = 'itest-hostgroup5'
|
||||||
|
DATA5 = {
|
||||||
|
'pkey': PKEY5,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY5),
|
||||||
|
('textarea', 'description','test-hostgroup5 desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description','test-hostgroup5 desc modified'),
|
||||||
|
],
|
||||||
|
}
|
||||||
43
ipatests/test_webui/data_netgroup.py
Normal file
43
ipatests/test_webui/data_netgroup.py
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
ENTITY = 'netgroup'
|
||||||
|
PKEY = 'itest-netgroup'
|
||||||
|
DATA = {
|
||||||
|
'pkey': PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY),
|
||||||
|
('textarea', 'description', 'test-netgroup desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'test-netgroup desc modified'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
PKEY2 = 'itest-netgroup2'
|
||||||
|
DATA2 = {
|
||||||
|
'pkey': PKEY2,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY2),
|
||||||
|
('textarea', 'description', 'test-netgroup2 desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'test-netgroup2 desc modified'),
|
||||||
|
],
|
||||||
|
}
|
||||||
82
ipatests/test_webui/data_sudo.py
Normal file
82
ipatests/test_webui/data_sudo.py
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
RULE_ENTITY = 'sudorule'
|
||||||
|
CMDENTITY = 'sudocmd'
|
||||||
|
CMDGROUP_ENTITY = 'sudocmdgroup'
|
||||||
|
CMDGROUP_DEF_FACET = 'member_sudocmd'
|
||||||
|
|
||||||
|
RULE_PKEY = 'itestsudorule'
|
||||||
|
RULE_DATA = {
|
||||||
|
'pkey': RULE_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', RULE_PKEY),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'itestsudorule desc'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
CMD_PKEY = 'itestsudocmd'
|
||||||
|
CMD_DATA = {
|
||||||
|
'pkey': CMD_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'sudocmd', CMD_PKEY),
|
||||||
|
('textarea', 'description', 'itestsudocmd desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'itestsudocmd desc mod'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
CMD_PKEY2 = 'itestsudocmd2'
|
||||||
|
CMD_DATA2 = {
|
||||||
|
'pkey': CMD_PKEY2,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'sudocmd', CMD_PKEY2),
|
||||||
|
('textarea', 'description', 'itestsudocmd2 desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'itestsudocmd2 desc mod'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
CMD_GROUP_PKEY = 'itestsudocmdgroup'
|
||||||
|
CMDGROUP_DATA = {
|
||||||
|
'pkey': CMD_GROUP_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', CMD_GROUP_PKEY),
|
||||||
|
('textarea', 'description', 'itestsudocmdgroup desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'itestsudocmdgroup desc mod'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
CMD_GROUP_PKEY2 = 'itestsudocmdgroup2'
|
||||||
|
CMDGROUP_DATA2 = {
|
||||||
|
'pkey': CMD_GROUP_PKEY2,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', CMD_GROUP_PKEY2),
|
||||||
|
('textarea', 'description', 'itestsudocmdgroup2 desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'itestsudocmdgroup2 desc mod'),
|
||||||
|
],
|
||||||
|
}
|
||||||
49
ipatests/test_webui/data_user.py
Normal file
49
ipatests/test_webui/data_user.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
ENTITY = 'user'
|
||||||
|
|
||||||
|
PKEY = 'itest-user'
|
||||||
|
DATA = {
|
||||||
|
'pkey': PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'uid', PKEY),
|
||||||
|
('textbox', 'givenname', 'Name'),
|
||||||
|
('textbox', 'sn', 'Surname'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textbox', 'givenname','OtherName'),
|
||||||
|
('textbox', 'sn','OtherSurname'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
PKEY2 = 'itest-user2'
|
||||||
|
DATA2 = {
|
||||||
|
'pkey': PKEY2,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'uid', PKEY2),
|
||||||
|
('textbox', 'givenname', 'Name2'),
|
||||||
|
('textbox', 'sn', 'Surname2'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textbox', 'givenname','OtherName2'),
|
||||||
|
('textbox', 'sn','OtherSurname2'),
|
||||||
|
],
|
||||||
|
}
|
||||||
94
ipatests/test_webui/test_automember.py
Normal file
94
ipatests/test_webui/test_automember.py
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Automember tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
import ipatests.test_webui.data_hostgroup as hostgroup
|
||||||
|
|
||||||
|
ENTITY = 'automember'
|
||||||
|
|
||||||
|
USER_GROUP_PKEY = 'admins'
|
||||||
|
USER_GROUP_DATA = {
|
||||||
|
'pkey': USER_GROUP_PKEY,
|
||||||
|
'add': [
|
||||||
|
('combobox', 'cn', USER_GROUP_PKEY),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'user group rule description'),
|
||||||
|
#(
|
||||||
|
#'add_table_record',
|
||||||
|
#'automemberinclusiveregex',
|
||||||
|
#(
|
||||||
|
#'table-widget',
|
||||||
|
#{
|
||||||
|
#'fields': [
|
||||||
|
#('textbox', 'automemberinclusiveregex', 'testregex')
|
||||||
|
#]
|
||||||
|
#},
|
||||||
|
#)
|
||||||
|
#)
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
HOST_GROUP_DATA = {
|
||||||
|
'pkey': hostgroup.PKEY,
|
||||||
|
'add': [
|
||||||
|
('combobox', 'cn', hostgroup.PKEY),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'host group rule description'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_automember(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: automember
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
# user group rule
|
||||||
|
self.basic_crud(ENTITY, USER_GROUP_DATA,
|
||||||
|
search_facet='searchgroup',
|
||||||
|
default_facet='usergrouprule',
|
||||||
|
details_facet='usergrouprule',
|
||||||
|
)
|
||||||
|
|
||||||
|
# prepare host group
|
||||||
|
self.basic_crud(hostgroup.ENTITY, hostgroup.DATA,
|
||||||
|
default_facet=hostgroup.DEFAULT_FACET,
|
||||||
|
delete=False)
|
||||||
|
|
||||||
|
# host group rule
|
||||||
|
self.navigate_by_menu('policy/automember/amhostgroup')
|
||||||
|
|
||||||
|
self.basic_crud(ENTITY, HOST_GROUP_DATA,
|
||||||
|
search_facet='searchhostgroup',
|
||||||
|
default_facet='hostgrouprule',
|
||||||
|
details_facet='hostgrouprule',
|
||||||
|
navigate=False,
|
||||||
|
breadcrumb='Host group rules',
|
||||||
|
)
|
||||||
|
|
||||||
|
# cleanup
|
||||||
|
self.delete(hostgroup.ENTITY, [hostgroup.DATA])
|
||||||
104
ipatests/test_webui/test_automount.py
Normal file
104
ipatests/test_webui/test_automount.py
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Automount tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
LOC_ENTITY = 'automountlocation'
|
||||||
|
MAP_ENTITY = 'automountmap'
|
||||||
|
KEY_ENTITY = 'automountkey'
|
||||||
|
|
||||||
|
LOC_PKEY = 'itestloc'
|
||||||
|
LOC_DATA = {
|
||||||
|
'pkey': LOC_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', LOC_PKEY),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
MAP_PKEY = 'itestmap'
|
||||||
|
MAP_DATA = {
|
||||||
|
'pkey': MAP_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'automountmapname', MAP_PKEY),
|
||||||
|
('textarea', 'description', 'map desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description', 'map desc mod'),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
KEY_PKEY = 'itestkey'
|
||||||
|
KEY_DATA = {
|
||||||
|
'pkey': KEY_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'automountkey', KEY_PKEY),
|
||||||
|
('textbox', 'automountinformation', '/itest/key'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textbox', 'automountinformation', '/itest/key2'),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_automount(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: automount
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
# location
|
||||||
|
self.basic_crud(LOC_ENTITY, LOC_DATA,
|
||||||
|
default_facet='maps',
|
||||||
|
delete=False,
|
||||||
|
breadcrumb='Automount Locations'
|
||||||
|
)
|
||||||
|
|
||||||
|
# map
|
||||||
|
self.navigate_to_record(LOC_PKEY)
|
||||||
|
|
||||||
|
self.basic_crud(MAP_ENTITY, MAP_DATA,
|
||||||
|
parent_entity=LOC_ENTITY,
|
||||||
|
search_facet='maps',
|
||||||
|
default_facet='keys',
|
||||||
|
delete=False,
|
||||||
|
navigate=False,
|
||||||
|
breadcrumb=LOC_PKEY,
|
||||||
|
)
|
||||||
|
|
||||||
|
# key
|
||||||
|
self.navigate_to_record(MAP_PKEY)
|
||||||
|
|
||||||
|
self.basic_crud(KEY_ENTITY, KEY_DATA,
|
||||||
|
parent_entity=MAP_ENTITY,
|
||||||
|
search_facet='keys',
|
||||||
|
navigate=False,
|
||||||
|
breadcrumb=MAP_PKEY,
|
||||||
|
)
|
||||||
|
|
||||||
|
# delete
|
||||||
|
self.navigate_by_breadcrumb(LOC_PKEY)
|
||||||
|
self.delete_record(MAP_PKEY)
|
||||||
|
|
||||||
|
self.navigate_by_breadcrumb('Automount Locations')
|
||||||
|
self.delete_record(LOC_PKEY)
|
||||||
47
ipatests/test_webui/test_cert.py
Normal file
47
ipatests/test_webui/test_cert.py
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Cert tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ENTITY = 'cert'
|
||||||
|
|
||||||
|
class test_cert(UI_driver):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(test_cert, self).__init__(args, kwargs)
|
||||||
|
|
||||||
|
if not self.has_ca():
|
||||||
|
self.skip('CA not configured')
|
||||||
|
|
||||||
|
|
||||||
|
def test_read(self):
|
||||||
|
"""
|
||||||
|
Basic read: cert
|
||||||
|
|
||||||
|
Certs don't have standard mod, add and delete methods.
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.navigate_to_entity(ENTITY)
|
||||||
|
rows = self.get_rows()
|
||||||
|
self.navigate_to_row_record(rows[0])
|
||||||
|
self.navigate_by_breadcrumb("Certificates")
|
||||||
52
ipatests/test_webui/test_config.py
Normal file
52
ipatests/test_webui/test_config.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Config tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ENTITY = 'config'
|
||||||
|
|
||||||
|
DATA = {
|
||||||
|
'mod': [
|
||||||
|
('textbox', 'ipasearchrecordslimit','200'),
|
||||||
|
('textbox', 'ipasearchtimelimit','3'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
DATA2 = {
|
||||||
|
'mod': [
|
||||||
|
('textbox', 'ipasearchrecordslimit','100'),
|
||||||
|
('textbox', 'ipasearchtimelimit','2'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_config(UI_driver):
|
||||||
|
|
||||||
|
def test_mod(self):
|
||||||
|
"""
|
||||||
|
Config mod tests
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.navigate_to_entity(ENTITY)
|
||||||
|
|
||||||
|
self.mod_record(ENTITY, DATA)
|
||||||
|
self.mod_record(ENTITY, DATA2)
|
||||||
51
ipatests/test_webui/test_delegation.py
Normal file
51
ipatests/test_webui/test_delegation.py
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Delegation tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ENTITY = 'delegation'
|
||||||
|
PKEY = 'itest-delegation-rule'
|
||||||
|
|
||||||
|
DATA = {
|
||||||
|
'pkey': PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'aciname', PKEY),
|
||||||
|
('combobox', 'group', 'editors'),
|
||||||
|
('combobox', 'memberof', 'ipausers'),
|
||||||
|
('table', 'attrs', 'audio'),
|
||||||
|
('table', 'attrs', 'businesscategory'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('table', 'attrs', 'businesscategory'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_delegation(UI_driver):
|
||||||
|
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: delegation
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(ENTITY, DATA)
|
||||||
107
ipatests/test_webui/test_dns.py
Normal file
107
ipatests/test_webui/test_dns.py
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
DNS tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ZONE_ENTITY = 'dnszone'
|
||||||
|
RECORD_ENTITY = 'dnsrecord'
|
||||||
|
CONFIG_ENTITY = 'dnsconfig'
|
||||||
|
|
||||||
|
ZONE_DEFAULT_FACET = 'records'
|
||||||
|
|
||||||
|
ZONE_PKEY = 'foo.itest'
|
||||||
|
|
||||||
|
ZONE_DATA = {
|
||||||
|
'pkey': ZONE_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'idnsname', ZONE_PKEY),
|
||||||
|
('textbox', 'idnssoamname', 'ns'),
|
||||||
|
('textbox', 'ip_address', '192.168.1.1'),
|
||||||
|
('checkbox', 'force', ''),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('checkbox', 'idnsallowsyncptr',''),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
RECORD_PKEY = 'itest'
|
||||||
|
RECORD_ADD_DATA = {
|
||||||
|
'pkey': RECORD_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'idnsname', RECORD_PKEY),
|
||||||
|
('textbox', 'a_part_ip_address', '192.168.1.10'),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
RECORD_MOD_DATA = {
|
||||||
|
'fields': [
|
||||||
|
('textbox', 'a_part_ip_address', '192.168.1.11'),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
CONFIG_MOD_DATA = {
|
||||||
|
'mod': [
|
||||||
|
('checkbox', 'idnsallowsyncptr',''),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_dns(UI_driver):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(test_dns, self).__init__(args, kwargs)
|
||||||
|
|
||||||
|
if not self.has_dns():
|
||||||
|
self.skip('DNS not configured')
|
||||||
|
|
||||||
|
def test_zone_record_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: dns
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
# add and mod zone
|
||||||
|
self.basic_crud(ZONE_ENTITY, ZONE_DATA,
|
||||||
|
default_facet=ZONE_DEFAULT_FACET , delete=False)
|
||||||
|
|
||||||
|
# add and mod record
|
||||||
|
self.navigate_to_record(ZONE_PKEY)
|
||||||
|
self.add_record(ZONE_ENTITY, RECORD_ADD_DATA,
|
||||||
|
facet=ZONE_DEFAULT_FACET, navigate=False)
|
||||||
|
self.navigate_to_record(RECORD_PKEY)
|
||||||
|
self.add_table_record('arecord', RECORD_MOD_DATA)
|
||||||
|
|
||||||
|
# del record, del zone
|
||||||
|
self.navigate_by_breadcrumb(ZONE_PKEY)
|
||||||
|
self.delete_record(RECORD_PKEY)
|
||||||
|
self.navigate_by_breadcrumb("DNS Zones")
|
||||||
|
self.delete_record(ZONE_PKEY)
|
||||||
|
|
||||||
|
|
||||||
|
def test_config_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: dnsconfig
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.navigate_by_menu('identity/dns/dnsconfig')
|
||||||
|
self.mod_record(CONFIG_ENTITY, CONFIG_MOD_DATA)
|
||||||
194
ipatests/test_webui/test_group.py
Normal file
194
ipatests/test_webui/test_group.py
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Group tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
import ipatests.test_webui.data_group as group
|
||||||
|
import ipatests.test_webui.data_user as user
|
||||||
|
import ipatests.test_webui.data_netgroup as netgroup
|
||||||
|
import ipatests.test_webui.data_hbac as hbac
|
||||||
|
import ipatests.test_webui.test_rbac as rbac
|
||||||
|
import ipatests.test_webui.data_sudo as sudo
|
||||||
|
|
||||||
|
|
||||||
|
class test_group(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: group
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(group.ENTITY, group.DATA,
|
||||||
|
default_facet=group.DEFAULT_FACET)
|
||||||
|
|
||||||
|
def test_actions(self):
|
||||||
|
"""
|
||||||
|
Test group actions
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
self.add_record(group.ENTITY, group.DATA)
|
||||||
|
self.navigate_to_record(group.PKEY)
|
||||||
|
self.switch_to_facet('details')
|
||||||
|
self.make_posix_action()
|
||||||
|
self.delete_action()
|
||||||
|
|
||||||
|
self.add_record(group.ENTITY, group.DATA, navigate=False)
|
||||||
|
self.navigate_to_record(group.PKEY)
|
||||||
|
self.switch_to_facet('details')
|
||||||
|
self.facet_button_click('refresh')# workaround for BUG: #3702
|
||||||
|
self.make_external_action()
|
||||||
|
self.delete_action()
|
||||||
|
|
||||||
|
def make_external_action(self):
|
||||||
|
self.action_list_action('make_external')
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_no_error_dialog()
|
||||||
|
self.assert_text_field('external', 'External', element='span')
|
||||||
|
|
||||||
|
def make_posix_action(self):
|
||||||
|
self.action_list_action('make_posix')
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_no_error_dialog()
|
||||||
|
self.assert_text_field('external', 'POSIX', element='span')
|
||||||
|
|
||||||
|
def delete_action(self, entity=group.ENTITY, pkey=group.PKEY):
|
||||||
|
self.action_list_action('delete')
|
||||||
|
self.wait_for_request(n=4)
|
||||||
|
self.assert_no_error_dialog()
|
||||||
|
self.assert_facet(entity, 'search')
|
||||||
|
self.assert_record(pkey, negative=True)
|
||||||
|
|
||||||
|
def test_associations(self):
|
||||||
|
"""
|
||||||
|
Test group associations
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
# prepare
|
||||||
|
# -------
|
||||||
|
self.add_record(group.ENTITY, group.DATA)
|
||||||
|
self.add_record(group.ENTITY, group.DATA2, navigate=False)
|
||||||
|
self.add_record(group.ENTITY, group.DATA3, navigate=False)
|
||||||
|
self.add_record(user.ENTITY, user.DATA)
|
||||||
|
self.add_record(netgroup.ENTITY, netgroup.DATA)
|
||||||
|
self.add_record(rbac.ROLE_ENTITY, rbac.ROLE_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_record(group.PKEY, entity=group.ENTITY)
|
||||||
|
|
||||||
|
# members
|
||||||
|
self.add_associations([group.PKEY2], facet='member_group', delete=True)
|
||||||
|
self.add_associations([user.PKEY], facet='member_user', delete=True)
|
||||||
|
# TODO: external
|
||||||
|
|
||||||
|
# member of
|
||||||
|
self.add_associations([group.PKEY3], facet='memberof_group', delete=True)
|
||||||
|
self.add_associations([netgroup.PKEY], facet='memberof_netgroup', delete=True)
|
||||||
|
self.add_associations([rbac.ROLE_PKEY], facet='memberof_role', delete=True)
|
||||||
|
self.add_associations([hbac.RULE_PKEY], facet='memberof_hbacrule', delete=True)
|
||||||
|
self.navigate_to_record(group.PKEY, entity=group.ENTITY)
|
||||||
|
self.add_associations([sudo.RULE_PKEY], facet='memberof_sudorule', delete=True)
|
||||||
|
|
||||||
|
# cleanup
|
||||||
|
# -------
|
||||||
|
self.delete(group.ENTITY, [group.DATA, group.DATA2, group.DATA3])
|
||||||
|
self.delete(user.ENTITY, [user.DATA])
|
||||||
|
self.delete(netgroup.ENTITY, [netgroup.DATA])
|
||||||
|
self.delete(rbac.ROLE_ENTITY, [rbac.ROLE_DATA])
|
||||||
|
self.delete(hbac.RULE_ENTITY, [hbac.RULE_DATA])
|
||||||
|
self.delete(sudo.RULE_ENTITY, [sudo.RULE_DATA])
|
||||||
|
|
||||||
|
def test_indirect_associations(self):
|
||||||
|
"""
|
||||||
|
Group indirect associations
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
# add
|
||||||
|
# ---
|
||||||
|
self.add_record(group.ENTITY, group.DATA)
|
||||||
|
self.add_record(group.ENTITY, group.DATA2, navigate=False)
|
||||||
|
self.add_record(group.ENTITY, group.DATA3, navigate=False)
|
||||||
|
self.add_record(group.ENTITY, group.DATA4, navigate=False)
|
||||||
|
self.add_record(group.ENTITY, group.DATA5, navigate=False)
|
||||||
|
self.add_record(user.ENTITY, user.DATA)
|
||||||
|
|
||||||
|
# prepare indirect member
|
||||||
|
self.navigate_to_entity(group.ENTITY, 'search')
|
||||||
|
self.navigate_to_record(group.PKEY2)
|
||||||
|
self.add_associations([user.PKEY])
|
||||||
|
self.add_associations([group.PKEY3], 'member_group')
|
||||||
|
|
||||||
|
self.navigate_to_entity(group.ENTITY, 'search')
|
||||||
|
self.navigate_to_record(group.PKEY)
|
||||||
|
self.add_associations([group.PKEY2], 'member_group')
|
||||||
|
|
||||||
|
# prepare indirect memberof
|
||||||
|
self.navigate_to_entity(group.ENTITY, 'search')
|
||||||
|
self.navigate_to_record(group.PKEY4)
|
||||||
|
self.add_associations([group.PKEY], 'member_group')
|
||||||
|
self.add_associations([group.PKEY5], 'memberof_group')
|
||||||
|
|
||||||
|
|
||||||
|
self.add_record(netgroup.ENTITY, netgroup.DATA)
|
||||||
|
self.navigate_to_record(netgroup.PKEY)
|
||||||
|
self.add_table_associations('memberuser_group', [group.PKEY4])
|
||||||
|
|
||||||
|
self.add_record(rbac.ROLE_ENTITY, rbac.ROLE_DATA)
|
||||||
|
self.navigate_to_record(rbac.ROLE_PKEY)
|
||||||
|
self.add_associations([group.PKEY4], facet='member_group')
|
||||||
|
|
||||||
|
self.add_record(hbac.RULE_ENTITY, hbac.RULE_DATA)
|
||||||
|
self.navigate_to_record(hbac.RULE_PKEY)
|
||||||
|
self.add_table_associations('memberuser_group', [group.PKEY4])
|
||||||
|
|
||||||
|
self.add_record(sudo.RULE_ENTITY, sudo.RULE_DATA)
|
||||||
|
self.navigate_to_record(sudo.RULE_PKEY)
|
||||||
|
self.add_table_associations('memberuser_group', [group.PKEY4])
|
||||||
|
|
||||||
|
# check indirect associations
|
||||||
|
# ---------------------------
|
||||||
|
self.navigate_to_entity(group.ENTITY, 'search')
|
||||||
|
self.navigate_to_record(group.PKEY)
|
||||||
|
|
||||||
|
self.assert_indirect_record(user.PKEY, group.ENTITY, 'member_user')
|
||||||
|
self.assert_indirect_record(group.PKEY3, group.ENTITY, 'member_group')
|
||||||
|
|
||||||
|
self.assert_indirect_record(group.PKEY5, group.ENTITY, 'memberof_group')
|
||||||
|
self.assert_indirect_record(netgroup.PKEY, group.ENTITY, 'memberof_netgroup')
|
||||||
|
self.assert_indirect_record(rbac.ROLE_PKEY, group.ENTITY, 'memberof_role')
|
||||||
|
self.assert_indirect_record(hbac.RULE_PKEY, group.ENTITY, 'memberof_hbacrule')
|
||||||
|
self.assert_indirect_record(sudo.RULE_PKEY, group.ENTITY, 'memberof_sudorule')
|
||||||
|
|
||||||
|
## cleanup
|
||||||
|
## -------
|
||||||
|
self.delete(group.ENTITY, [group.DATA, group.DATA2, group.DATA3, group.DATA4, group.DATA5])
|
||||||
|
self.delete(user.ENTITY, [user.DATA])
|
||||||
|
self.delete(netgroup.ENTITY, [netgroup.DATA])
|
||||||
|
self.delete(rbac.ROLE_ENTITY, [rbac.ROLE_DATA])
|
||||||
|
self.delete(hbac.RULE_ENTITY, [hbac.RULE_DATA])
|
||||||
|
self.delete(sudo.RULE_ENTITY, [sudo.RULE_DATA])
|
||||||
159
ipatests/test_webui/test_hbac.py
Normal file
159
ipatests/test_webui/test_hbac.py
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
HBAC tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
import ipatests.test_webui.data_hbac as hbac
|
||||||
|
import ipatests.test_webui.data_hostgroup as hostgroup
|
||||||
|
|
||||||
|
|
||||||
|
class test_hbac(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: hbac
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(hbac.RULE_ENTITY, hbac.RULE_DATA)
|
||||||
|
self.basic_crud(hbac.SVC_ENTITY, hbac.SVC_DATA)
|
||||||
|
self.basic_crud(hbac.SVCGROUP_ENTITY, hbac.SVCGROUP_DATA,
|
||||||
|
default_facet=hbac.SVCGROUP_DEF_FACET)
|
||||||
|
|
||||||
|
def test_mod(self):
|
||||||
|
"""
|
||||||
|
Mod: hbac
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
host_key = self.config.get('ipa_server').strip()
|
||||||
|
|
||||||
|
self.add_record(hostgroup.ENTITY, hostgroup.DATA)
|
||||||
|
self.add_record(hbac.RULE_ENTITY, hbac.RULE_DATA)
|
||||||
|
|
||||||
|
self.navigate_to_record(hbac.RULE_PKEY)
|
||||||
|
|
||||||
|
tables = [
|
||||||
|
['memberuser_user', ['admin'],],
|
||||||
|
['memberuser_group', ['editors'],],
|
||||||
|
['memberhost_host', [host_key],],
|
||||||
|
['memberhost_hostgroup', [hostgroup.PKEY],],
|
||||||
|
['memberservice_hbacsvc', ['ftp'],],
|
||||||
|
['memberservice_hbacsvcgroup', ['Sudo'],],
|
||||||
|
]
|
||||||
|
|
||||||
|
categories = [
|
||||||
|
'usercategory',
|
||||||
|
'hostcategory',
|
||||||
|
'servicecategory',
|
||||||
|
]
|
||||||
|
|
||||||
|
self.mod_rule_tables(tables, categories, [])
|
||||||
|
|
||||||
|
# cleanup
|
||||||
|
# -------
|
||||||
|
self.delete(hbac.RULE_ENTITY, [hbac.RULE_DATA])
|
||||||
|
self.delete(hostgroup.ENTITY, [hostgroup.DATA])
|
||||||
|
|
||||||
|
def test_actions(self):
|
||||||
|
"""
|
||||||
|
Test hbac rule actions
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
self.add_record(hbac.RULE_ENTITY, hbac.RULE_DATA)
|
||||||
|
self.navigate_to_record(hbac.RULE_PKEY)
|
||||||
|
|
||||||
|
self.disable_action()
|
||||||
|
self.enable_action()
|
||||||
|
self.delete_action(hbac.RULE_ENTITY, hbac.RULE_PKEY)
|
||||||
|
|
||||||
|
def test_hbac_test(self):
|
||||||
|
"""
|
||||||
|
Test HBAC test UI
|
||||||
|
|
||||||
|
Test:
|
||||||
|
* basic functionality
|
||||||
|
* navigation by next/prev buttons
|
||||||
|
* navigation by facet tabs
|
||||||
|
* resetting test
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.init_app()
|
||||||
|
host_key = self.config.get('ipa_server').strip()
|
||||||
|
|
||||||
|
self.navigate_to_entity('hbactest', 'user')
|
||||||
|
self.assert_facet('hbactest', 'user')
|
||||||
|
self.select_record('admin')
|
||||||
|
self.button_click('next')
|
||||||
|
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_facet('hbactest', 'targethost')
|
||||||
|
self.select_record(host_key)
|
||||||
|
self.button_click('prev')
|
||||||
|
self.assert_facet('hbactest', 'user')
|
||||||
|
self.switch_to_facet('targethost')
|
||||||
|
self.button_click('next')
|
||||||
|
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_facet('hbactest', 'service')
|
||||||
|
self.select_record('ftp')
|
||||||
|
self.button_click('prev')
|
||||||
|
self.assert_facet('hbactest', 'targethost')
|
||||||
|
self.switch_to_facet('service')
|
||||||
|
self.button_click('next')
|
||||||
|
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_facet('hbactest', 'rules')
|
||||||
|
self.select_record('allow_all')
|
||||||
|
self.button_click('prev')
|
||||||
|
self.assert_facet('hbactest', 'service')
|
||||||
|
self.switch_to_facet('rules')
|
||||||
|
self.button_click('next')
|
||||||
|
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_facet('hbactest', 'run_test')
|
||||||
|
self.button_click('run_test')
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_text("div.hbac-test-result-panel p", 'Access Granted'.upper())
|
||||||
|
self.button_click('prev')
|
||||||
|
self.assert_facet('hbactest', 'rules')
|
||||||
|
self.switch_to_facet('run_test')
|
||||||
|
self.button_click('new_test')
|
||||||
|
self.assert_facet('hbactest', 'user')
|
||||||
|
|
||||||
|
# test pre-run validation and navigation to related facet
|
||||||
|
self.switch_to_facet('run_test')
|
||||||
|
self.button_click('run_test')
|
||||||
|
self.assert_dialog('message_dialog')
|
||||||
|
self.click_on_link('User name')
|
||||||
|
self.assert_facet('hbactest', 'user')
|
||||||
|
|
||||||
|
self.switch_to_facet('run_test')
|
||||||
|
self.button_click('run_test')
|
||||||
|
self.assert_dialog('message_dialog')
|
||||||
|
self.click_on_link('Target host')
|
||||||
|
self.assert_facet('hbactest', 'targethost')
|
||||||
|
|
||||||
|
self.switch_to_facet('run_test')
|
||||||
|
self.button_click('run_test')
|
||||||
|
self.assert_dialog('message_dialog')
|
||||||
|
self.click_on_link('Service')
|
||||||
|
self.assert_facet('hbactest', 'service')
|
||||||
269
ipatests/test_webui/test_host.py
Normal file
269
ipatests/test_webui/test_host.py
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Host tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
import ipatests.test_webui.data_hostgroup as hostgroup
|
||||||
|
import ipatests.test_webui.data_netgroup as netgroup
|
||||||
|
import ipatests.test_webui.data_hbac as hbac
|
||||||
|
import ipatests.test_webui.test_rbac as rbac
|
||||||
|
import ipatests.test_webui.data_sudo as sudo
|
||||||
|
|
||||||
|
ENTITY = 'host'
|
||||||
|
|
||||||
|
class host_tasks(UI_driver):
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(host_tasks, self).__init__(args, kwargs)
|
||||||
|
self.prep_data()
|
||||||
|
self.prep_data2()
|
||||||
|
|
||||||
|
def prep_data(self):
|
||||||
|
host = 'itest'
|
||||||
|
domain = self.config.get('ipa_domain')
|
||||||
|
ip = self.get_ip()
|
||||||
|
self.data = self.get_data(host, domain, ip)
|
||||||
|
self.pkey = self.data['pkey']
|
||||||
|
return self.data
|
||||||
|
|
||||||
|
def prep_data2(self):
|
||||||
|
host = 'itest2'
|
||||||
|
domain = self.config.get('ipa_domain')
|
||||||
|
self.data2 = self.get_data(host, domain)
|
||||||
|
self.pkey2 = self.data2['pkey']
|
||||||
|
return self.data2
|
||||||
|
|
||||||
|
def get_data(self, host, domain, ip=None):
|
||||||
|
if self.has_dns():
|
||||||
|
add_data = [
|
||||||
|
('textbox', 'hostname', host),
|
||||||
|
('combobox', 'dnszone', domain),
|
||||||
|
]
|
||||||
|
if ip:
|
||||||
|
add_data.append(('textbox', 'ip_address', ip))
|
||||||
|
add_data.append(('checkbox', 'force', ''))
|
||||||
|
del_data = [
|
||||||
|
('checkbox', 'updatedns', '')
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
add_data = [
|
||||||
|
('textbox', 'fqdn', '%s.%s' % (host, domain)),
|
||||||
|
('checkbox', 'force', ''),
|
||||||
|
]
|
||||||
|
del_data = None
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'pkey': '%s.%s' % (host, domain),
|
||||||
|
'add': add_data,
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description','Desc'),
|
||||||
|
],
|
||||||
|
'del': del_data,
|
||||||
|
}
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
def get_ip(self):
|
||||||
|
"""
|
||||||
|
Get next IP
|
||||||
|
"""
|
||||||
|
ip = self.config.get('ipa_ip')
|
||||||
|
if not ip:
|
||||||
|
self.skip('FreeIPA Server IP address not configured')
|
||||||
|
ip = ip.split('.')
|
||||||
|
last = int(ip.pop())
|
||||||
|
ip.append(str(last+1))
|
||||||
|
return '.'.join(ip)
|
||||||
|
|
||||||
|
def load_csr(self, path):
|
||||||
|
# ENHANCEMENT: generate csr dynamically
|
||||||
|
with open(path, 'r') as csr_file:
|
||||||
|
csr = csr_file.read()
|
||||||
|
return csr
|
||||||
|
|
||||||
|
|
||||||
|
class test_host(host_tasks):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: host
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(ENTITY, self.data)
|
||||||
|
|
||||||
|
def test_certificates(self):
|
||||||
|
"""
|
||||||
|
Test host certificate actions
|
||||||
|
|
||||||
|
Requires to have CA installed and 'host_csr_path' configuration option
|
||||||
|
set.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not self.has_ca():
|
||||||
|
self.skip('CA is not configured')
|
||||||
|
|
||||||
|
csr_path = self.config.get('host_csr_path')
|
||||||
|
if not csr_path:
|
||||||
|
self.skip('CSR file is not configured')
|
||||||
|
|
||||||
|
self.init_app()
|
||||||
|
csr = self.load_csr(csr_path)
|
||||||
|
panel = 'cert_actions'
|
||||||
|
realm = self.config.get('ipa_realm')
|
||||||
|
|
||||||
|
self.add_record(ENTITY, self.data)
|
||||||
|
self.navigate_to_record(self.pkey)
|
||||||
|
|
||||||
|
self.assert_visible("div[name='certificate-missing']")
|
||||||
|
|
||||||
|
# cert request
|
||||||
|
self.action_panel_action(panel, 'request_cert')
|
||||||
|
self.fill_text('textarea.certificate', csr)
|
||||||
|
self.dialog_button_click('issue')
|
||||||
|
self.wait_for_request(n=2,d=0.5)
|
||||||
|
self.assert_visible("div[name='certificate-valid']")
|
||||||
|
|
||||||
|
# cert view
|
||||||
|
self.action_panel_action(panel, 'view_cert')
|
||||||
|
self.wait()
|
||||||
|
self.assert_text("tbody tr:nth-child(2) td:nth-child(2)", self.pkey)
|
||||||
|
self.assert_text("tbody tr:nth-child(3) td:nth-child(2)", realm)
|
||||||
|
self.dialog_button_click('close')
|
||||||
|
|
||||||
|
# cert get
|
||||||
|
self.action_panel_action(panel, 'get_cert')
|
||||||
|
self.wait()
|
||||||
|
# We don't know the cert text, so at least open and close the dialog
|
||||||
|
self.dialog_button_click('close')
|
||||||
|
|
||||||
|
## cert revoke
|
||||||
|
self.action_panel_action(panel, 'revoke_cert')
|
||||||
|
self.wait()
|
||||||
|
self.select('select', '6')
|
||||||
|
self.dialog_button_click('ok')
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_visible("div[name='certificate-revoked']")
|
||||||
|
|
||||||
|
## cert restore
|
||||||
|
self.action_panel_action(panel, 'restore_cert')
|
||||||
|
self.wait()
|
||||||
|
self.dialog_button_click('ok')
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_visible("div[name='certificate-valid']")
|
||||||
|
|
||||||
|
# cleanup
|
||||||
|
self.navigate_to_entity(ENTITY, 'search')
|
||||||
|
self.delete_record(self.pkey, self.data.get('del'))
|
||||||
|
|
||||||
|
def test_associations(self):
|
||||||
|
"""
|
||||||
|
Host direct associations
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
# prepare
|
||||||
|
# -------
|
||||||
|
self.add_record(ENTITY, self.data)
|
||||||
|
self.add_record(ENTITY, self.data2, navigate=False)
|
||||||
|
self.add_record(hostgroup.ENTITY, hostgroup.DATA)
|
||||||
|
self.add_record(netgroup.ENTITY, netgroup.DATA)
|
||||||
|
self.add_record(rbac.ROLE_ENTITY, rbac.ROLE_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(ENTITY)
|
||||||
|
self.navigate_to_record(self.pkey)
|
||||||
|
|
||||||
|
self.add_associations([hostgroup.PKEY], facet='memberof_hostgroup', delete=True)
|
||||||
|
self.add_associations([netgroup.PKEY], facet='memberof_netgroup', delete=True)
|
||||||
|
self.add_associations([rbac.ROLE_PKEY], facet='memberof_role', delete=True)
|
||||||
|
self.add_associations([hbac.RULE_PKEY], facet='memberof_hbacrule', delete=True)
|
||||||
|
self.add_associations([sudo.RULE_PKEY], facet='memberof_sudorule', delete=True)
|
||||||
|
self.add_associations([self.pkey2], facet='managedby_host', delete=True)
|
||||||
|
|
||||||
|
# cleanup
|
||||||
|
# -------
|
||||||
|
self.delete(ENTITY, [self.data, self.data2])
|
||||||
|
self.delete(hostgroup.ENTITY, [hostgroup.DATA])
|
||||||
|
self.delete(netgroup.ENTITY, [netgroup.DATA])
|
||||||
|
self.delete(rbac.ROLE_ENTITY, [rbac.ROLE_DATA])
|
||||||
|
self.delete(hbac.RULE_ENTITY, [hbac.RULE_DATA])
|
||||||
|
self.delete(sudo.RULE_ENTITY, [sudo.RULE_DATA])
|
||||||
|
|
||||||
|
def test_indirect_associations(self):
|
||||||
|
"""
|
||||||
|
Host indirect associations
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
# add
|
||||||
|
# ---
|
||||||
|
self.add_record(ENTITY, self.data)
|
||||||
|
|
||||||
|
self.add_record(hostgroup.ENTITY, hostgroup.DATA)
|
||||||
|
self.navigate_to_record(hostgroup.PKEY)
|
||||||
|
self.add_associations([self.pkey])
|
||||||
|
|
||||||
|
self.add_record(hostgroup.ENTITY, hostgroup.DATA2)
|
||||||
|
self.navigate_to_record(hostgroup.PKEY2)
|
||||||
|
self.switch_to_facet('member_hostgroup')
|
||||||
|
self.add_associations([hostgroup.PKEY])
|
||||||
|
|
||||||
|
self.add_record(netgroup.ENTITY, netgroup.DATA)
|
||||||
|
self.navigate_to_record(netgroup.PKEY)
|
||||||
|
self.add_table_associations('memberhost_hostgroup', [hostgroup.PKEY2])
|
||||||
|
|
||||||
|
self.add_record(rbac.ROLE_ENTITY, rbac.ROLE_DATA)
|
||||||
|
self.navigate_to_record(rbac.ROLE_PKEY)
|
||||||
|
self.switch_to_facet('member_hostgroup')
|
||||||
|
self.add_associations([hostgroup.PKEY2])
|
||||||
|
|
||||||
|
self.add_record(hbac.RULE_ENTITY, hbac.RULE_DATA)
|
||||||
|
self.navigate_to_record(hbac.RULE_PKEY)
|
||||||
|
self.add_table_associations('memberhost_hostgroup', [hostgroup.PKEY2])
|
||||||
|
|
||||||
|
self.add_record(sudo.RULE_ENTITY, sudo.RULE_DATA)
|
||||||
|
self.navigate_to_record(sudo.RULE_PKEY)
|
||||||
|
self.add_table_associations('memberhost_hostgroup', [hostgroup.PKEY2])
|
||||||
|
|
||||||
|
# check indirect associations
|
||||||
|
# ---------------------------
|
||||||
|
self.navigate_to_entity(ENTITY, 'search')
|
||||||
|
self.navigate_to_record(self.pkey)
|
||||||
|
|
||||||
|
self.assert_indirect_record(hostgroup.PKEY2, ENTITY, 'memberof_hostgroup')
|
||||||
|
self.assert_indirect_record(netgroup.PKEY, ENTITY, 'memberof_netgroup')
|
||||||
|
self.assert_indirect_record(rbac.ROLE_PKEY, ENTITY, 'memberof_role')
|
||||||
|
self.assert_indirect_record(hbac.RULE_PKEY, ENTITY, 'memberof_hbacrule')
|
||||||
|
self.assert_indirect_record(sudo.RULE_PKEY, ENTITY, 'memberof_sudorule')
|
||||||
|
|
||||||
|
## cleanup
|
||||||
|
## -------
|
||||||
|
self.delete(ENTITY, [self.data])
|
||||||
|
self.delete(hostgroup.ENTITY, [hostgroup.DATA, hostgroup.DATA2])
|
||||||
|
self.delete(netgroup.ENTITY, [netgroup.DATA])
|
||||||
|
self.delete(rbac.ROLE_ENTITY, [rbac.ROLE_DATA])
|
||||||
|
self.delete(hbac.RULE_ENTITY, [hbac.RULE_DATA])
|
||||||
|
self.delete(sudo.RULE_ENTITY, [sudo.RULE_DATA])
|
||||||
141
ipatests/test_webui/test_hostgroup.py
Normal file
141
ipatests/test_webui/test_hostgroup.py
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Hostgroup tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
import ipatests.test_webui.data_hostgroup as hostgroup
|
||||||
|
from ipatests.test_webui.test_host import host_tasks, ENTITY as HOST_ENTITY
|
||||||
|
import ipatests.test_webui.data_netgroup as netgroup
|
||||||
|
import ipatests.test_webui.data_hbac as hbac
|
||||||
|
import ipatests.test_webui.test_rbac as rbac
|
||||||
|
import ipatests.test_webui.data_sudo as sudo
|
||||||
|
|
||||||
|
class test_hostgroup(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: hostgroup
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(hostgroup.ENTITY, hostgroup.DATA,
|
||||||
|
default_facet=hostgroup.DEFAULT_FACET)
|
||||||
|
|
||||||
|
def test_associations(self):
|
||||||
|
"""
|
||||||
|
Hostgroup associations
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
host = host_tasks(self.driver, self.config)
|
||||||
|
|
||||||
|
# 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_indirect_associations(self):
|
||||||
|
"""
|
||||||
|
Hostgroup indirect associations
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
host = host_tasks(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])
|
||||||
52
ipatests/test_webui/test_krbtpolicy.py
Normal file
52
ipatests/test_webui/test_krbtpolicy.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Kerberos policy tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ENTITY = 'krbtpolicy'
|
||||||
|
|
||||||
|
DATA = {
|
||||||
|
'mod': [
|
||||||
|
('textbox', 'krbmaxrenewableage','599000'),
|
||||||
|
('textbox', 'krbmaxticketlife','79800'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
DATA2 = {
|
||||||
|
'mod': [
|
||||||
|
('textbox', 'krbmaxrenewableage','604800'),
|
||||||
|
('textbox', 'krbmaxticketlife','86400'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_krbtpolicy(UI_driver):
|
||||||
|
|
||||||
|
def test_mod(self):
|
||||||
|
"""
|
||||||
|
Kerberos policy mod test
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.navigate_to_entity(ENTITY)
|
||||||
|
|
||||||
|
self.mod_record(ENTITY, DATA)
|
||||||
|
self.mod_record(ENTITY, DATA2)
|
||||||
149
ipatests/test_webui/test_navigation.py
Normal file
149
ipatests/test_webui/test_navigation.py
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Basic ui tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
|
||||||
|
ENTITIES = [
|
||||||
|
'group',
|
||||||
|
'user',
|
||||||
|
'host',
|
||||||
|
'hostgroup',
|
||||||
|
'netgroup',
|
||||||
|
'service',
|
||||||
|
'dnszone',
|
||||||
|
# TODO: dnsrecord
|
||||||
|
'dnsconfig',
|
||||||
|
'cert',
|
||||||
|
'realmdomains',
|
||||||
|
'hbacrule',
|
||||||
|
'hbacsvc',
|
||||||
|
'hbacsvcgroup',
|
||||||
|
'hbactest',
|
||||||
|
'sudorule',
|
||||||
|
'sudocmd',
|
||||||
|
'sudocmdgroup',
|
||||||
|
'automountlocation',
|
||||||
|
# TODO: add nested maps, keys
|
||||||
|
'pwpolicy',
|
||||||
|
'krbtpolicy',
|
||||||
|
'selinuxusermap',
|
||||||
|
'automember',
|
||||||
|
# TODO: add different types
|
||||||
|
'role',
|
||||||
|
'privilege',
|
||||||
|
'permission',
|
||||||
|
'selfservice',
|
||||||
|
'delegation',
|
||||||
|
'idrange',
|
||||||
|
'config',
|
||||||
|
# TODO: add conditional
|
||||||
|
]
|
||||||
|
|
||||||
|
class test_navigation(UI_driver):
|
||||||
|
|
||||||
|
def test_url_navigation(self):
|
||||||
|
"""
|
||||||
|
Navigation test: direct url change
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
unsupported = []
|
||||||
|
if not self.has_dns():
|
||||||
|
unsupported.extend([
|
||||||
|
'dnszone',
|
||||||
|
'dnsconfig',
|
||||||
|
])
|
||||||
|
if not self.has_ca():
|
||||||
|
unsupported.append('cert')
|
||||||
|
|
||||||
|
entities = [e for e in ENTITIES if e not in unsupported]
|
||||||
|
|
||||||
|
for e in entities:
|
||||||
|
self.wait_for_request()
|
||||||
|
self.navigate_to_entity(e)
|
||||||
|
self.assert_facet(e)
|
||||||
|
url = self.get_url(e)
|
||||||
|
self.assert_e_url(url, e)
|
||||||
|
|
||||||
|
def test_menu_navigation(self):
|
||||||
|
"""
|
||||||
|
Navigation test: menu items
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
# don't start by users (default)
|
||||||
|
self.navigate_by_menu('identity/group', False)
|
||||||
|
self.navigate_by_menu('identity/user', False)
|
||||||
|
self.navigate_by_menu('identity/host', False)
|
||||||
|
self.navigate_by_menu('identity/hostgroup', False)
|
||||||
|
self.navigate_by_menu('identity/netgroup', False)
|
||||||
|
self.navigate_by_menu('identity/service', False)
|
||||||
|
if self.has_dns():
|
||||||
|
self.navigate_by_menu('identity/dns', False)
|
||||||
|
self.navigate_by_menu('identity/dns/dnsconfig', False)
|
||||||
|
self.navigate_by_menu('identity/dns/dnszone', False)
|
||||||
|
if self.has_ca():
|
||||||
|
self.navigate_by_menu('identity/cert', False)
|
||||||
|
self.navigate_by_menu('identity/realmdomains', False)
|
||||||
|
self.navigate_by_menu('policy')
|
||||||
|
self.navigate_by_menu('policy/hbac', False)
|
||||||
|
self.navigate_by_menu('policy/hbac/hbacsvc', False)
|
||||||
|
self.navigate_by_menu('policy/hbac/hbacrule', False)
|
||||||
|
self.navigate_by_menu('policy/hbac/hbacsvcgroup', False)
|
||||||
|
self.navigate_by_menu('policy/hbac/hbactest', False)
|
||||||
|
self.navigate_by_menu('policy/sudo', False)
|
||||||
|
self.navigate_by_menu('policy/sudo/sudorule', False)
|
||||||
|
self.navigate_by_menu('policy/sudo/sudocmd', False)
|
||||||
|
self.navigate_by_menu('policy/sudo/sudocmdgroup', False)
|
||||||
|
self.navigate_by_menu('policy/automount', False)
|
||||||
|
self.navigate_by_menu('policy/pwpolicy', False)
|
||||||
|
self.navigate_by_menu('policy/krbtpolicy', False)
|
||||||
|
self.navigate_by_menu('policy/selinuxusermap', False)
|
||||||
|
self.navigate_by_menu('policy/automember', False)
|
||||||
|
self.navigate_by_menu('policy/automember/amhostgroup', False)
|
||||||
|
self.navigate_by_menu('policy/automember/amgroup', False)
|
||||||
|
self.navigate_by_menu('ipaserver')
|
||||||
|
self.navigate_by_menu('ipaserver/rolebased', False)
|
||||||
|
self.navigate_by_menu('ipaserver/rolebased/privilege', False)
|
||||||
|
self.navigate_by_menu('ipaserver/rolebased/role', False)
|
||||||
|
self.navigate_by_menu('ipaserver/rolebased/permission', False)
|
||||||
|
self.navigate_by_menu('ipaserver/selfservice', False)
|
||||||
|
self.navigate_by_menu('ipaserver/delegation', False)
|
||||||
|
self.navigate_by_menu('ipaserver/idrange', False)
|
||||||
|
if self.has_trusts():
|
||||||
|
self.navigate_by_menu('ipaserver/trusts', False)
|
||||||
|
self.navigate_by_menu('ipaserver/trusts/trust', False)
|
||||||
|
self.navigate_by_menu('ipaserver/trusts/trustconfig', False)
|
||||||
|
self.navigate_by_menu('ipaserver/config', False)
|
||||||
|
|
||||||
|
|
||||||
|
def assert_e_url(self, url, e):
|
||||||
|
"""
|
||||||
|
Assert correct url for entity
|
||||||
|
"""
|
||||||
|
if not self.driver.current_url.startswith(url):
|
||||||
|
msg = 'Invalid url for: %s' % e
|
||||||
|
raise AssertionError(msg)
|
||||||
81
ipatests/test_webui/test_netgroup.py
Normal file
81
ipatests/test_webui/test_netgroup.py
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Netgroup tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
import ipatests.test_webui.data_netgroup as netgroup
|
||||||
|
import ipatests.test_webui.data_user as user
|
||||||
|
import ipatests.test_webui.data_group as group
|
||||||
|
import ipatests.test_webui.data_hostgroup as hostgroup
|
||||||
|
from ipatests.test_webui.test_host import host_tasks, ENTITY as HOST_ENTITY
|
||||||
|
|
||||||
|
|
||||||
|
class test_netgroup(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: netgroup
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(netgroup.ENTITY, netgroup.DATA)
|
||||||
|
|
||||||
|
def test_mod(self):
|
||||||
|
"""
|
||||||
|
Mod: netgroup
|
||||||
|
"""
|
||||||
|
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(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])
|
||||||
52
ipatests/test_webui/test_pwpolicy.py
Normal file
52
ipatests/test_webui/test_pwpolicy.py
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Password policy tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ENTITY = 'pwpolicy'
|
||||||
|
DATA = {
|
||||||
|
'pkey': 'admins',
|
||||||
|
'add': [
|
||||||
|
('combobox', 'cn', 'admins'),
|
||||||
|
('textbox', 'cospriority', '364'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textbox', 'krbmaxpwdlife','3000'),
|
||||||
|
('textbox', 'krbminpwdlife','1'),
|
||||||
|
('textbox', 'krbpwdhistorylength','0'),
|
||||||
|
('textbox', 'krbpwdmindiffchars','2'),
|
||||||
|
('textbox', 'krbpwdminlength','2'),
|
||||||
|
('textbox', 'krbpwdmaxfailure','15'),
|
||||||
|
('textbox', 'krbpwdfailurecountinterval','5'),
|
||||||
|
('textbox', 'krbpwdlockoutduration','3600'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_pwpolicy(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: pwpolicy
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(ENTITY, DATA)
|
||||||
49
ipatests/test_webui/test_range.py
Normal file
49
ipatests/test_webui/test_range.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
User tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ENTITY = 'idrange'
|
||||||
|
PKEY = 'itest-range'
|
||||||
|
DATA = {
|
||||||
|
'pkey': PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY),
|
||||||
|
('textbox', 'ipabaseid', '900000'),
|
||||||
|
('textbox', 'ipaidrangesize', '99999'),
|
||||||
|
('textbox', 'ipabaserid', '10000'),
|
||||||
|
('textbox', 'ipasecondarybaserid', '200000'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textbox', 'ipaidrangesize', '100000'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_range(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: range
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(ENTITY, DATA)
|
||||||
83
ipatests/test_webui/test_rbac.py
Normal file
83
ipatests/test_webui/test_rbac.py
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
RBAC tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ROLE_ENTITY = 'role'
|
||||||
|
ROLE_DEF_FACET = 'member_user'
|
||||||
|
ROLE_PKEY = 'AAtest_role'
|
||||||
|
ROLE_DATA = {
|
||||||
|
'pkey': ROLE_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', ROLE_PKEY),
|
||||||
|
('textarea', 'description','role desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description','role desc mod'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
PRIVILEGE_ENTITY = 'privilege'
|
||||||
|
PRIVILEGE_DEF_FACET = 'memberof_permission'
|
||||||
|
PRIVILEGE_PKEY = 'AAtest_privilege'
|
||||||
|
PRIVILEGE_DATA = {
|
||||||
|
'pkey': PRIVILEGE_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PRIVILEGE_PKEY),
|
||||||
|
('textarea', 'description','privilege desc'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description','privilege desc mod'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
PERMISSION_ENTITY = 'permission'
|
||||||
|
PERMISSION_PKEY = 'AAtest_perm'
|
||||||
|
PERMISSION_DATA = {
|
||||||
|
'pkey': PERMISSION_PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PERMISSION_PKEY),
|
||||||
|
('checkbox', 'permissions', 'write'),
|
||||||
|
('textbox', 'filter', 'cn=user'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textbox', 'filter','cn=user2'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_rbac(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: RBAC
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(ROLE_ENTITY, ROLE_DATA,
|
||||||
|
default_facet=ROLE_DEF_FACET
|
||||||
|
)
|
||||||
|
|
||||||
|
self.basic_crud(PRIVILEGE_ENTITY, PRIVILEGE_DATA,
|
||||||
|
default_facet=PRIVILEGE_DEF_FACET
|
||||||
|
)
|
||||||
|
|
||||||
|
self.basic_crud(PERMISSION_ENTITY, PERMISSION_DATA)
|
||||||
48
ipatests/test_webui/test_realmdomains.py
Normal file
48
ipatests/test_webui/test_realmdomains.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Realm domains tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ENTITY = 'realmdomains'
|
||||||
|
|
||||||
|
class test_realmdomains(UI_driver):
|
||||||
|
|
||||||
|
def test_read(self):
|
||||||
|
"""
|
||||||
|
Realm domains mod tests
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.navigate_to_entity(ENTITY)
|
||||||
|
|
||||||
|
# add
|
||||||
|
self.add_multivalued('associateddomain', 'itest.bar')
|
||||||
|
self.facet_button_click('update')
|
||||||
|
self.dialog_button_click('force')
|
||||||
|
self.wait_for_request()
|
||||||
|
|
||||||
|
# delete
|
||||||
|
self.delete_multivalued('associateddomain', 'itest.bar')
|
||||||
|
self.facet_button_click('update')
|
||||||
|
self.dialog_button_click('force')
|
||||||
|
self.wait_for_request()
|
||||||
|
self.wait_for_request()
|
||||||
48
ipatests/test_webui/test_selfservice.py
Normal file
48
ipatests/test_webui/test_selfservice.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Selfservice tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ENTITY = 'selfservice'
|
||||||
|
PKEY = 'itest-selfservice-rule'
|
||||||
|
DATA = {
|
||||||
|
'pkey': PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'aciname', PKEY),
|
||||||
|
('table', 'attrs', 'audio'),
|
||||||
|
('table', 'attrs', 'businesscategory'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('table', 'attrs', 'businesscategory'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_selfservice(UI_driver):
|
||||||
|
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: selfservice entity
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(ENTITY, DATA)
|
||||||
104
ipatests/test_webui/test_selinuxusermap.py
Normal file
104
ipatests/test_webui/test_selinuxusermap.py
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
SELinux user map tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
import ipatests.test_webui.data_user as user
|
||||||
|
import ipatests.test_webui.data_group as group
|
||||||
|
import ipatests.test_webui.data_hostgroup as hostgroup
|
||||||
|
from ipatests.test_webui.test_host import host_tasks, ENTITY as HOST_ENTITY
|
||||||
|
|
||||||
|
ENTITY = 'selinuxusermap'
|
||||||
|
PKEY='itest-selinuxusermap'
|
||||||
|
DATA = {
|
||||||
|
'pkey': PKEY,
|
||||||
|
'add': [
|
||||||
|
('textbox', 'cn', PKEY),
|
||||||
|
('textbox', 'ipaselinuxuser','user_u:s0'),
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('textarea', 'description','itest-selinuxusermap desc'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
class test_selinuxusermap(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: selinuxusermap
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(ENTITY, DATA)
|
||||||
|
|
||||||
|
def test_mod(self):
|
||||||
|
"""
|
||||||
|
Mod: selinuxusermap
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
host = host_tasks(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_actions(self):
|
||||||
|
"""
|
||||||
|
Test SELinux user map actions
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
self.add_record(ENTITY, DATA)
|
||||||
|
self.navigate_to_record(PKEY)
|
||||||
|
|
||||||
|
self.disable_action()
|
||||||
|
self.enable_action()
|
||||||
|
self.delete_action(ENTITY, PKEY)
|
||||||
129
ipatests/test_webui/test_service.py
Normal file
129
ipatests/test_webui/test_service.py
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Service tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
ENTITY = 'service'
|
||||||
|
|
||||||
|
class sevice_tasks(UI_driver):
|
||||||
|
|
||||||
|
def prep_data(self):
|
||||||
|
|
||||||
|
host = self.config.get('ipa_server')
|
||||||
|
realm = self.config.get('ipa_realm')
|
||||||
|
pkey = 'itest'
|
||||||
|
|
||||||
|
return {
|
||||||
|
'pkey': '%s/%s@%s' % (pkey, host, realm),
|
||||||
|
'add': [
|
||||||
|
('textbox', 'service', pkey),
|
||||||
|
('combobox', 'host', host)
|
||||||
|
],
|
||||||
|
'mod': [
|
||||||
|
('checkbox', 'ipakrbokasdelegate',''),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
|
def load_csr(self, path):
|
||||||
|
# ENHANCEMENT: generate csr dynamically
|
||||||
|
with open(path, 'r') as csr_file:
|
||||||
|
csr = csr_file.read()
|
||||||
|
return csr
|
||||||
|
|
||||||
|
|
||||||
|
class test_service(sevice_tasks):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: service
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
data = self.prep_data()
|
||||||
|
self.basic_crud(ENTITY, data)
|
||||||
|
|
||||||
|
def test_certificates(self):
|
||||||
|
"""
|
||||||
|
Test service certificate actions
|
||||||
|
|
||||||
|
Requires to have CA installed and 'service_csr_path' configuration option
|
||||||
|
set.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not self.has_ca():
|
||||||
|
self.skip('CA is not configured')
|
||||||
|
|
||||||
|
csr_path = self.config.get('service_csr_path')
|
||||||
|
if not csr_path:
|
||||||
|
self.skip('CSR file is not configured')
|
||||||
|
|
||||||
|
self.init_app()
|
||||||
|
data = self.prep_data()
|
||||||
|
pkey = data.get('pkey')
|
||||||
|
csr = self.load_csr(csr_path)
|
||||||
|
panel = 'cert_actions'
|
||||||
|
host = self.config.get('ipa_server')
|
||||||
|
realm = self.config.get('ipa_realm')
|
||||||
|
|
||||||
|
self.add_record(ENTITY, data)
|
||||||
|
self.navigate_to_record(pkey)
|
||||||
|
|
||||||
|
self.assert_visible("div[name='certificate-missing']")
|
||||||
|
|
||||||
|
# cert request
|
||||||
|
self.action_panel_action(panel, 'request_cert')
|
||||||
|
self.fill_text('textarea.certificate', csr)
|
||||||
|
self.dialog_button_click('issue')
|
||||||
|
self.wait_for_request(n=2,d=0.5)
|
||||||
|
self.assert_visible("div[name='certificate-valid']")
|
||||||
|
|
||||||
|
# cert view
|
||||||
|
self.action_panel_action(panel, 'view_cert')
|
||||||
|
self.wait()
|
||||||
|
self.assert_text("tbody tr:nth-child(2) td:nth-child(2)", host)
|
||||||
|
self.assert_text("tbody tr:nth-child(3) td:nth-child(2)", realm)
|
||||||
|
self.dialog_button_click('close')
|
||||||
|
|
||||||
|
# cert get
|
||||||
|
self.action_panel_action(panel, 'get_cert')
|
||||||
|
self.wait()
|
||||||
|
# We don't know the cert text, so at least open and close the dialog
|
||||||
|
self.dialog_button_click('close')
|
||||||
|
|
||||||
|
## cert revoke
|
||||||
|
self.action_panel_action(panel, 'revoke_cert')
|
||||||
|
self.wait()
|
||||||
|
self.select('select', '6')
|
||||||
|
self.dialog_button_click('ok')
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_visible("div[name='certificate-revoked']")
|
||||||
|
|
||||||
|
## cert restore
|
||||||
|
self.action_panel_action(panel, 'restore_cert')
|
||||||
|
self.wait()
|
||||||
|
self.dialog_button_click('ok')
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_visible("div[name='certificate-valid']")
|
||||||
|
|
||||||
|
# cleanup
|
||||||
|
self.navigate_to_entity(ENTITY, 'search')
|
||||||
|
self.delete_record(pkey, data.get('del'))
|
||||||
122
ipatests/test_webui/test_sudo.py
Normal file
122
ipatests/test_webui/test_sudo.py
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
Sudo tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
import ipatests.test_webui.data_sudo as sudo
|
||||||
|
import ipatests.test_webui.data_netgroup as netgroup
|
||||||
|
import ipatests.test_webui.data_user as user
|
||||||
|
import ipatests.test_webui.data_group as group
|
||||||
|
import ipatests.test_webui.data_hostgroup as hostgroup
|
||||||
|
from ipatests.test_webui.test_host import host_tasks, ENTITY as HOST_ENTITY
|
||||||
|
|
||||||
|
class test_sudo(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: sudo
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(sudo.RULE_ENTITY, sudo.RULE_DATA)
|
||||||
|
self.basic_crud(sudo.CMDENTITY, sudo.CMD_DATA)
|
||||||
|
self.basic_crud(sudo.CMDGROUP_ENTITY, sudo.CMDGROUP_DATA,
|
||||||
|
default_facet=sudo.CMDGROUP_DEF_FACET)
|
||||||
|
|
||||||
|
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])
|
||||||
|
|
||||||
|
def test_actions(self):
|
||||||
|
"""
|
||||||
|
Test sudo rule actions
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
self.add_record(sudo.RULE_ENTITY, sudo.RULE_DATA)
|
||||||
|
self.navigate_to_record(sudo.RULE_PKEY)
|
||||||
|
|
||||||
|
self.disable_action()
|
||||||
|
self.enable_action()
|
||||||
|
self.delete_action(sudo.RULE_ENTITY, sudo.RULE_PKEY)
|
||||||
159
ipatests/test_webui/test_user.py
Normal file
159
ipatests/test_webui/test_user.py
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
# Authors:
|
||||||
|
# Petr Vobornik <pvoborni@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2013 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
"""
|
||||||
|
User tests
|
||||||
|
"""
|
||||||
|
|
||||||
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
import ipatests.test_webui.data_user as user
|
||||||
|
import ipatests.test_webui.data_group as group
|
||||||
|
import ipatests.test_webui.data_netgroup as netgroup
|
||||||
|
import ipatests.test_webui.data_hbac as hbac
|
||||||
|
import ipatests.test_webui.test_rbac as rbac
|
||||||
|
import ipatests.test_webui.data_sudo as sudo
|
||||||
|
|
||||||
|
class test_user(UI_driver):
|
||||||
|
|
||||||
|
def test_crud(self):
|
||||||
|
"""
|
||||||
|
Basic CRUD: user
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
self.basic_crud(user.ENTITY, user.DATA)
|
||||||
|
|
||||||
|
def test_associations(self):
|
||||||
|
"""
|
||||||
|
User direct associations
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
# prepare - add user, group, netgroup, role, hbac rule, sudo rule
|
||||||
|
# ---------------------------------------------------------------
|
||||||
|
self.add_record(user.ENTITY, user.DATA, navigate=False)
|
||||||
|
self.add_record(group.ENTITY, group.DATA)
|
||||||
|
self.add_record(netgroup.ENTITY, netgroup.DATA)
|
||||||
|
self.add_record(rbac.ROLE_ENTITY, rbac.ROLE_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(user.ENTITY)
|
||||||
|
self.navigate_to_record(user.PKEY)
|
||||||
|
|
||||||
|
self.add_associations([group.PKEY, 'editors'], facet='memberof_group', delete=True)
|
||||||
|
self.add_associations([netgroup.PKEY], facet='memberof_netgroup', delete=True)
|
||||||
|
self.add_associations([rbac.ROLE_PKEY], facet='memberof_role', 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(user.ENTITY, [user.DATA])
|
||||||
|
self.delete(group.ENTITY, [group.DATA])
|
||||||
|
self.delete(netgroup.ENTITY, [netgroup.DATA])
|
||||||
|
self.delete(rbac.ROLE_ENTITY, [rbac.ROLE_DATA])
|
||||||
|
self.delete(hbac.RULE_ENTITY, [hbac.RULE_DATA])
|
||||||
|
self.delete(sudo.RULE_ENTITY, [sudo.RULE_DATA])
|
||||||
|
|
||||||
|
def test_indirect_associations(self):
|
||||||
|
"""
|
||||||
|
User indirect associations
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
# add
|
||||||
|
# ---
|
||||||
|
self.add_record(user.ENTITY, user.DATA, navigate=False)
|
||||||
|
|
||||||
|
self.add_record(group.ENTITY, group.DATA)
|
||||||
|
self.navigate_to_record(group.PKEY)
|
||||||
|
self.add_associations([user.PKEY])
|
||||||
|
|
||||||
|
self.add_record(group.ENTITY, group.DATA2)
|
||||||
|
self.navigate_to_record(group.PKEY2)
|
||||||
|
self.add_associations([group.PKEY],facet='member_group')
|
||||||
|
|
||||||
|
self.add_record(netgroup.ENTITY, netgroup.DATA)
|
||||||
|
self.navigate_to_record(netgroup.PKEY)
|
||||||
|
self.add_table_associations('memberuser_group', [group.PKEY2])
|
||||||
|
|
||||||
|
self.add_record(rbac.ROLE_ENTITY, rbac.ROLE_DATA)
|
||||||
|
self.navigate_to_record(rbac.ROLE_PKEY)
|
||||||
|
self.add_associations([group.PKEY2], facet='member_group')
|
||||||
|
|
||||||
|
self.add_record(hbac.RULE_ENTITY, hbac.RULE_DATA)
|
||||||
|
self.navigate_to_record(hbac.RULE_PKEY)
|
||||||
|
self.add_table_associations('memberuser_group', [group.PKEY2])
|
||||||
|
|
||||||
|
self.add_record(sudo.RULE_ENTITY, sudo.RULE_DATA)
|
||||||
|
self.navigate_to_record(sudo.RULE_PKEY)
|
||||||
|
self.add_table_associations('memberuser_group', [group.PKEY2])
|
||||||
|
|
||||||
|
# check indirect associations
|
||||||
|
# ---------------------------
|
||||||
|
self.navigate_to_entity(user.ENTITY, 'search')
|
||||||
|
self.navigate_to_record(user.PKEY)
|
||||||
|
|
||||||
|
self.assert_indirect_record(group.PKEY2, user.ENTITY, 'memberof_group')
|
||||||
|
self.assert_indirect_record(netgroup.PKEY, user.ENTITY, 'memberof_netgroup')
|
||||||
|
self.assert_indirect_record(rbac.ROLE_PKEY, user.ENTITY, 'memberof_role')
|
||||||
|
self.assert_indirect_record(hbac.RULE_PKEY, user.ENTITY, 'memberof_hbacrule')
|
||||||
|
self.assert_indirect_record(sudo.RULE_PKEY, user.ENTITY, 'memberof_sudorule')
|
||||||
|
|
||||||
|
## cleanup
|
||||||
|
## -------
|
||||||
|
self.delete(user.ENTITY, [user.DATA])
|
||||||
|
self.delete(group.ENTITY, [group.DATA, group.DATA2])
|
||||||
|
self.delete(netgroup.ENTITY, [netgroup.DATA])
|
||||||
|
self.delete(rbac.ROLE_ENTITY, [rbac.ROLE_DATA])
|
||||||
|
self.delete(hbac.RULE_ENTITY, [hbac.RULE_DATA])
|
||||||
|
self.delete(sudo.RULE_ENTITY, [sudo.RULE_DATA])
|
||||||
|
|
||||||
|
|
||||||
|
def test_actions(self):
|
||||||
|
"""
|
||||||
|
Test user actions
|
||||||
|
"""
|
||||||
|
self.init_app()
|
||||||
|
|
||||||
|
self.add_record(user.ENTITY, user.DATA, navigate=False)
|
||||||
|
self.navigate_to_record(user.PKEY)
|
||||||
|
|
||||||
|
self.disable_action()
|
||||||
|
self.enable_action()
|
||||||
|
|
||||||
|
# reset password
|
||||||
|
pwd = self.config.get('ipa_password')
|
||||||
|
fields = [
|
||||||
|
('password' ,'password1', pwd),
|
||||||
|
('password' ,'password2', pwd),
|
||||||
|
]
|
||||||
|
self.action_panel_action('account_actions', 'reset_password')
|
||||||
|
self.assert_dialog()
|
||||||
|
self.fill_fields(fields)
|
||||||
|
self.dialog_button_click('reset_password')
|
||||||
|
self.wait_for_request(n=2)
|
||||||
|
self.assert_no_error_dialog()
|
||||||
|
self.assert_text_field('has_password', '******')
|
||||||
|
|
||||||
|
# delete
|
||||||
|
self.delete_action(user.ENTITY, user.PKEY)
|
||||||
1325
ipatests/test_webui/ui_driver.py
Normal file
1325
ipatests/test_webui/ui_driver.py
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user