freeipa/ipatests/test_integration/test_custom_plugins.py
Rob Crittenden 7b77fef75a ipatests: add suite for testing custom plugins
Ensure that attributes and objectclasses are case-insensitive.

https://pagure.io/freeipa/issue/8415

Signed-off-by: Rob Crittenden <rcritten@redhat.com>
Reviewed-By: Florence Blanc-Renaud <flo@redhat.com>
2021-08-05 17:36:46 +02:00

89 lines
3.1 KiB
Python

#
# Copyright (C) 2021 FreeIPA Contributors see COPYING for license
#
"""Tests for custom plugins
"""
from __future__ import absolute_import
import logging
import os
import site
from ipatests.test_integration.base import IntegrationTest
from ipatests.pytest_ipa.integration import tasks
logger = logging.getLogger(__name__)
class TestCustomPlugin(IntegrationTest):
"""
Tests for user-generated custom plugins
"""
@classmethod
def install(cls, mh):
tasks.install_master(cls.master, setup_dns=True)
def test_add_user_objectclass_with_custom_schema(self):
"""Test adding a custom userclass to new users
Attributes should not be case-sensitive.
Based heavily on the custom plugin and schema at
https://github.com/Brandeis-CS-Systems/idm-unet-id-plugin
"""
schema = (
"dn: cn=schema\n"
"attributeTypes: ( 2.16.840.1.113730.3.8.24.1.1 NAME 'customID' "
"EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX "
"1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Testing' )\n"
"objectClasses: ( 2.16.840.1.113730.3.8.24.2.1 NAME 'customUser' "
"DESC 'custom user ID objectClass' AUXILIARY MAY ( customID ) "
"X-ORIGIN 'Testing' )\n"
)
plugin = (
"from ipalib.parameters import Str\n\n"
"from ipaserver.plugins.user import user\n\n"
"if 'customUser' not in user.possible_objectclasses:\n"
" user.possible_objectclasses.append('customUser')\n"
"customuser_attributes = ['customID']\n"
"user.default_attributes.extend(customuser_attributes)\n"
"takes_params = (\n"
" Str('customid?',\n"
" cli_name='customid',\n"
" maxlength=64,\n"
" label='User custom uid'),\n"
")\n"
"user.takes_params += takes_params\n"
)
tasks.kinit_admin(self.master)
self.master.put_file_contents('/tmp/schema.ldif', schema)
self.master.run_command(['ipa-ldap-updater', '-S', '/tmp/schema.ldif'])
self.master.put_file_contents('/tmp/schema.ldif', schema)
site_packages = site.getsitepackages()[-1]
site_file = os.path.join(
site_packages, "ipaserver", "plugins", "test.py"
)
self.master.put_file_contents(site_file, plugin)
self.master.run_command(['ipactl', 'restart'])
self.master.run_command([
'ipa', 'config-mod',
'--userobjectclasses', 'top',
'--userobjectclasses', 'person',
'--userobjectclasses', 'organizationalperson',
'--userobjectclasses', 'inetorgperson',
'--userobjectclasses', 'inetuser',
'--userobjectclasses', 'posixaccount',
'--userobjectclasses', 'krbprincipalaux',
'--userobjectclasses', 'krbticketpolicyaux',
'--userobjectclasses', 'ipaobject',
'--userobjectclasses', 'ipasshuser',
'--userobjectclasses', 'customuser',
])
self.master.run_command(['rm', '-f', site_file])