From c48f4d98db2435e2ee436834089f20ad405d1cc2 Mon Sep 17 00:00:00 2001 From: Akshay Adhikari Date: Jun 26 2020 13:00:57 +0000 Subject: Issue 50928 - Unable to create a suffix with countryName either via dscreate or the admin console Description: Added a test case to create a suffix with countryName and all other RDN attributes via dscreate, also added a negative scenario. Relates: https://pagure.io/389-ds-base/issue/50928 Reviewed by: vashirov, mreynolds (Thanks!) --- diff --git a/dirsrvtests/tests/suites/basic/basic_test.py b/dirsrvtests/tests/suites/basic/basic_test.py index 1202073..44ffdd3 100644 --- a/dirsrvtests/tests/suites/basic/basic_test.py +++ b/dirsrvtests/tests/suites/basic/basic_test.py @@ -1400,6 +1400,85 @@ def test_dscreate_multiple_dashes_name(dscreate_long_instance): assert not dscreate_long_instance.exists() +@pytest.fixture(scope="module", params=('c=uk', 'cn=test_user', 'dc=example,dc=com', 'o=south', 'ou=sales', 'wrong=some_value')) +def dscreate_test_rdn_value(request): + template_file = "/tmp/dssetup.inf" + template_text = f"""[general] +config_version = 2 +# This invalid hostname ... +full_machine_name = localhost.localdomain +# Means we absolutely require this. +strict_host_checking = False +# In tests, we can be run in containers, NEVER trust +# that systemd is there, or functional in any capacity +systemd = False + +[slapd] +instance_name = test_different_rdn +root_dn = cn=directory manager +root_password = someLongPassword_123 +# We do not have access to high ports in containers, +# so default to something higher. +port = 38999 +secure_port = 63699 + +[backend-userroot] +create_suffix_entry = True +suffix = {request.param} +""" + + with open(template_file, "w") as template_fd: + template_fd.write(template_text) + + # Unset PYTHONPATH to avoid mixing old CLI tools and new lib389 + tmp_env = os.environ + if "PYTHONPATH" in tmp_env: + del tmp_env["PYTHONPATH"] + + def fin(): + os.remove(template_file) + if request.param != "wrong=some_value": + try: + subprocess.check_call(['dsctl', 'test_different_rdn', 'remove', '--do-it']) + except subprocess.CalledProcessError as e: + log.fatal(f"Failed to remove test instance Error ({e.returncode}) {e.output}") + else: + log.info("Wrong RDN is passed, instance not created") + request.addfinalizer(fin) + return template_file, tmp_env, request.param, + + +@pytest.mark.skipif(not get_user_is_root() or ds_is_older('1.4.0.0'), + reason="This test is only required with new admin cli, and requires root.") +@pytest.mark.bz1807419 +@pytest.mark.ds50928 +def test_dscreate_with_different_rdn(dscreate_test_rdn_value): + """Test that dscreate works with different RDN attributes as suffix + + :id: 77ed6300-6a2f-4e79-a862-1f1105f1e3ef + :setup: None + :steps: + 1. Create template file for dscreate with different RDN attributes as suffix + 2. Create instance using template file + 3. Create instance with 'wrong=some_value' as suffix's RDN attribute + :expectedresults: + 1. Should succeeds + 2. Should succeeds + 3. Should fail + """ + try: + subprocess.check_call([ + 'dscreate', + 'from-file', + dscreate_test_rdn_value[0] + ], env=dscreate_test_rdn_value[1]) + except subprocess.CalledProcessError as e: + log.fatal(f"dscreate failed! Error ({e.returncode}) {e.output}") + if dscreate_test_rdn_value[2] != "wrong=some_value": + assert False + else: + assert True + if __name__ == '__main__': # Run isolated