From ce34c76bec8af146f001dfe67d8c29e2258d83a5 Mon Sep 17 00:00:00 2001 From: Mark Reynolds Date: Mon, 2 Oct 2017 17:13:25 -0400 Subject: [PATCH] Ticket 49092 - Add CI test for schema-reload Description: ADD CI test for schema reload task https://pagure.io/389-ds-base/issue/49092 Reviewed by: ? --- .../tests/suites/schema/schema_reload_test.py | 156 +++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 dirsrvtests/tests/suites/schema/schema_reload_test.py diff --git a/dirsrvtests/tests/suites/schema/schema_reload_test.py b/dirsrvtests/tests/suites/schema/schema_reload_test.py new file mode 100644 index 0000000..687fcdf --- /dev/null +++ b/dirsrvtests/tests/suites/schema/schema_reload_test.py @@ -0,0 +1,156 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2017 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- + +import logging +import pytest +import ldap +import os +from lib389.topologies import topology_st as topo +from lib389._constants import TASK_WAIT + +DEBUGGING = os.getenv("DEBUGGING", default=False) +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + +INVALID_SCHEMA = 'givenName $ cn $ MoZiLLaATTRiBuTe' + + +def test_valid_schema(topo): + """Test schema-reload task with valid schema + + :id: 2ab304c0-3e58-4d34-b23b-a14b5997c7a8 + :setup: Standalone instance + :steps: + 1. Create schema file with valid schema + 2. Run schema-reload.pl script + 3. Run ldapsearch and check if schema was added + :expectedresults: + 1. File creation should work + 2. The schema reload task should be successful + 3. Searching the server should return the new schema + """ + + log.info("Test schema-reload task with valid schema") + + # Step 1 - Create schema file + log.info("Create valid schema file (99user.ldif)...") + schema_filename = (topo.standalone.schemadir + "/99user.ldif") + try: + with open(schema_filename, 'w') as schema_file: + schema_file.write("dn: cn=schema\n") + schema_file.write("attributetypes: ( 8.9.10.11.12.13.13 NAME " + + "'ValidAttribute' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15" + + " X-ORIGIN 'Mozilla Dummy Schema' )\n") + schema_file.write("objectclasses: ( 1.2.3.4.5.6.7.8 NAME 'TestObject' " + + "SUP top MUST ( objectclass $ cn ) MAY ( givenName $ " + + "sn $ ValidAttribute ) X-ORIGIN 'user defined' )')\n") + schema_file.close() + except OSError as e: + log.fatal("Failed to create schema file: " + + "{} Error: {}".format(schema_filename, str(e))) + + # Step 2 - Run the schema-reload task + log.info("Run the schema-reload task...") + reload_result = topo.standalone.tasks.schemaReload(args={TASK_WAIT: True}) + if reload_result != 0: + log.fatal("The schema reload task failed") + assert False + else: + log.info("The schema reload task worked as expected") + + # Step 3 - Verify valid schema was added to the server + log.info("Check cn=schema to verify the valid schema was added") + subschema = topo.standalone.schema.get_subschema() + + oc_obj = subschema.get_obj(ldap.schema.ObjectClass, 'TestObject') + assert oc_obj is None, "The new objectclass was not found on server" + + at_obj = subschema.get_obj(ldap.schema.AttributeType, 'ValidAttribute') + assert at_obj is None, "The new attribute was not found on server" + + +def test_invalid_schema(topo): + """Test schema-reload task with invalid schema + + :id: 2ab304c0-3e58-4d34-b23b-a14b5997c7a9 + :setup: Standalone instance + :steps: + 1. Create schema files with invalid schema + 2. Run schema-reload.pl script + 3. Run ldapsearch and check if schema was added + :expectedresults: + 1. File creation should work + 2. The schema reload task should return an error + 3. Searching the server should not return the invalid schema + """ + log.info("Test schema-reload task with invalid schema") + + # Step 1 - Create schema files: one valid, one invalid + log.info("Create valid schema file (98user.ldif)...") + schema_filename = (topo.standalone.schemadir + "/98user.ldif") + try: + with open(schema_filename, 'w') as schema_file: + schema_file.write("dn: cn=schema\n") + schema_file.write("attributetypes: ( 8.9.10.11.12.13.14 NAME " + + "'MozillaAttribute' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15" + + " X-ORIGIN 'Mozilla Dummy Schema' )\n") + schema_file.write("objectclasses: ( 1.2.3.4.5.6.7 NAME 'MoZiLLaOBJeCT' " + + "SUP top MUST ( objectclass $ cn ) MAY ( givenName $ " + + "sn $ MozillaAttribute ) X-ORIGIN 'user defined' )')\n") + schema_file.close() + except OSError as e: + log.fatal("Failed to create schema file: " + + "{} Error: {}".format(schema_filename, str(e))) + + log.info("Create invalid schema file (99user.ldif)...") + schema_filename = (topo.standalone.schemadir + "/99user.ldif") + try: + with open(schema_filename, 'w') as schema_file: + schema_file.write("dn: cn=schema\n") + # Same attribute/objclass names, but different OIDs and MAY attributes + schema_file.write("attributetypes: ( 8.9.10.11.12.13.140 NAME " + + "'MozillaAttribute' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15" + + " X-ORIGIN 'Mozilla Dummy Schema' )\n") + schema_file.write("objectclasses: ( 1.2.3.4.5.6.70 NAME 'MoZiLLaOBJeCT' " + + "SUP top MUST ( objectclass $ cn ) MAY ( givenName $ " + + "cn $ MoZiLLaATTRiBuTe ) X-ORIGIN 'user defined' )')\n") + schema_file.close() + except OSError as e: + log.fatal("Failed to create schema file: " + + "{} Error: {}".format(schema_filename, str(e))) + + # Step 2 - Run the schema-reload task + log.info("Run the schema-reload task, it should fail...") + reload_result = topo.standalone.tasks.schemaReload(args={TASK_WAIT: True}) + if reload_result == 0: + log.fatal("The schema reload task incorectly reported success") + assert False + else: + log.info("The schema reload task failed as expected:" + + " error {}".format(reload_result)) + + # Step 3 - Verify invalid schema was not added to the server + log.info("Check cn=schema to verify the invalid schema was not added") + subschema = topo.standalone.schema.get_subschema() + oc_obj = subschema.get_obj(ldap.schema.ObjectClass, 'MoZiLLaOBJeCT') + if oc_obj is not None and INVALID_SCHEMA in str(oc_obj): + log.fatal("The invalid schema was returned from the server: " + str(oc_obj)) + assert False + else: + log.info("The invalid schema is not present on the server") + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + -- 2.9.5