mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
UI tests for "ID Range": check range name and base ID duplication
https://pagure.io/freeipa/issue/7709 Reviewed-By: Mohammad Rizwan Yusuf <myusuf@redhat.com> Reviewed-By: Petr Vobornik <pvoborni@redhat.com>
This commit is contained in:
@@ -21,16 +21,19 @@
|
|||||||
Range tasks
|
Range tasks
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
|
||||||
from ipatests.test_webui.ui_driver import UI_driver
|
from ipatests.test_webui.ui_driver import UI_driver
|
||||||
|
|
||||||
|
LOCAL_ID_RANGE = 'ipa-local'
|
||||||
|
TRUSTED_ID_RANGE = 'ipa-ad-trust'
|
||||||
|
|
||||||
|
|
||||||
class range_tasks(UI_driver):
|
class range_tasks(UI_driver):
|
||||||
|
|
||||||
def get_shifts(self, idranges=None):
|
def get_shifts(self):
|
||||||
|
result = self.execute_api_from_ui('idrange_find', [], {})
|
||||||
if not idranges:
|
idranges = result['result']['result']
|
||||||
result = self.execute_api_from_ui('idrange_find', [], {})
|
|
||||||
idranges = result['result']['result']
|
|
||||||
|
|
||||||
max_id = 0
|
max_id = 0
|
||||||
max_rid = 0
|
max_rid = 0
|
||||||
@@ -67,50 +70,101 @@ class range_tasks(UI_driver):
|
|||||||
domain = trusts[0]['cn']
|
domain = trusts[0]['cn']
|
||||||
return domain
|
return domain
|
||||||
|
|
||||||
def get_data(self, pkey, size=50, add_data=None):
|
def get_data(self, pkey=None, form_data=None, **kwargs):
|
||||||
|
|
||||||
if not add_data:
|
if not pkey:
|
||||||
add_data = self.get_add_data(pkey, size=size)
|
pkey = 'itest-range-{}'.format(uuid.uuid4().hex[:8])
|
||||||
|
|
||||||
|
if form_data:
|
||||||
|
form_data.cn = pkey
|
||||||
|
else:
|
||||||
|
form_data = self.get_add_form_data(pkey, **kwargs)
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'pkey': pkey,
|
'pkey': pkey,
|
||||||
'add': add_data,
|
'add': form_data.serialize(),
|
||||||
'mod': [
|
'mod': [
|
||||||
('textbox', 'ipaidrangesize', str(size + 1)),
|
('textbox', 'ipaidrangesize', str(form_data.size + 1)),
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def get_add_data(self, pkey, range_type='ipa-local', size=50, shift=100, domain=None):
|
def get_add_form_data(self, pkey, range_type=LOCAL_ID_RANGE, size=50,
|
||||||
|
domain=None, **kwargs):
|
||||||
|
"""
|
||||||
|
Generate RangeAddFormData instance with initial data based on existing
|
||||||
|
ID ranges.
|
||||||
|
"""
|
||||||
|
|
||||||
base_id = self.max_id + shift
|
shift = 100
|
||||||
|
base_id = kwargs.get('base_id', self.max_id + shift)
|
||||||
self.max_id = base_id + size
|
self.max_id = base_id + size
|
||||||
|
|
||||||
base_rid = self.max_rid + shift
|
base_rid = self.max_rid + shift
|
||||||
self.max_rid = base_rid + size
|
self.max_rid = base_rid + size
|
||||||
|
|
||||||
add = [
|
secondary_base_rid = None
|
||||||
('textbox', 'cn', pkey),
|
|
||||||
('textbox', 'ipabaseid', str(base_id)),
|
|
||||||
('textbox', 'ipaidrangesize', str(size)),
|
|
||||||
('textbox', 'ipabaserid', str(base_rid)),
|
|
||||||
('radio', 'iparangetype', range_type),
|
|
||||||
('callback', self.check_range_type_mod, range_type)
|
|
||||||
]
|
|
||||||
|
|
||||||
if not domain:
|
if not domain:
|
||||||
base_rid = self.max_rid + shift
|
secondary_base_rid = base_rid + size + shift
|
||||||
self.max_rid = base_rid + size
|
self.max_rid = secondary_base_rid + size
|
||||||
add.append(('textbox', 'ipasecondarybaserid', str(base_rid)))
|
|
||||||
if domain:
|
|
||||||
add.append(('textbox', 'ipanttrusteddomainname', domain))
|
|
||||||
|
|
||||||
return add
|
return RangeAddFormData(
|
||||||
|
pkey, base_id, base_rid,
|
||||||
|
secondary_base_rid=secondary_base_rid,
|
||||||
|
range_type=range_type,
|
||||||
|
size=size,
|
||||||
|
domain=domain,
|
||||||
|
callback=self.check_range_type_mod
|
||||||
|
)
|
||||||
|
|
||||||
def check_range_type_mod(self, range_type):
|
def check_range_type_mod(self, range_type):
|
||||||
if range_type == 'ipa-local':
|
if range_type == LOCAL_ID_RANGE:
|
||||||
self.assert_disabled("[name=ipanttrusteddomainname]")
|
self.assert_disabled("[name=ipanttrusteddomainname]")
|
||||||
self.assert_disabled("[name=ipasecondarybaserid]", negative=True)
|
self.assert_disabled("[name=ipasecondarybaserid]", negative=True)
|
||||||
elif range_type == 'ipa-ad-trust':
|
elif range_type == TRUSTED_ID_RANGE:
|
||||||
self.assert_disabled("[name=ipanttrusteddomainname]", negative=True)
|
self.assert_disabled("[name=ipanttrusteddomainname]",
|
||||||
|
negative=True)
|
||||||
self.assert_disabled("[name=ipasecondarybaserid]")
|
self.assert_disabled("[name=ipasecondarybaserid]")
|
||||||
|
|
||||||
|
|
||||||
|
class RangeAddFormData(object):
|
||||||
|
"""
|
||||||
|
Class for ID Range form data storing and serializing.
|
||||||
|
|
||||||
|
Warning: Only for data transformation.
|
||||||
|
Do not put any additional logic here!
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, cn, base_id, base_rid, secondary_base_rid=None,
|
||||||
|
range_type=LOCAL_ID_RANGE, size=50, domain=None,
|
||||||
|
callback=None):
|
||||||
|
self.cn = cn
|
||||||
|
self.base_id = base_id
|
||||||
|
self.base_rid = base_rid
|
||||||
|
self.secondary_base_rid = secondary_base_rid
|
||||||
|
self.range_type = range_type
|
||||||
|
self.size = size
|
||||||
|
self.domain = domain
|
||||||
|
self.callback = callback
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
|
||||||
|
serialized = [
|
||||||
|
('textbox', 'cn', self.cn),
|
||||||
|
('textbox', 'ipabaseid', str(self.base_id)),
|
||||||
|
('textbox', 'ipaidrangesize', str(self.size)),
|
||||||
|
('textbox', 'ipabaserid', str(self.base_rid)),
|
||||||
|
('radio', 'iparangetype', self.range_type),
|
||||||
|
('callback', self.callback, self.range_type),
|
||||||
|
]
|
||||||
|
|
||||||
|
if self.domain:
|
||||||
|
serialized.append(('textbox',
|
||||||
|
'ipanttrusteddomainname',
|
||||||
|
self.domain))
|
||||||
|
else:
|
||||||
|
serialized.append(('textbox',
|
||||||
|
'ipasecondarybaserid',
|
||||||
|
str(self.secondary_base_rid)))
|
||||||
|
|
||||||
|
return serialized
|
||||||
|
|||||||
@@ -21,10 +21,15 @@
|
|||||||
Range tests
|
Range tests
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
import ipatests.test_webui.test_trust as trust_mod
|
import ipatests.test_webui.test_trust as trust_mod
|
||||||
from ipatests.test_webui.ui_driver import screenshot
|
from ipatests.test_webui.ui_driver import screenshot
|
||||||
from ipatests.test_webui.task_range import range_tasks
|
from ipatests.test_webui.task_range import (
|
||||||
import pytest
|
range_tasks,
|
||||||
|
LOCAL_ID_RANGE,
|
||||||
|
TRUSTED_ID_RANGE,
|
||||||
|
)
|
||||||
|
|
||||||
ENTITY = 'idrange'
|
ENTITY = 'idrange'
|
||||||
PKEY = 'itest-range'
|
PKEY = 'itest-range'
|
||||||
@@ -33,13 +38,20 @@ PKEY = 'itest-range'
|
|||||||
@pytest.mark.tier1
|
@pytest.mark.tier1
|
||||||
class test_range(range_tasks):
|
class test_range(range_tasks):
|
||||||
|
|
||||||
|
def setup(self):
|
||||||
|
super(test_range, self).setup()
|
||||||
|
self.init_app()
|
||||||
|
self.get_shifts()
|
||||||
|
|
||||||
|
self.range_types = [LOCAL_ID_RANGE]
|
||||||
|
if self.has_trusts():
|
||||||
|
self.range_types.append(TRUSTED_ID_RANGE)
|
||||||
|
|
||||||
@screenshot
|
@screenshot
|
||||||
def test_crud(self):
|
def test_crud(self):
|
||||||
"""
|
"""
|
||||||
Basic CRUD: range
|
Basic CRUD: range
|
||||||
"""
|
"""
|
||||||
self.init_app()
|
|
||||||
self.get_shifts()
|
|
||||||
self.basic_crud(ENTITY, self.get_data(PKEY), mod=False)
|
self.basic_crud(ENTITY, self.get_data(PKEY), mod=False)
|
||||||
|
|
||||||
@screenshot
|
@screenshot
|
||||||
@@ -48,16 +60,11 @@ class test_range(range_tasks):
|
|||||||
Test mod operating in a new range
|
Test mod operating in a new range
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.init_app()
|
|
||||||
self.navigate_to_entity(ENTITY)
|
self.navigate_to_entity(ENTITY)
|
||||||
self.get_shifts()
|
|
||||||
|
|
||||||
add = self.get_add_data(PKEY)
|
data = self.get_data(PKEY)
|
||||||
data = self.get_data(PKEY, add_data=add)
|
|
||||||
|
|
||||||
self.add_record(ENTITY, data, facet='search', navigate=False,
|
self.add_record(ENTITY, data, navigate=False)
|
||||||
facet_btn='add', dialog_name='add',
|
|
||||||
dialog_btn='add')
|
|
||||||
self.navigate_to_record(PKEY)
|
self.navigate_to_record(PKEY)
|
||||||
|
|
||||||
# changes idrange and tries to save it
|
# changes idrange and tries to save it
|
||||||
@@ -88,15 +95,12 @@ class test_range(range_tasks):
|
|||||||
- 'ipa-ad-winsync' and 'ipa-ipa-trust' and are not supported yet
|
- 'ipa-ad-winsync' and 'ipa-ipa-trust' and are not supported yet
|
||||||
https://fedorahosted.org/freeipa/ticket/4323
|
https://fedorahosted.org/freeipa/ticket/4323
|
||||||
"""
|
"""
|
||||||
self.init_app()
|
|
||||||
self.get_shifts()
|
|
||||||
|
|
||||||
pkey_local = 'itest-local'
|
pkey_local = 'itest-local'
|
||||||
pkey_ad = 'itest-ad'
|
pkey_ad = 'itest-ad'
|
||||||
column = 'iparangetype'
|
column = 'iparangetype'
|
||||||
|
|
||||||
add = self.get_add_data(pkey_local)
|
data = self.get_data(pkey_local)
|
||||||
data = self.get_data(pkey_local, add_data=add)
|
|
||||||
self.add_record(ENTITY, data)
|
self.add_record(ENTITY, data)
|
||||||
self.assert_record_value('local domain range', pkey_local, column)
|
self.assert_record_value('local domain range', pkey_local, column)
|
||||||
|
|
||||||
@@ -111,13 +115,64 @@ class test_range(range_tasks):
|
|||||||
|
|
||||||
self.navigate_to_entity(ENTITY)
|
self.navigate_to_entity(ENTITY)
|
||||||
|
|
||||||
add = self.get_add_data(pkey_ad, range_type='ipa-ad-trust', domain=domain)
|
data = self.get_data(pkey_ad, range_type=TRUSTED_ID_RANGE,
|
||||||
data = self.get_data(pkey_ad, add_data=add)
|
domain=domain)
|
||||||
self.add_record(ENTITY, data, navigate=False)
|
self.add_record(ENTITY, data, navigate=False)
|
||||||
self.assert_record_value('Active Directory domain range', pkey_ad, column)
|
self.assert_record_value('Active Directory domain range', pkey_ad,
|
||||||
|
column)
|
||||||
|
|
||||||
self.delete(trust_mod.ENTITY, [trust_data])
|
self.delete(trust_mod.ENTITY, [trust_data])
|
||||||
self.navigate_to_entity(ENTITY)
|
self.navigate_to_entity(ENTITY)
|
||||||
self.delete_record(pkey_ad)
|
self.delete_record(pkey_ad)
|
||||||
|
|
||||||
self.delete_record(pkey_local)
|
self.delete_record(pkey_local)
|
||||||
|
|
||||||
|
@screenshot
|
||||||
|
def test_add_range_with_existing_name(self):
|
||||||
|
"""
|
||||||
|
Test creating ID Range with existing range name
|
||||||
|
"""
|
||||||
|
self.navigate_to_entity(ENTITY)
|
||||||
|
|
||||||
|
for range_type in self.range_types:
|
||||||
|
pkey = 'itest-range-{}'.format(range_type)
|
||||||
|
data = self.get_data(pkey, range_type=range_type)
|
||||||
|
|
||||||
|
self.add_record(ENTITY, data, navigate=False)
|
||||||
|
self.add_record(ENTITY, data, navigate=False, negative=True,
|
||||||
|
pre_delete=False)
|
||||||
|
|
||||||
|
dialog = self.get_last_error_dialog()
|
||||||
|
|
||||||
|
try:
|
||||||
|
assert ('range with name "{}" already exists'.format(pkey)
|
||||||
|
in dialog.text)
|
||||||
|
finally:
|
||||||
|
self.delete_record(pkey)
|
||||||
|
|
||||||
|
@screenshot
|
||||||
|
def test_add_range_with_existing_base_id(self):
|
||||||
|
"""
|
||||||
|
Test creating ID Range with existing base ID
|
||||||
|
"""
|
||||||
|
self.navigate_to_entity(ENTITY)
|
||||||
|
|
||||||
|
for range_type in self.range_types:
|
||||||
|
pkey = 'itest-range-original'
|
||||||
|
form_data = self.get_add_form_data(pkey)
|
||||||
|
data = self.get_data(pkey, form_data=form_data)
|
||||||
|
form_data.range_type = range_type
|
||||||
|
duplicated_data = self.get_data(form_data=form_data)
|
||||||
|
|
||||||
|
self.add_record(ENTITY, data, navigate=False)
|
||||||
|
self.add_record(ENTITY, duplicated_data, navigate=False,
|
||||||
|
negative=True, pre_delete=False)
|
||||||
|
|
||||||
|
dialog = self.get_last_error_dialog()
|
||||||
|
|
||||||
|
try:
|
||||||
|
assert ('Constraint violation: '
|
||||||
|
'New base range overlaps with existing base range.'
|
||||||
|
in dialog.text)
|
||||||
|
finally:
|
||||||
|
self.delete_record(pkey)
|
||||||
|
|||||||
@@ -127,9 +127,9 @@ class test_trust(trust_tasks):
|
|||||||
r_tasks.driver = self.driver
|
r_tasks.driver = self.driver
|
||||||
r_tasks.config = self.config
|
r_tasks.config = self.config
|
||||||
r_tasks.get_shifts()
|
r_tasks.get_shifts()
|
||||||
range_add = r_tasks.get_add_data('')
|
range_form = r_tasks.get_add_form_data('')
|
||||||
base_id = range_add[2][2]
|
base_id = range_form.base_id
|
||||||
range_size = range_add[3][2]
|
range_size = range_form.size
|
||||||
range_pkey = self.get_range_name()
|
range_pkey = self.get_range_name()
|
||||||
column = 'iparangetype'
|
column = 'iparangetype'
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user