Allow primary keys to use different type than unicode.

Also return list of primary keys instead of a single unicode CSV value from
LDAPDelete-based commands.

This introduces a new capability 'primary_key_types' for backward
compatibility with old clients.

Reviewed-By: Tomas Babej <tbabej@redhat.com>
This commit is contained in:
Jan Cholasta 2014-03-27 14:04:00 +01:00 committed by Petr Viktorin
parent c644b47492
commit 4314d02fbf
46 changed files with 538 additions and 447 deletions

337
API.txt

File diff suppressed because it is too large Load Diff

View File

@ -89,5 +89,5 @@ IPA_DATA_VERSION=20100614120000
# #
########################################################
IPA_API_VERSION_MAJOR=2
IPA_API_VERSION_MINOR=82
# Last change: amisnyov - automember nowait add
IPA_API_VERSION_MINOR=83
# Last change: jcholast - add 'primary_key_types' capability

View File

@ -45,6 +45,9 @@ capabilities = dict(
# permissions2: Reworked permission system
# http://www.freeipa.org/page/V3/Permissions_V2
permissions2=u'2.69',
# primary_key_types: Non-unicode primary keys in command output
primary_key_types=u'2.83',
)

View File

@ -363,7 +363,8 @@ class textui(backend.Backend):
label = labels.get(key, key)
flag = flags.get(key, [])
value = entry[key]
if 'suppress_empty' in flag and value in [u'', '', [], None]:
if ('suppress_empty' in flag and
value in [u'', '', (), [], None]):
continue
if isinstance(value, dict):
if frontend.entry_count(value) == 0:

View File

@ -439,12 +439,9 @@ class Command(HasParam):
and 'summary' in self.output
and 'summary' not in ret
):
if self.msg_summary:
ret['summary'] = self.msg_summary % ret
else:
ret['summary'] = None
ret['summary'] = self.get_summary_default(ret)
if self.use_output_validation and (self.output or ret is not None):
self.validate_output(ret)
self.validate_output(ret, options.get('version', API_VERSION))
return ret
def soft_validate(self, values):
@ -918,7 +915,7 @@ class Command(HasParam):
flags=['no_option', 'no_output'],
)
def validate_output(self, output):
def validate_output(self, output, version=API_VERSION):
"""
Validate the return value to make sure it meets the interface contract.
"""
@ -947,7 +944,7 @@ class Command(HasParam):
nice, o.name, o.type, type(value), value)
)
if callable(o.validate):
o.validate(self, value)
o.validate(self, value, version)
def get_output_params(self):
for param in self._get_param_iterable('output_params', verb='has'):
@ -959,6 +956,10 @@ class Command(HasParam):
continue
yield param
def get_summary_default(self, output):
if self.msg_summary:
return self.msg_summary % output
def log_messages(self, output, logger):
logger_functions = dict(
debug=logger.debug,

View File

@ -24,6 +24,7 @@ Simple description of return values.
from inspect import getdoc
from types import NoneType
from plugable import ReadOnly, lock
from capabilities import client_has_capability
from text import _
@ -99,7 +100,7 @@ class ListOfEntries(Output):
type = (list, tuple)
doc = _('A list of LDAP entries')
def validate(self, cmd, entries):
def validate(self, cmd, entries, version):
assert isinstance(entries, self.type)
for (i, entry) in enumerate(entries):
if not isinstance(entry, dict):
@ -107,6 +108,47 @@ class ListOfEntries(Output):
self.name, i, dict, type(entry), entry)
)
class PrimaryKey(Output):
def validate(self, cmd, value, version):
if client_has_capability(version, 'primary_key_types'):
if hasattr(cmd, 'obj') and cmd.obj and cmd.obj.primary_key:
types = cmd.obj.primary_key.allowed_types
else:
types = (unicode,)
types = types + (NoneType,)
else:
types = (unicode,)
if not isinstance(value, types):
raise TypeError(
"%s.validate_output() => %s.validate():\n"
" output[%r]: need %r; got %r: %r" % (
cmd.name, self.__class__.__name__, self.name,
types[0], type(value), value))
class ListOfPrimaryKeys(Output):
def validate(self, cmd, values, version):
if client_has_capability(version, 'primary_key_types'):
types = (tuple, list)
else:
types = (unicode,)
if not isinstance(values, types):
raise TypeError(
"%s.validate_output() => %s.validate():\n"
" output[%r]: need %r; got %r: %r" % (
cmd.name, self.__class__.__name__, self.name,
types[0], type(values), values))
if client_has_capability(version, 'primary_key_types'):
if hasattr(cmd, 'obj') and cmd.obj and cmd.obj.primary_key:
types = cmd.obj.primary_key.allowed_types
else:
types = (unicode,)
for (i, value) in enumerate(values):
if not isinstance(value, types):
raise TypeError(emsg % (
cmd.name, self.__class__.__name__, i, self.name,
types[0], type(value), value))
result = Output('result', doc=_('All commands should at least have a result'))
@ -114,7 +156,7 @@ summary = Output('summary', (unicode, NoneType),
_('User-friendly description of action performed')
)
value = Output('value', unicode,
value = PrimaryKey('value', None,
_("The primary_key value of the entry, e.g. 'jdoe' for a user"),
flags=['no_display'],
)
@ -140,6 +182,12 @@ standard_delete = (
value,
)
standard_multi_delete = (
summary,
Output('result', dict, _('List of deletions that failed')),
ListOfPrimaryKeys('value', flags=['no_display']),
)
standard_boolean = (
summary,
Output('result', bool, _('True means the operation was successful')),

View File

@ -126,7 +126,7 @@ from ipalib.aci import ACI
from ipalib import output
from ipalib import _, ngettext
from ipalib.plugable import Registry
from ipalib.plugins.baseldap import gen_pkey_only_option
from ipalib.plugins.baseldap import gen_pkey_only_option, pkey_to_value
from ipapython.ipa_log_manager import *
from ipapython.dn import DN
@ -557,7 +557,7 @@ class aci_add(crud.Create):
result = _aci_to_kw(ldap, newaci, kw.get('test', False))
return dict(
result=result,
value=aciname,
value=pkey_to_value(aciname, kw),
)
@ -598,7 +598,7 @@ class aci_del(crud.Delete):
return dict(
result=True,
value=aciname,
value=pkey_to_value(aciname, options),
)
@ -666,7 +666,7 @@ class aci_mod(crud.Update):
result = _aci_to_kw(ldap, newaci)
return dict(
result=result,
value=aciname,
value=pkey_to_value(aciname, kw),
)
@ -919,7 +919,7 @@ class aci_show(crud.Retrieve):
result = _aci_to_kw(ldap, aci)
return dict(
result=result,
value=aciname,
value=pkey_to_value(aciname, kw),
)
@ -981,5 +981,5 @@ class aci_rename(crud.Update):
result = _aci_to_kw(ldap, newaci)
return dict(
result=result,
value=kw['newname'],
value=pkey_to_value(kw['newname'], kw),
)

View File

@ -297,7 +297,7 @@ class automember_add(LDAPCreate):
def execute(self, *keys, **options):
result = super(automember_add, self).execute(*keys, **options)
result['value'] = keys[-1]
result['value'] = pkey_to_value(keys[-1], options)
return result
@ -389,7 +389,7 @@ class automember_add_condition(LDAPUpdate):
result = {'result': getattr(context, 'entry_attrs'), 'value': keys[-1]}
result['failed'] = getattr(context, 'failed')
result['completed'] = getattr(context, 'completed')
result['value'] = keys[-1]
result['value'] = pkey_to_value(keys[-1], options)
return result
@ -476,7 +476,7 @@ class automember_remove_condition(LDAPUpdate):
result = {'result': getattr(context, 'entry_attrs'), 'value': keys[-1]}
result['failed'] = getattr(context, 'failed')
result['completed'] = getattr(context, 'completed')
result['value'] = keys[-1]
result['value'] = pkey_to_value(keys[-1], options)
return result
@ -491,7 +491,7 @@ class automember_mod(LDAPUpdate):
def execute(self, *keys, **options):
result = super(automember_mod, self).execute(*keys, **options)
result['value'] = keys[-1]
result['value'] = pkey_to_value(keys[-1], options)
return result
@ -506,7 +506,7 @@ class automember_del(LDAPDelete):
def execute(self, *keys, **options):
result = super(automember_del, self).execute(*keys, **options)
result['value'] = keys[-1]
result['value'] = pkey_to_value([keys[-1]], options)
return result
@ -540,7 +540,7 @@ class automember_show(LDAPRetrieve):
def execute(self, *keys, **options):
result = super(automember_show, self).execute(*keys, **options)
result['value'] = keys[-1]
result['value'] = pkey_to_value(keys[-1], options)
return result
@ -568,7 +568,7 @@ class automember_default_group_set(LDAPUpdate):
def execute(self, *keys, **options):
result = super(automember_default_group_set, self).execute(*keys, **options)
result['value'] = options['type']
result['value'] = pkey_to_value(options['type'], options)
return result
@ -602,7 +602,7 @@ class automember_default_group_remove(LDAPUpdate):
def execute(self, *keys, **options):
result = super(automember_default_group_remove, self).execute(*keys, **options)
result['value'] = options['type']
result['value'] = pkey_to_value(options['type'], options)
return result
@ -626,7 +626,7 @@ class automember_default_group_show(LDAPRetrieve):
def execute(self, *keys, **options):
result = super(automember_default_group_show, self).execute(*keys, **options)
result['value'] = options['type']
result['value'] = pkey_to_value(options['type'], options)
return result
@ -777,4 +777,4 @@ class automember_rebuild(Command):
return dict(
result=result,
summary=unicode(summary),
value=u'')
value=pkey_to_value(None, options))

View File

@ -827,7 +827,7 @@ class automountkey_add(LDAPCreate):
options[self.obj.primary_key.name] = self.obj.get_pk(key, info)
options['add_operation'] = True
result = super(automountkey_add, self).execute(*keys, **options)
result['value'] = options['automountkey']
result['value'] = pkey_to_value(options['automountkey'], options)
return result
api.register(automountkey_add)
@ -923,7 +923,7 @@ class automountkey_del(LDAPDelete):
options['automountkey'],
options.get('automountinformation', None))
result = super(automountkey_del, self).execute(*keys, **options)
result['value'] = options['automountkey']
result['value'] = pkey_to_value([options['automountkey']], options)
return result
api.register(automountkey_del)
@ -982,7 +982,7 @@ class automountkey_mod(LDAPUpdate):
options['rename'] = new_rdn
result = super(automountkey_mod, self).execute(*keys, **options)
result['value'] = options['automountkey']
result['value'] = pkey_to_value(options['automountkey'], options)
return result
api.register(automountkey_mod)
@ -1026,7 +1026,7 @@ class automountkey_show(LDAPRetrieve):
options.get('automountinformation', None))
result = super(automountkey_show, self).execute(*keys, **options)
result['value'] = options['automountkey']
result['value'] = pkey_to_value(options['automountkey'], options)
return result
api.register(automountkey_show)

View File

@ -32,7 +32,9 @@ from ipalib.cli import to_cli
from ipalib import output
from ipalib.text import _
from ipalib.util import json_serialize, validate_hostname
from ipalib.capabilities import client_has_capability
from ipapython.dn import DN, RDN
from ipapython.version import API_VERSION
DNA_MAGIC = -1
@ -240,6 +242,20 @@ def entry_to_dict(entry, **options):
result['dn'] = entry.dn
return result
def pkey_to_unicode(key):
if key is None:
key = []
elif not isinstance(key, (tuple, list)):
key = [key]
key = u','.join(unicode(k) for k in key)
return key
def pkey_to_value(key, options):
version = options.get('version', API_VERSION)
if client_has_capability(version, 'primary_key_types'):
return key
return pkey_to_unicode(key)
def wait_for_value(ldap, dn, attr, value):
"""
389-ds postoperation plugins are executed after the data has been
@ -768,6 +784,12 @@ last, after all sets and adds."""),
_callback_registry = dict(pre={}, post={}, exc={}, interactive_prompt={})
def get_summary_default(self, output):
if 'value' in output:
output = dict(output)
output['value'] = pkey_to_unicode(output['value'])
return super(BaseLDAPCommand, self).get_summary_default(output)
def _convert_2_dict(self, ldap, attrs):
"""
Convert a string in the form of name/value pairs into a dictionary.
@ -1103,9 +1125,12 @@ class LDAPCreate(BaseLDAPCommand, crud.Create):
entry_attrs = entry_to_dict(entry_attrs, **options)
entry_attrs['dn'] = dn
if self.obj.primary_key and keys[-1] is not None:
return dict(result=entry_attrs, value=keys[-1])
return dict(result=entry_attrs, value=u'')
if self.obj.primary_key:
pkey = keys[-1]
else:
pkey = None
return dict(result=entry_attrs, value=pkey_to_value(pkey, options))
def pre_callback(self, ldap, dn, entry_attrs, attrs_list, *keys, **options):
assert isinstance(dn, DN)
@ -1227,9 +1252,12 @@ class LDAPRetrieve(LDAPQuery):
entry_attrs = entry_to_dict(entry_attrs, **options)
entry_attrs['dn'] = dn
if self.obj.primary_key and keys[-1] is not None:
return dict(result=entry_attrs, value=keys[-1])
return dict(result=entry_attrs, value=u'')
if self.obj.primary_key:
pkey = keys[-1]
else:
pkey = None
return dict(result=entry_attrs, value=pkey_to_value(pkey, options))
def pre_callback(self, ldap, dn, attrs_list, *keys, **options):
assert isinstance(dn, DN)
@ -1363,9 +1391,12 @@ class LDAPUpdate(LDAPQuery, crud.Update):
entry_attrs = entry_to_dict(entry_attrs, **options)
if self.obj.primary_key and keys[-1] is not None:
return dict(result=entry_attrs, value=keys[-1])
return dict(result=entry_attrs, value=u'')
if self.obj.primary_key:
pkey = keys[-1]
else:
pkey = None
return dict(result=entry_attrs, value=pkey_to_value(pkey, options))
def pre_callback(self, ldap, dn, entry_attrs, attrs_list, *keys, **options):
assert isinstance(dn, DN)
@ -1386,7 +1417,7 @@ class LDAPDelete(LDAPMultiQuery):
"""
Delete an LDAP entry and all of its direct subentries.
"""
has_output = output.standard_delete
has_output = output.standard_multi_delete
has_output_params = global_output_params
@ -1433,28 +1464,28 @@ class LDAPDelete(LDAPMultiQuery):
return result
if not self.obj.primary_key or not isinstance(keys[-1], (list, tuple)):
pkeyiter = (keys[-1], )
else:
if self.obj.primary_key and isinstance(keys[-1], (list, tuple)):
pkeyiter = keys[-1]
elif keys[-1] is not None:
pkeyiter = [keys[-1]]
else:
pkeyiter = []
deleted = []
failed = []
result = True
for pkey in pkeyiter:
try:
if not delete_entry(pkey):
result = False
delete_entry(pkey)
except errors.ExecutionError:
if not options.get('continue', False):
raise
failed.append(pkey)
else:
deleted.append(pkey)
deleted = pkey_to_value(deleted, options)
failed = pkey_to_value(failed, options)
if self.obj.primary_key and pkeyiter[0] is not None:
return dict(result=dict(failed=u','.join(failed)), value=u','.join(deleted))
return dict(result=dict(failed=u''), value=u'')
return dict(result=dict(failed=failed), value=deleted)
def pre_callback(self, ldap, dn, *keys, **options):
assert isinstance(dn, DN)

View File

@ -24,7 +24,7 @@ from ipalib.request import context
from ipalib import api, crud, errors
from ipalib import output
from ipalib import Object, Command
from ipalib.plugins.baseldap import gen_pkey_only_option
from ipalib.plugins.baseldap import gen_pkey_only_option, pkey_to_value
__doc__ = _("""
Group to Group Delegation
@ -141,7 +141,7 @@ class delegation_add(crud.Create):
return dict(
result=result,
value=aciname,
value=pkey_to_value(aciname, kw),
)
api.register(delegation_add)
@ -159,7 +159,7 @@ class delegation_del(crud.Delete):
self.obj.postprocess_result(result)
return dict(
result=True,
value=aciname,
value=pkey_to_value(aciname, kw),
)
api.register(delegation_del)
@ -178,7 +178,7 @@ class delegation_mod(crud.Update):
return dict(
result=result,
value=aciname,
value=pkey_to_value(aciname, kw),
)
api.register(delegation_mod)
@ -220,7 +220,7 @@ class delegation_show(crud.Retrieve):
self.obj.postprocess_result(result)
return dict(
result=result,
value=aciname,
value=pkey_to_value(aciname, kw),
)
api.register(delegation_show)

View File

@ -2012,7 +2012,7 @@ class dnszone_disable(LDAPQuery):
except errors.EmptyModlist:
pass
return dict(result=True, value=keys[-1])
return dict(result=True, value=pkey_to_value(keys[-1], options))
api.register(dnszone_disable)
@ -2036,7 +2036,7 @@ class dnszone_enable(LDAPQuery):
except errors.EmptyModlist:
pass
return dict(result=True, value=keys[-1])
return dict(result=True, value=pkey_to_value(keys[-1], options))
api.register(dnszone_enable)
@ -2073,7 +2073,7 @@ class dnszone_add_permission(LDAPQuery):
return dict(
result=True,
value=permission_name,
value=pkey_to_value(permission_name, options),
)
api.register(dnszone_add_permission)
@ -2106,7 +2106,7 @@ class dnszone_remove_permission(LDAPQuery):
return dict(
result=True,
value=permission_name,
value=pkey_to_value(permission_name, options),
)
api.register(dnszone_remove_permission)
@ -2957,7 +2957,7 @@ api.register(dnsrecord_delentry)
class dnsrecord_del(LDAPUpdate):
__doc__ = _('Delete DNS resource record.')
has_output = output.standard_delete
has_output = output.standard_multi_delete
no_option_msg = _('Neither --del-all nor options to delete a specific record provided.\n'\
"Command help may be consulted for all supported record types.")
@ -3045,6 +3045,7 @@ class dnsrecord_del(LDAPUpdate):
return result
result = super(dnsrecord_del, self).execute(*keys, **options)
result['value'] = pkey_to_value([keys[-1]], options)
if getattr(context, 'del_all', False) and not \
self.obj.is_pkey_zone_record(*keys):
@ -3223,7 +3224,7 @@ class dns_is_enabled(Command):
except Exception, e:
pass
return dict(result=dns_enabled, value=u'')
return dict(result=dns_enabled, value=pkey_to_value(None, options))
api.register(dns_is_enabled)

View File

@ -589,7 +589,7 @@ class group_detach(LDAPQuery):
return dict(
result=True,
value=keys[0],
value=pkey_to_value(keys[0], options),
)
api.register(group_detach)

View File

@ -324,7 +324,7 @@ class hbacrule_enable(LDAPQuery):
return dict(
result=True,
value=cn,
value=pkey_to_value(cn, options),
)
api.register(hbacrule_enable)
@ -354,7 +354,7 @@ class hbacrule_disable(LDAPQuery):
return dict(
result=True,
value=cn,
value=pkey_to_value(cn, options),
)
api.register(hbacrule_disable)

View File

@ -1011,7 +1011,7 @@ class host_disable(LDAPQuery):
return dict(
result=True,
value=keys[0],
value=pkey_to_value(keys[0], options),
)
def post_callback(self, ldap, dn, entry_attrs, *keys, **options):

View File

@ -216,8 +216,6 @@ class krbtpolicy_reset(LDAPQuery):
entry_attrs = entry_to_dict(entry_attrs, **options)
if keys[-1] is not None:
return dict(result=entry_attrs, value=keys[-1])
return dict(result=entry_attrs, value=u'')
return dict(result=entry_attrs, value=pkey_to_value(keys[-1], options))
api.register(krbtpolicy_reset)

View File

@ -23,7 +23,7 @@ from ipalib.request import context
from ipalib import api, crud, errors
from ipalib import output
from ipalib import Object, Command
from ipalib.plugins.baseldap import gen_pkey_only_option
from ipalib.plugins.baseldap import gen_pkey_only_option, pkey_to_value
__doc__ = _("""
Self-service Permissions
@ -135,7 +135,7 @@ class selfservice_add(crud.Create):
return dict(
result=result,
value=aciname,
value=pkey_to_value(aciname, kw),
)
api.register(selfservice_add)
@ -153,7 +153,7 @@ class selfservice_del(crud.Delete):
return dict(
result=True,
value=aciname,
value=pkey_to_value(aciname, kw),
)
api.register(selfservice_del)
@ -175,7 +175,7 @@ class selfservice_mod(crud.Update):
return dict(
result=result,
value=aciname,
value=pkey_to_value(aciname, kw),
)
api.register(selfservice_mod)
@ -218,7 +218,7 @@ class selfservice_show(crud.Retrieve):
self.obj.postprocess_result(result)
return dict(
result=result,
value=aciname,
value=pkey_to_value(aciname, kw),
)
api.register(selfservice_show)

View File

@ -425,7 +425,7 @@ class selinuxusermap_enable(LDAPQuery):
return dict(
result=True,
value=cn,
value=pkey_to_value(cn, options),
)
api.register(selinuxusermap_enable)
@ -455,7 +455,7 @@ class selinuxusermap_disable(LDAPQuery):
return dict(
result=True,
value=cn,
value=pkey_to_value(cn, options),
)
api.register(selinuxusermap_disable)

View File

@ -661,7 +661,7 @@ class service_disable(LDAPQuery):
return dict(
result=True,
value=keys[0],
value=pkey_to_value(keys[0], options),
)
api.register(service_disable)

View File

@ -699,7 +699,7 @@ class sudorule_add_option(LDAPQuery):
entry_attrs = entry_to_dict(entry_attrs, **options)
return dict(result=entry_attrs, value=cn)
return dict(result=entry_attrs, value=pkey_to_value(cn, options))
def output_for_cli(self, textui, result, cn, **options):
textui.print_dashed(_('Added option "%(option)s" to Sudo Rule "%(rule)s"') % \
@ -755,7 +755,7 @@ class sudorule_remove_option(LDAPQuery):
entry_attrs = entry_to_dict(entry_attrs, **options)
return dict(result=entry_attrs, value=cn)
return dict(result=entry_attrs, value=pkey_to_value(cn, options))
def output_for_cli(self, textui, result, cn, **options):
textui.print_dashed(_('Removed option "%(option)s" from Sudo Rule "%(rule)s"') % \

View File

@ -434,6 +434,7 @@ sides.
)
msg_summary = _('Added Active Directory trust for realm "%(value)s"')
msg_summary_existing = _('Re-established trust to domain "%(value)s"')
has_output_params = LDAPCreate.has_output_params + trust_output_params
def execute(self, *keys, **options):
@ -640,11 +641,6 @@ sides.
except errors.NotFound:
dn = None
if dn:
summary = _('Re-established trust to domain "%(value)s"')
else:
summary = self.msg_summary
# 1. Full access to the remote domain. Use admin credentials and
# generate random trustdom password to do work on both sides
if full_join:
@ -685,10 +681,13 @@ sides.
error=_('Unable to verify write permissions to the AD'))
ret = dict(
value=self.trustinstance.remote_domain.info['dns_domain'],
value=pkey_to_value(
self.trustinstance.remote_domain.info['dns_domain'],
options),
verified=result['verified']
)
ret['summary'] = summary % ret
if dn:
ret['summary'] = self.msg_summary_existing % ret
return ret
@ -702,10 +701,13 @@ sides.
options['trust_secret']
)
ret = dict(
value=self.trustinstance.remote_domain.info['dns_domain'],
value=pkey_to_value(
self.trustinstance.remote_domain.info['dns_domain'],
options),
verified=result['verified']
)
ret['summary'] = summary % ret
if dn:
ret['summary'] = self.msg_summary_existing % ret
return ret
raise errors.ValidationError(name=_('AD Trust setup'),
error=_('Not enough arguments specified to perform trust setup'))
@ -915,7 +917,7 @@ class trustconfig_mod(LDAPUpdate):
def execute(self, *keys, **options):
result = super(trustconfig_mod, self).execute(*keys, **options)
result['value'] = options['trust_type']
result['value'] = pkey_to_value(options['trust_type'], options)
return result
def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
@ -932,7 +934,7 @@ class trustconfig_show(LDAPRetrieve):
def execute(self, *keys, **options):
result = super(trustconfig_show, self).execute(*keys, **options)
result['value'] = options['trust_type']
result['value'] = pkey_to_value(options['trust_type'], options)
return result
def post_callback(self, ldap, dn, entry_attrs, *keys, **options):
@ -1216,7 +1218,7 @@ class trustdomain_del(LDAPDelete):
except errors.AlreadyActive:
pass
result = super(trustdomain_del, self).execute(*keys, **options)
result['value'] = u','.join(keys[1])
result['value'] = pkey_to_value(keys[1], options)
return result
@ -1346,7 +1348,7 @@ class trustdomain_enable(LDAPQuery):
return dict(
result=True,
value=keys[1],
value=pkey_to_value(keys[1], options),
)
api.register(trustdomain_enable)
@ -1386,7 +1388,7 @@ class trustdomain_disable(LDAPQuery):
return dict(
result=True,
value=keys[1],
value=pkey_to_value(keys[1], options),
)
api.register(trustdomain_disable)

View File

@ -832,7 +832,7 @@ class user_disable(LDAPQuery):
return dict(
result=True,
value=keys[0],
value=pkey_to_value(keys[0], options),
)
api.register(user_disable)
@ -854,7 +854,7 @@ class user_enable(LDAPQuery):
return dict(
result=True,
value=keys[0],
value=pkey_to_value(keys[0], options),
)
api.register(user_enable)
@ -883,7 +883,7 @@ class user_unlock(LDAPQuery):
return dict(
result=True,
value=keys[0],
value=pkey_to_value(keys[0], options),
)
api.register(user_unlock)

View File

@ -25,6 +25,7 @@ from ipatests.util import raises, ClassChecker
from ipalib import output
from ipalib.frontend import Command
from ipalib import _
from ipapython.version import API_VERSION
class test_Output(ClassChecker):
"""
@ -78,12 +79,14 @@ class test_ListOfEntries(ClassChecker):
okay = dict(foo='bar')
nope = ('aye', 'bee')
e = raises(TypeError, inst.validate, cmd, [okay, okay, nope])
e = raises(TypeError, inst.validate,
cmd, [okay, okay, nope], API_VERSION)
assert str(e) == output.emsg % (
'example', 'ListOfEntries', 'stuff', 2, dict, tuple, nope
)
e = raises(TypeError, inst.validate, cmd, [nope, okay, nope])
e = raises(TypeError, inst.validate,
cmd, [nope, okay, nope], API_VERSION)
assert str(e) == output.emsg % (
'example', 'ListOfEntries', 'stuff', 0, dict, tuple, nope
)

View File

@ -242,7 +242,7 @@ class test_automember(Declarative):
desc='Rebuild membership for hostgroups',
command=('automember_rebuild', [], dict(type=u'hostgroup')),
expected=dict(
value=u'',
value=None,
summary=fuzzy_automember_message,
result=dict()
),
@ -252,7 +252,7 @@ class test_automember(Declarative):
desc='Rebuild membership for hostgroups asynchronously',
command=('automember_rebuild', [], dict(type=u'hostgroup',no_wait=True)),
expected=dict(
value=u'',
value=None,
summary=u'Automember rebuild membership task started',
result=dict(
dn=fuzzy_automember_dn
@ -361,7 +361,7 @@ class test_automember(Declarative):
desc='Rebuild membership for host: %s' % fqdn1,
command=('automember_rebuild', [], dict(hosts=fqdn1)),
expected=dict(
value=u'',
value=None,
summary=fuzzy_automember_message,
result=dict()
),
@ -371,7 +371,7 @@ class test_automember(Declarative):
desc='Rebuild membership for host: %s asynchronously' % fqdn1,
command=('automember_rebuild', [], dict(hosts=fqdn1, no_wait=True)),
expected=dict(
value=u'',
value=None,
summary=u'Automember rebuild membership task started',
result=dict(
dn=fuzzy_automember_dn
@ -398,9 +398,9 @@ class test_automember(Declarative):
desc='Delete host: %r' % fqdn1,
command=('host_del', [fqdn1], dict()),
expected=dict(
value=fqdn1,
value=[fqdn1],
summary=u'Deleted host "%s"' % fqdn1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -408,9 +408,9 @@ class test_automember(Declarative):
desc='Delete hostgroup: %r' % hostgroup1,
command=('hostgroup_del', [hostgroup1], dict()),
expected=dict(
value=hostgroup1,
value=[hostgroup1],
summary=u'Deleted hostgroup "%s"' % hostgroup1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -418,9 +418,9 @@ class test_automember(Declarative):
desc='Delete automember rule: %r' % hostgroup1,
command=('automember_del', [hostgroup1], dict(type=u'hostgroup')),
expected=dict(
value=hostgroup1,
value=[hostgroup1],
summary=u'Deleted automember rule "%s"' % hostgroup1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -543,7 +543,7 @@ class test_automember(Declarative):
desc='Rebuild membership for groups',
command=('automember_rebuild', [], dict(type=u'group')),
expected=dict(
value=u'',
value=None,
summary=fuzzy_automember_message,
result=dict()
),
@ -553,7 +553,7 @@ class test_automember(Declarative):
desc='Rebuild membership for groups asynchronously',
command=('automember_rebuild', [], dict(type=u'group', no_wait=True)),
expected=dict(
value=u'',
value=None,
summary=u'Automember rebuild membership task started',
result=dict(
dn=fuzzy_automember_dn
@ -620,7 +620,7 @@ class test_automember(Declarative):
desc='Rebuild membership for user: %s' % user1,
command=('automember_rebuild', [], dict(users=user1)),
expected=dict(
value=u'',
value=None,
summary=fuzzy_automember_message,
result=dict()
),
@ -630,7 +630,7 @@ class test_automember(Declarative):
desc='Rebuild membership for user: %s asynchronously' % user1,
command=('automember_rebuild', [], dict(users=user1, no_wait=True)),
expected=dict(
value=u'',
value=None,
summary=u'Automember rebuild membership task started',
result=dict(
dn=fuzzy_automember_dn
@ -658,9 +658,9 @@ class test_automember(Declarative):
desc='Delete user: %r' % user1,
command=('user_del', [user1], dict()),
expected=dict(
value=user1,
value=[user1],
summary=u'Deleted user "%s"' % user1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -668,9 +668,9 @@ class test_automember(Declarative):
desc='Delete user: %r' % manager1,
command=('user_del', [manager1], dict()),
expected=dict(
value=manager1,
value=[manager1],
summary=u'Deleted user "%s"' % manager1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -678,9 +678,9 @@ class test_automember(Declarative):
desc='Delete group: %r' % group1,
command=('group_del', [group1], dict()),
expected=dict(
value=group1,
value=[group1],
summary=u'Deleted group "%s"' % group1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -688,9 +688,9 @@ class test_automember(Declarative):
desc='Delete automember rule: %r' % group1,
command=('automember_del', [group1], dict(type=u'group')),
expected=dict(
value=group1,
value=[group1],
summary=u'Deleted automember rule "%s"' % group1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),

View File

@ -100,7 +100,7 @@ class AutomountTest(XMLRPC_test):
finally:
res = api.Command['automountlocation_del'](self.locname)['result']
assert res
assert_attr_equal(res, 'failed', '')
assert not res['failed']
# Success; delete the temporary directory
shutil.rmtree(conf_directory)
@ -285,7 +285,7 @@ class test_automount(AutomountTest):
delkey_kw={'automountkey': self.keyname_rename, 'automountinformation' : self.newinfo}
res = api.Command['automountkey_del'](self.locname, self.mapname, **delkey_kw)['result']
assert res
assert_attr_equal(res, 'failed', '')
assert not res['failed']
# Verify that it is gone
with assert_raises(errors.NotFound):
@ -297,7 +297,7 @@ class test_automount(AutomountTest):
"""
res = api.Command['automountlocation_del'](self.locname)['result']
assert res
assert_attr_equal(res, 'failed', '')
assert not res['failed']
# Verify that it is gone
with assert_raises(errors.NotFound):
@ -367,7 +367,7 @@ class test_automount_direct(AutomountTest):
"""
res = api.Command['automountlocation_del'](self.locname)['result']
assert res
assert_attr_equal(res, 'failed', '')
assert not res['failed']
# Verity that it is gone
with assert_raises(errors.NotFound):
@ -443,7 +443,7 @@ class test_automount_indirect(AutomountTest):
"""
res = api.Command['automountkey_del'](self.locname, self.parentmap, **self.key_kw)['result']
assert res
assert_attr_equal(res, 'failed', '')
assert not res['failed']
# Verify that it is gone
with assert_raises(errors.NotFound):
@ -455,7 +455,7 @@ class test_automount_indirect(AutomountTest):
"""
res = api.Command['automountmap_del'](self.locname, self.mapname)['result']
assert res
assert_attr_equal(res, 'failed', '')
assert not res['failed']
# Verify that it is gone
with assert_raises(errors.NotFound):
@ -467,7 +467,7 @@ class test_automount_indirect(AutomountTest):
"""
res = api.Command['automountlocation_del'](self.locname)['result']
assert res
assert_attr_equal(res, 'failed', '')
assert not res['failed']
# Verity that it is gone
with assert_raises(errors.NotFound):
@ -551,7 +551,7 @@ class test_automount_indirect_no_parent(AutomountTest):
delkey_kw={'automountkey': self.keyname, 'automountinformation': self.mapname}
res = api.Command['automountkey_del'](self.locname, self.parentmap, **delkey_kw)['result']
assert res
assert_attr_equal(res, 'failed', '')
assert not res['failed']
# Verify that it is gone
with assert_raises(errors.NotFound):
@ -563,7 +563,7 @@ class test_automount_indirect_no_parent(AutomountTest):
"""
res = api.Command['automountmap_del'](self.locname, self.mapname)['result']
assert res
assert_attr_equal(res, 'failed', '')
assert not res['failed']
# Verify that it is gone
with assert_raises(errors.NotFound):
@ -575,7 +575,7 @@ class test_automount_indirect_no_parent(AutomountTest):
"""
res = api.Command['automountlocation_del'](self.locname)['result']
assert res
assert_attr_equal(res, 'failed', '')
assert not res['failed']
# Verity that it is gone
with assert_raises(errors.NotFound):

View File

@ -104,8 +104,8 @@ class test_batch(Declarative):
error=None),
dict(
summary=u'Deleted group "%s"' % group1,
result=dict(failed=u''),
value=group1,
result=dict(failed=[]),
value=[group1],
error=None),
),
),

View File

@ -37,7 +37,7 @@ class test_config(Declarative):
dict(addattr=u'ipauserobjectclasses=ipahost')),
expected=dict(
result=lambda d: 'ipahost' in d['ipauserobjectclasses'],
value=u'',
value=None,
summary=None,
),
),
@ -48,7 +48,7 @@ class test_config(Declarative):
dict(delattr=u'ipauserobjectclasses=ipahost')),
expected=dict(
result=lambda d: 'ipahost' not in d['ipauserobjectclasses'],
value=u'',
value=None,
summary=None,
),
),
@ -123,7 +123,7 @@ class test_config(Declarative):
command=('config_mod', [], dict(ipauserauthtype=u'password')),
expected=dict(
result=lambda d: d['ipauserauthtype'] == (u'password',),
value=u'',
value=None,
summary=None,
),
),
@ -133,7 +133,7 @@ class test_config(Declarative):
command=('config_show', [], {}),
expected=dict(
result=lambda d: d['ipauserauthtype'] == (u'password',),
value=u'',
value=None,
summary=None,
),
),
@ -143,7 +143,7 @@ class test_config(Declarative):
command=('config_mod', [], dict(ipauserauthtype=None)),
expected=dict(
result=lambda d: 'ipauserauthtype' not in d,
value=u'',
value=None,
summary=None,
),
),

View File

@ -451,9 +451,9 @@ class test_dns(Declarative):
desc='Delete reverse zone %r' % revzone1,
command=('dnszone_del', [revzone1], {}),
expected={
'value': revzone1,
'value': [revzone1],
'summary': u'Deleted DNS zone "%s"' % revzone1,
'result': {'failed': u''},
'result': {'failed': []},
},
),
@ -560,7 +560,7 @@ class test_dns(Declarative):
desc='Remove A record from %r in zone %r' % (name1, zone1),
command=('dnsrecord_del', [zone1, name1], {'arecord': arec2}),
expected={
'value': name1,
'value': [name1],
'summary': None,
'result': {
'idnsname': [name1],
@ -897,9 +897,9 @@ class test_dns(Declarative):
desc='Delete zone %r' % zone2,
command=('dnszone_del', [zone2], {}),
expected={
'value': zone2,
'value': [zone2],
'summary': u'Deleted DNS zone "%s"' % zone2,
'result': {'failed': u''},
'result': {'failed': []},
},
),
@ -1026,9 +1026,9 @@ class test_dns(Declarative):
desc='Delete record %r in zone %r' % (name1_renamed, zone1),
command=('dnsrecord_del', [zone1, name1_renamed], {'del_all': True }),
expected={
'value': name1_renamed,
'value': [name1_renamed],
'summary': u'Deleted record "%s"' % name1_renamed,
'result': {'failed': u''},
'result': {'failed': []},
},
),
@ -1166,7 +1166,7 @@ class test_dns(Declarative):
desc='Update global DNS settings',
command=('dnsconfig_mod', [], {'idnsforwarders' : [fwd_ip],}),
expected={
'value': u'',
'value': None,
'summary': None,
'result': {
'idnsforwarders': [fwd_ip],
@ -1406,9 +1406,9 @@ class test_dns(Declarative):
desc='Delete zone %r' % zone1,
command=('dnszone_del', [zone1], {}),
expected={
'value': zone1,
'value': [zone1],
'summary': u'Deleted DNS zone "%s"' % zone1,
'result': {'failed': u''},
'result': {'failed': []},
},
),
@ -1469,9 +1469,9 @@ class test_dns(Declarative):
desc='Delete zone %r' % zone1,
command=('dnszone_del', [zone1], {}),
expected={
'value': zone1,
'value': [zone1],
'summary': u'Deleted DNS zone "%s"' % zone1,
'result': {'failed': u''},
'result': {'failed': []},
},
),

View File

@ -55,6 +55,8 @@ def assert_realmdomain_and_txt_record_present(response):
def assert_realmdomain_and_txt_record_not_present(response):
zone = response['value']
if isinstance(zone, (tuple, list)):
zone = zone[0]
r = api.Command['realmdomains_show']()
assert zone not in r['result']['associateddomain']
@ -159,9 +161,9 @@ class test_dns_realmdomains_integration(Declarative):
'during dnszone_del',
command=('dnszone_del', [dnszone_1], {}),
expected={
'value': dnszone_1,
'value': [dnszone_1],
'summary': u'Deleted DNS zone "%s"' % dnszone_1,
'result': {'failed': u''},
'result': {'failed': []},
},
extra_check=assert_realmdomain_and_txt_record_not_present,
),

View File

@ -554,8 +554,8 @@ class test_group(Declarative):
desc='Remove group %r with external membership' % (group3),
command=('group_del', [group3], {}),
expected=dict(
result=dict(failed=u''),
value=group3,
result=dict(failed=[]),
value=[group3],
summary=u'Deleted group "testgroup3"',
),
),
@ -693,8 +693,8 @@ class test_group(Declarative):
desc='Delete %r' % group1,
command=('group_del', [group1], {}),
expected=dict(
result=dict(failed=u''),
value=group1,
result=dict(failed=[]),
value=[group1],
summary=u'Deleted group "testgroup1"',
)
),
@ -728,8 +728,8 @@ class test_group(Declarative):
desc='Delete %r' % group2,
command=('group_del', [group2], {}),
expected=dict(
result=dict(failed=u''),
value=group2,
result=dict(failed=[]),
value=[group2],
summary=u'Deleted group "testgroup2"',
)
),
@ -859,8 +859,8 @@ class test_group(Declarative):
desc='Now delete the unmanaged group %r' % user1,
command=('group_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
value=user1,
result=dict(failed=[]),
value=[user1],
summary=u'Deleted group "%s"' % user1,
)
),
@ -875,9 +875,9 @@ class test_group(Declarative):
desc='Delete %r' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "tuser1"',
value=user1,
value=[user1],
),
),
@ -1004,9 +1004,9 @@ class test_group(Declarative):
desc='Delete %r' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user1,
value=user1,
value=[user1],
),
),

View File

@ -236,9 +236,9 @@ class test_hbacsvcgroup(Declarative):
desc='Delete %r' % hbacsvcgroup1,
command=('hbacsvcgroup_del', [hbacsvcgroup1], {}),
expected=dict(
value=hbacsvcgroup1,
value=[hbacsvcgroup1],
summary=u'Deleted HBAC service group "testhbacsvcgroup1"',
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -247,9 +247,9 @@ class test_hbacsvcgroup(Declarative):
desc='Delete service %r' % hbacsvc1,
command=('hbacsvc_del', [hbacsvc1], {}),
expected=dict(
value=hbacsvc1,
value=[hbacsvc1],
summary=u'Deleted HBAC service "%s"' % hbacsvc1,
result=dict(failed=u''),
result=dict(failed=[]),
),
)

View File

@ -585,9 +585,9 @@ class test_host(Declarative):
desc='Delete %r' % fqdn1,
command=('host_del', [fqdn1], {}),
expected=dict(
value=fqdn1,
value=[fqdn1],
summary=u'Deleted host "%s"' % fqdn1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -661,9 +661,9 @@ class test_host(Declarative):
desc='Delete using host name %r' % short1,
command=('host_del', [short1], {}),
expected=dict(
value=short1,
value=[short1],
summary=u'Deleted host "%s"' % short1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -831,9 +831,9 @@ class test_host(Declarative):
desc='Delete %r' % fqdn3,
command=('host_del', [fqdn3], {}),
expected=dict(
value=fqdn3,
value=[fqdn3],
summary=u'Deleted host "%s"' % fqdn3,
result=dict(failed=u''),
result=dict(failed=[]),
),
),

View File

@ -261,9 +261,9 @@ class test_hostgroup(Declarative):
desc='Delete %r' % hostgroup1,
command=('hostgroup_del', [hostgroup1], {}),
expected=dict(
value=hostgroup1,
value=[hostgroup1],
summary=u'Deleted hostgroup "testhostgroup1"',
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -293,9 +293,9 @@ class test_hostgroup(Declarative):
desc='Delete %r' % hostgroup_single,
command=('hostgroup_del', [hostgroup_single], {}),
expected=dict(
value=hostgroup_single,
value=[hostgroup_single],
summary=u'Deleted hostgroup "a"',
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -304,9 +304,9 @@ class test_hostgroup(Declarative):
desc='Delete host %r' % fqdn1,
command=('host_del', [fqdn1], {}),
expected=dict(
value=fqdn1,
value=[fqdn1],
summary=u'Deleted host "%s"' % fqdn1,
result=dict(failed=u''),
result=dict(failed=[]),
),
)

View File

@ -42,7 +42,7 @@ class test_krbtpolicy(Declarative):
'krbtpolicy_reset', [], {}
),
expected=dict(
value=u'',
value=None,
summary=None,
result=dict(
krbmaxticketlife=[u'86400'],
@ -58,7 +58,7 @@ class test_krbtpolicy(Declarative):
'krbtpolicy_show', [], {}
),
expected=dict(
value=u'',
value=None,
summary=None,
result=dict(
dn=DN(('cn',api.env.domain),('cn','kerberos'),
@ -76,7 +76,7 @@ class test_krbtpolicy(Declarative):
'krbtpolicy_mod', [], dict(krbmaxticketlife=3600)
),
expected=dict(
value=u'',
value=None,
summary=None,
result=dict(
krbmaxticketlife=[u'3600'],

View File

@ -200,9 +200,9 @@ class test_netgroup(Declarative):
desc='Delete %r' % netgroup_single,
command=('netgroup_del', [netgroup_single], {}),
expected=dict(
value=netgroup_single,
value=[netgroup_single],
summary=u'Deleted netgroup "%s"' % netgroup_single,
result=dict(failed=u''),
result=dict(failed=[]),
),
),
@ -1281,9 +1281,9 @@ class test_netgroup(Declarative):
desc='Delete %r' % netgroup1,
command=('netgroup_del', [netgroup1], {}),
expected=dict(
value=netgroup1,
value=[netgroup1],
summary=u'Deleted netgroup "%s"' % netgroup1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),

View File

@ -1217,8 +1217,8 @@ class test_permission(Declarative):
desc='Delete %r' % permission1_renamed_ucase,
command=('permission_del', [permission1_renamed_ucase], {}),
expected=dict(
result=dict(failed=u''),
value=permission1_renamed_ucase,
result=dict(failed=[]),
value=[permission1_renamed_ucase],
summary=u'Deleted permission "%s"' % permission1_renamed_ucase,
)
),
@ -1253,8 +1253,8 @@ class test_permission(Declarative):
desc='Delete %r' % permission2,
command=('permission_del', [permission2], {}),
expected=dict(
result=dict(failed=u''),
value=permission2,
result=dict(failed=[]),
value=[permission2],
summary=u'Deleted permission "%s"' % permission2,
)
),
@ -1277,8 +1277,8 @@ class test_permission(Declarative):
desc='Delete %r' % privilege1,
command=('privilege_del', [privilege1], {}),
expected=dict(
result=dict(failed=u''),
value=privilege1,
result=dict(failed=[]),
value=[privilege1],
summary=u'Deleted privilege "%s"' % privilege1,
)
),
@ -1410,8 +1410,8 @@ class test_permission(Declarative):
desc='Delete %r' % permission1,
command=('permission_del', [permission1], {}),
expected=dict(
result=dict(failed=u''),
value=permission1,
result=dict(failed=[]),
value=[permission1],
summary=u'Deleted permission "%s"' % permission1,
)
),
@ -2697,8 +2697,8 @@ def _make_permission_flag_tests(flags, expected_message):
desc='Delete %r with --force' % permission1,
command=('permission_del', [permission1], {'force': True}),
expected=dict(
result=dict(failed=u''),
value=permission1,
result=dict(failed=[]),
value=[permission1],
summary=u'Deleted permission "%s"' % permission1,
),
),
@ -3571,8 +3571,8 @@ class test_managed_permissions(Declarative):
desc='Delete %r with --force' % permission1,
command=('permission_del', [permission1], {'force': True}),
expected=dict(
result=dict(failed=u''),
value=permission1,
result=dict(failed=[]),
value=[permission1],
summary=u'Deleted permission "%s"' % permission1,
),
),
@ -3826,8 +3826,8 @@ class test_permission_filters(Declarative):
desc='Delete %r' % permission1,
command=('permission_del', [permission1], {}),
expected=dict(
result=dict(failed=u''),
value=permission1,
result=dict(failed=[]),
value=[permission1],
summary=u'Deleted permission "%s"' % permission1,
)
),

View File

@ -410,8 +410,8 @@ class test_privilege(Declarative):
desc='Delete %r' % privilege1,
command=('privilege_del', [privilege1], {}),
expected=dict(
result=dict(failed=u''),
value=privilege1,
result=dict(failed=[]),
value=[privilege1],
summary=u'Deleted privilege "%s"' % privilege1,
)
),

View File

@ -373,9 +373,9 @@ class test_raduisproxy(Declarative):
desc='Delete %r' % radius1,
command=('radiusproxy_del', [radius1], {}),
expected=dict(
value=radius1,
value=[radius1],
summary=u'Deleted RADIUS proxy server "%s"' % radius1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),

View File

@ -323,8 +323,8 @@ class test_range(Declarative):
desc='Delete user %r' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
value=user1,
result=dict(failed=[]),
value=[user1],
summary=u'Deleted user "%s"' % user1,
),
),
@ -334,8 +334,8 @@ class test_range(Declarative):
desc='Delete group %r' % group1,
command=('group_del', [group1], {}),
expected=dict(
result=dict(failed=u''),
value=group1,
result=dict(failed=[]),
value=[group1],
summary=u'Deleted group "%s"' % group1,
),
),
@ -345,8 +345,8 @@ class test_range(Declarative):
desc='Delete ID range %r' % testrange1,
command=('idrange_del', [testrange1], {}),
expected=dict(
result=dict(failed=u''),
value=testrange1,
result=dict(failed=[]),
value=[testrange1],
summary=u'Deleted ID range "%s"' % testrange1,
),
),
@ -442,8 +442,8 @@ class test_range(Declarative):
desc='Delete ID range %r' % testrange2,
command=('idrange_del', [testrange2], {}),
expected=dict(
result=dict(failed=u''),
value=testrange2,
result=dict(failed=[]),
value=[testrange2],
summary=u'Deleted ID range "%s"' % testrange2,
),
),
@ -476,8 +476,8 @@ class test_range(Declarative):
desc='Delete ID range %r' % testrange8,
command=('idrange_del', [testrange8], {}),
expected=dict(
result=dict(failed=u''),
value=testrange8,
result=dict(failed=[]),
value=[testrange8],
summary=u'Deleted ID range "%s"' % testrange8,
),
),
@ -486,8 +486,8 @@ class test_range(Declarative):
desc='Delete non-active AD trusted range %r' % testrange9,
command=('idrange_del', [testrange9], {}),
expected=dict(
result=dict(failed=u''),
value=testrange9,
result=dict(failed=[]),
value=[testrange9],
summary=u'Deleted ID range "%s"' % testrange9,
),
),

View File

@ -45,7 +45,7 @@ class test_realmdomains(Declarative):
desc='Retrieve realm domains',
command=('realmdomains_show', [], {}),
expected=dict(
value=u'',
value=None,
summary=None,
result=dict(
dn=dn,
@ -57,7 +57,7 @@ class test_realmdomains(Declarative):
desc='Retrieve realm domains - print all attributes',
command=('realmdomains_show', [], {'all': True}),
expected=dict(
value=u'',
value=None,
summary=None,
result=dict(
dn=dn,
@ -80,7 +80,7 @@ class test_realmdomains(Declarative):
desc='Replace list of realm domains with "%s"' % [our_domain, new_domain_1],
command=('realmdomains_mod', [], {'associateddomain': [our_domain, new_domain_1]}),
expected=dict(
value=u'',
value=None,
summary=None,
result=dict(
associateddomain=[our_domain, new_domain_1],
@ -91,7 +91,7 @@ class test_realmdomains(Declarative):
desc='Add domain "%s" to list' % new_domain_2,
command=('realmdomains_mod', [], {'add_domain': new_domain_2}),
expected=dict(
value=u'',
value=None,
summary=None,
result=dict(
associateddomain=[our_domain, new_domain_1, new_domain_2],
@ -102,7 +102,7 @@ class test_realmdomains(Declarative):
desc='Delete domain "%s" from list' % new_domain_2,
command=('realmdomains_mod', [], {'del_domain': new_domain_2}),
expected=dict(
value=u'',
value=None,
summary=None,
result=dict(
associateddomain=[our_domain, new_domain_1],
@ -113,7 +113,7 @@ class test_realmdomains(Declarative):
desc='Add domain "%s" and delete domain "%s"' % (new_domain_2, new_domain_1),
command=('realmdomains_mod', [], {'add_domain': new_domain_2, 'del_domain': new_domain_1}),
expected=dict(
value=u'',
value=None,
summary=None,
result=dict(
associateddomain=[our_domain, new_domain_2],
@ -163,7 +163,7 @@ class test_realmdomains(Declarative):
desc='Add an invalid domain "%s" with --force option' % bad_domain,
command=('realmdomains_mod', [], {'add_domain': bad_domain, 'force': True}),
expected=dict(
value=u'',
value=None,
summary=None,
result=dict(
associateddomain=[our_domain, new_domain_2, bad_domain],

View File

@ -468,8 +468,8 @@ class test_role(Declarative):
desc='Delete %r' % group1,
command=('group_del', [group1], {}),
expected=dict(
result=dict(failed=u''),
value=group1,
result=dict(failed=[]),
value=[group1],
summary=u'Deleted group "testgroup1"',
)
),
@ -554,8 +554,8 @@ class test_role(Declarative):
desc='Delete %r' % role1,
command=('role_del', [role1], {}),
expected=dict(
result=dict(failed=u''),
value=role1,
result=dict(failed=[]),
value=[role1],
summary=u'Deleted role "%s"' % role1,
)
),
@ -604,8 +604,8 @@ class test_role(Declarative):
desc='Delete %r' % role2,
command=('role_del', [role2], {}),
expected=dict(
result=dict(failed=u''),
value=role2,
result=dict(failed=[]),
value=[role2],
summary=u'Deleted role "%s"' % role2,
)
),

View File

@ -572,8 +572,8 @@ class test_selinuxusermap(Declarative):
desc='Try to delete similarly named HBAC rule %r' % hbacrule2,
command=('hbacrule_del', [hbacrule2], {}),
expected=dict(
result=dict(failed=u''),
value=hbacrule2,
result=dict(failed=[]),
value=[hbacrule2],
summary=u'Deleted HBAC rule "%s"' % hbacrule2,
)
),
@ -584,8 +584,8 @@ class test_selinuxusermap(Declarative):
desc='Delete %r' % rule1,
command=('selinuxusermap_del', [rule1], {}),
expected=dict(
result=dict(failed=u''),
value=rule1,
result=dict(failed=[]),
value=[rule1],
summary=u'Deleted SELinux User Map "%s"' % rule1,
)
),
@ -780,8 +780,8 @@ class test_selinuxusermap(Declarative):
desc='Delete %r' % rule1,
command=('selinuxusermap_del', [rule1], {}),
expected=dict(
result=dict(failed=u''),
value=rule1,
result=dict(failed=[]),
value=[rule1],
summary=u'Deleted SELinux User Map "%s"' % rule1,
)
),
@ -823,8 +823,8 @@ class test_selinuxusermap(Declarative):
desc='Delete %r' % rule1,
command=('selinuxusermap_del', [rule1], {}),
expected=dict(
result=dict(failed=u''),
value=rule1,
result=dict(failed=[]),
value=[rule1],
summary=u'Deleted SELinux User Map "%s"' % rule1,
)
),
@ -865,8 +865,8 @@ class test_selinuxusermap(Declarative):
desc='Delete %r' % rule1,
command=('selinuxusermap_del', [rule1], {}),
expected=dict(
result=dict(failed=u''),
value=rule1,
result=dict(failed=[]),
value=[rule1],
summary=u'Deleted SELinux User Map "%s"' % rule1,
)
),
@ -899,8 +899,8 @@ class test_selinuxusermap(Declarative):
desc='Delete %r' % rule1,
command=('selinuxusermap_del', [rule1], {}),
expected=dict(
result=dict(failed=u''),
value=rule1,
result=dict(failed=[]),
value=[rule1],
summary=u'Deleted SELinux User Map "%s"' % rule1,
)
),

View File

@ -543,9 +543,9 @@ class test_service(Declarative):
desc='Delete %r' % service1,
command=('service_del', [service1], {}),
expected=dict(
value=service1,
value=[service1],
summary=u'Deleted service "%s"' % service1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),

View File

@ -281,9 +281,9 @@ class test_sudocmd(Declarative):
desc='Delete %r' % sudocmd1,
command=('sudocmd_del', [sudocmd1], {}),
expected=dict(
value=sudocmd1,
value=[sudocmd1],
summary=u'Deleted Sudo Command "%s"' % sudocmd1,
result=dict(failed=u''),
result=dict(failed=[]),
),
),

View File

@ -600,8 +600,8 @@ class test_sudocmdgroup(Declarative):
desc='Delete %r' % sudocmdgroup1,
command=('sudocmdgroup_del', [sudocmdgroup1], {}),
expected=dict(
result=dict(failed=u''),
value=sudocmdgroup1,
result=dict(failed=[]),
value=[sudocmdgroup1],
summary=u'Deleted Sudo Command Group "testsudocmdgroup1"',
)
),
@ -638,8 +638,8 @@ class test_sudocmdgroup(Declarative):
desc='Delete %r' % sudocmdgroup2,
command=('sudocmdgroup_del', [sudocmdgroup2], {}),
expected=dict(
result=dict(failed=u''),
value=sudocmdgroup2,
result=dict(failed=[]),
value=[sudocmdgroup2],
summary=u'Deleted Sudo Command Group "testsudocmdgroup2"',
)
),
@ -676,8 +676,8 @@ class test_sudocmdgroup(Declarative):
desc='Now delete the sudo command %r' % sudocmd1,
command=('sudocmd_del', [sudocmd1], {}),
expected=dict(
result=dict(failed=u''),
value=sudocmd1,
result=dict(failed=[]),
value=[sudocmd1],
summary=u'Deleted Sudo Command "%s"' % sudocmd1,
)
),

View File

@ -519,9 +519,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user1,
value=user1,
value=[user1],
),
),
@ -574,9 +574,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user1,
value=user1,
value=[user1],
),
),
@ -646,9 +646,9 @@ class test_user(Declarative):
desc='Delete "%s" and "%s" at the same time' % (user1, user2),
command=('user_del', [user1, user2], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "tuser1,tuser2"',
value=u','.join((user1, user2)),
value=[user1, user2],
),
),
@ -782,9 +782,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user1,
value=user1,
value=[user1],
),
),
@ -811,9 +811,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user1,
value=user1,
value=[user1],
),
),
@ -849,9 +849,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user2,
command=('user_del', [user2], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user2,
value=user2,
value=[user2],
),
),
@ -892,9 +892,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user1,
value=user1,
value=[user1],
),
),
@ -932,9 +932,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user1,
value=user1,
value=[user1],
),
),
@ -971,9 +971,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user1,
value=user1,
value=[user1],
),
),
@ -1008,9 +1008,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user2,
command=('user_del', [user2], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user2,
value=user2,
value=[user2],
),
),
@ -1116,9 +1116,9 @@ class test_user(Declarative):
desc='Delete %r' % renameduser1,
command=('user_del', [renameduser1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % renameduser1,
value=renameduser1,
value=[renameduser1],
),
),
@ -1255,9 +1255,9 @@ class test_user(Declarative):
desc='Delete 2nd admin "%s"' % admin2,
command=('user_del', [admin2], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % admin2,
value=admin2,
value=[admin2],
),
),
@ -1324,9 +1324,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user2,
command=('user_del', [user2], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user2,
value=user2,
value=[user2],
),
),
@ -1362,9 +1362,9 @@ class test_user(Declarative):
desc='Delete "%s"' % user1,
command=('user_del', [user1], {}),
expected=dict(
result=dict(failed=u''),
result=dict(failed=[]),
summary=u'Deleted user "%s"' % user1,
value=user1,
value=[user1],
),
),