From 160e02736109915e01d031a0909ff81fe2858bf0 Mon Sep 17 00:00:00 2001 From: Amita Sharma Date: Aug 15 2018 13:28:39 +0000 Subject: Issue 48061 : CI test - config Description: Add more test cases to the config suite https://pagure.io/389-ds-base/issue/48061 Reviewed by: Simon --- diff --git a/dirsrvtests/tests/suites/config/config_test.py b/dirsrvtests/tests/suites/config/config_test.py index 9987137..764f734 100644 --- a/dirsrvtests/tests/suites/config/config_test.py +++ b/dirsrvtests/tests/suites/config/config_test.py @@ -6,24 +6,25 @@ # See LICENSE for details. # --- END COPYRIGHT BLOCK --- # -import logging +import logging import pytest from lib389.tasks import * -from lib389.topologies import topology_m2 - +from lib389.topologies import topology_m2, topology_st as topo +from lib389.utils import * from lib389._constants import DN_CONFIG, DEFAULT_SUFFIX - from lib389.idm.user import UserAccounts, TEST_USER_PROPERTIES - +from lib389.backend import * from lib389.config import LDBMConfig +from lib389.cos import CosPointerDefinitions, CosTemplates +from lib389.backend import Backends +from lib389.monitor import MonitorLDBM USER_DN = 'uid=test_user,%s' % DEFAULT_SUFFIX logging.getLogger(__name__).setLevel(logging.INFO) log = logging.getLogger(__name__) - @pytest.fixture(scope="module") def big_file(): TEMP_BIG_FILE = '' @@ -145,7 +146,6 @@ def test_config_deadlock_policy(topology_m2): deadlock_policy = ldbmconfig.get_attr_val_bytes('nsslapd-db-deadlock-policy') assert deadlock_policy == default_val - # Try a range of valid values for val in ('0', '5', '9'): ldbmconfig.replace('nsslapd-db-deadlock-policy', val) @@ -159,8 +159,296 @@ def test_config_deadlock_policy(topology_m2): ldbmconfig.replace('nsslapd-db-deadlock-policy', deadlock_policy) +@pytest.mark.bz766322 +@pytest.mark.ds26 +def test_defaultnamingcontext(topo): + """Tests configuration attribute defaultNamingContext in the rootdse + + :id: ad57de32-1d118-4323-bbca-5556e5cdb786 + :setup: Standalone instance + :steps: + 1. Check the attribute nsslapd-defaultnamingcontext is present in cn=config + 2. Delete nsslapd-defaultnamingcontext attribute + 3. Add new valid Suffix and modify nsslapd-defaultnamingcontext with new suffix + 4. Add new invalid value at runtime to nsslapd-defaultnamingcontext + 5. Modify nsslapd-defaultnamingcontext with blank value + 6. Add new suffix when nsslapd-defaultnamingcontext is empty + 7. Check the value of the nsslapd-defaultnamingcontext automatically have the new suffix + 8. Adding new suffix when nsslapd-defaultnamingcontext is not empty + 9. Check the value of the nsslapd-defaultnamingcontext has not changed + 10. Remove the newly added suffix and check the values of the attribute is not changed + 11. Remove the original suffix which is currently nsslapd-defaultnamingcontext + 12. Check nsslapd-defaultnamingcontext become empty. + :expectedresults: + 1. This should be successful + 2. It should give 'server unwilling to perform' error + 3. It should be successful + 4. It should give 'no such object' error + 5. It should be successful + 6. Add should be successful + 7. nsslapd-defaultnamingcontext should have new suffix + 8. Add should be successful + 9. defaultnamingcontext should not change + 10. Remove should be successful and defaultnamingcontext should not change + 11. Removal should be successful + 12. nsslapd-defaultnamingcontext should be empty + """ + + backends = Backends(topo.standalone) + test_suffix1 = 'dc=test1,dc=com' + test_db1 = 'test1_db' + test_suffix2 = 'dc=test2,dc=com' + test_db2 = 'test2_db' + test_suffix3 = 'dc=test3,dc=com' + test_db3 = 'test3_db' + + log.info("Check the attribute nsslapd-defaultnamingcontext is present in cn=config") + assert topo.standalone.config.present('nsslapd-defaultnamingcontext') + + log.info("Delete nsslapd-defaultnamingcontext attribute") + with pytest.raises(ldap.UNWILLING_TO_PERFORM): + topo.standalone.config.remove_all('nsslapd-defaultnamingcontext') + + b1 = backends.create(properties={'cn': test_db1, + 'nsslapd-suffix': test_suffix1}) + + log.info("modify nsslapd-defaultnamingcontext with new suffix") + topo.standalone.config.replace('nsslapd-defaultnamingcontext', test_suffix1) + + log.info("Add new invalid value at runtime to nsslapd-defaultnamingcontext") + with pytest.raises(ldap.NO_SUCH_OBJECT): + topo.standalone.config.replace('nsslapd-defaultnamingcontext', 'some_invalid_value') + + log.info("Modify nsslapd-defaultnamingcontext with blank value") + topo.standalone.config.replace('nsslapd-defaultnamingcontext', ' ') + + log.info("Add new suffix when nsslapd-defaultnamingcontext is empty") + b2 = backends.create(properties={'cn': test_db2, + 'nsslapd-suffix': test_suffix2}) + + log.info("Check the value of the nsslapd-defaultnamingcontext automatically have the new suffix") + assert topo.standalone.config.get_attr_val_utf8('nsslapd-defaultnamingcontext') == test_suffix2 + + log.info("Adding new suffix when nsslapd-defaultnamingcontext is not empty") + b3 = backends.create(properties={'cn': test_db3, + 'nsslapd-suffix': test_suffix3}) + + log.info("Check the value of the nsslapd-defaultnamingcontext has not changed") + assert topo.standalone.config.get_attr_val_utf8('nsslapd-defaultnamingcontext') == test_suffix2 + + log.info("Remove the newly added suffix and check the values of the attribute is not changed") + b3.delete() + assert topo.standalone.config.get_attr_val_utf8('nsslapd-defaultnamingcontext') == test_suffix2 + + log.info("Remove all the suffix at the end") + b1.delete() + b2.delete() + + +@pytest.mark.xfail(reason="This may fail due to bug 1610234") +def test_defaultnamingcontext_1(topo): + """This test case should be part of function test_defaultnamingcontext + Please move it back after we have a fix for bug 1610234 + """ + log.info("Remove the original suffix which is currently nsslapd-defaultnamingcontext" + "and check nsslapd-defaultnamingcontext become empty.") + + """ Please remove these declarations after moving the test + to function test_defaultnamingcontext + """ + backends = Backends(topo.standalone) + test_db2 = 'test2_db' + test_suffix2 = 'dc=test2,dc=com' + b2 = backends.create(properties={'cn': test_db2, + 'nsslapd-suffix': test_suffix2}) + b2.delete() + assert topo.standalone.config.get_attr_val_utf8('nsslapd-defaultnamingcontext') == ' ' + + +@pytest.mark.bz602456 +def test_allow_add_delete_config_attributes(topo): + """Tests configuration attributes are allowed to add and delete + + :id: ad57de32-1d167-4323-bbca-5086e5cdb235 + :setup: Standalone instance + :steps: + 1. Add a new valid attribute at runtime to cn=config + 2. Check if the new valid attribute is present + 3. Delete nsslapd-listenhost to restore the default value + 4. Restart the server + 5. Check nsslapd-listenhost is present with default value + 6. Add new invalid attribute at runtime to cn=config + 7. Make sure the invalid attribute is not added + :expectedresults: + 1. This should be successful + 2. This should be successful + 3. This should be successful + 4. This should be successful + 5. This should be successful + 6. It should give 'server unwilling to perform' error + 7. Invalid attribute should not be added + """ + default_listenhost = topo.standalone.config.get_attr_val_utf8('nsslapd-listenhost') + + log.info("Add a new valid attribute at runtime to cn=config") + topo.standalone.config.add('nsslapd-listenhost', 'localhost') + assert topo.standalone.config.present('nsslapd-listenhost', 'localhost') + + log.info("Delete nsslapd-listenhost to restore the default value") + topo.standalone.config.remove('nsslapd-listenhost', 'localhost') + topo.standalone.restart() + assert topo.standalone.config.present('nsslapd-listenhost', default_listenhost) + + log.info("Add new invalid attribute at runtime to cn=config") + with pytest.raises(ldap.UNWILLING_TO_PERFORM): + topo.standalone.config.add('invalid-attribute', 'invalid-value') + + log.info("Make sure the invalid attribute is not added") + assert not topo.standalone.config.present('invalid-attribute', 'invalid-value') + + +@pytest.mark.bz918705 +@pytest.mark.ds511 +def test_ignore_virtual_attrs(topo): + """Test nsslapd-ignore-virtual-attrs configuration attribute + + :id: 9915d71b-2c71-4ac0-91d7-92655d53541b + :setup: Standalone instance + :steps: + 1. Check the attribute nsslapd-ignore-virtual-attrs is present in cn=config + 2. Check the default value of attribute nsslapd-ignore-virtual-attrs should be OFF + 3. Set the valid values i.e. on/ON and off/OFF for nsslapd-ignore-virtual-attrs + 4. Set invalid value for attribute nsslapd-ignore-virtual-attrs + 5. Set nsslapd-ignore-virtual-attrs=off + 6. Add cosPointer, cosTemplate and test entry to default suffix, where virtual attribute is postal code + 7. Test if virtual attribute i.e. postal code shown in test entry while nsslapd-ignore-virtual-attrs: off + 8. Set nsslapd-ignore-virtual-attrs=on + 9. Test if virtual attribute i.e. postal code not shown while nsslapd-ignore-virtual-attrs: on + :expectedresults: + 1. This should be successful + 2. This should be successful + 3. This should be successful + 4. This should fail + 5. This should be successful + 6. This should be successful + 7. Postal code should be present + 8. This should be successful + 9. Postal code should not be present + """ + + log.info("Check the attribute nsslapd-ignore-virtual-attrs is present in cn=config") + assert topo.standalone.config.present('nsslapd-ignore-virtual-attrs') + + log.info("Check the default value of attribute nsslapd-ignore-virtual-attrs should be OFF") + assert topo.standalone.config.get_attr_val_utf8('nsslapd-ignore-virtual-attrs') == "off" + + log.info("Set the valid values i.e. on/ON and off/OFF for nsslapd-ignore-virtual-attrs") + for attribute_value in ['on', 'off', 'ON', 'OFF']: + topo.standalone.config.set('nsslapd-ignore-virtual-attrs', attribute_value) + assert topo.standalone.config.present('nsslapd-ignore-virtual-attrs', attribute_value) + + log.info("Set invalid value for attribute nsslapd-ignore-virtual-attrs") + with pytest.raises(ldap.OPERATIONS_ERROR): + topo.standalone.config.set('nsslapd-ignore-virtual-attrs', 'invalid_value') + + cos_template_properties = { + 'cn': 'cosTemplateExample', + 'postalcode': '117' + } + cos_templates = CosTemplates(topo.standalone, DEFAULT_SUFFIX, 'ou=People') + test_cos_template = cos_templates.create(properties=cos_template_properties) + + log.info("Add cosPointer, cosTemplate and test entry to default suffix, where virtual attribute is postal code") + cos_pointer_properties = { + 'cn': 'cosPointer', + 'description': 'cosPointer example', + 'cosTemplateDn': 'cn=cosTemplateExample,ou=People,dc=example,dc=com', + 'cosAttribute': 'postalcode', + } + cos_pointer_definitions = CosPointerDefinitions(topo.standalone, DEFAULT_SUFFIX, 'ou=People') + test_cos_pointer_definition = cos_pointer_definitions.create(properties=cos_pointer_properties) + + test_users = UserAccounts(topo.standalone, DEFAULT_SUFFIX) + test_user = test_users.create(properties=TEST_USER_PROPERTIES) + + log.info("Test if virtual attribute i.e. postal code shown in test entry while nsslapd-ignore-virtual-attrs: off") + assert test_user.present('postalcode', '117') + + log.info("Set nsslapd-ignore-virtual-attrs=on") + topo.standalone.config.set('nsslapd-ignore-virtual-attrs', 'on') + + log.info("Test if virtual attribute i.e. postal code not shown while nsslapd-ignore-virtual-attrs: on") + assert not test_user.present('postalcode', '117') + + +@pytest.mark.bz918694 +@pytest.mark.ds408 +def test_ndn_cache_enabled(topo): + """Test nsslapd-ignore-virtual-attrs configuration attribute + + :id: 2caa3ec0-cd05-458e-9e21-3b73cf4697ff + :setup: Standalone instance + :steps: + 1. Check the attribute nsslapd-ndn-cache-enabled is present in cn=config + 2. Check the attribute nsslapd-ndn-cache-enabled has the default value set as ON + 3. Check the attribute nsslapd-ndn-cache-max-size is present in cn=config + 4. Check the backend monitor output for Normalized DN cache statistics while nsslapd-ndn-cache-enabled is OFF + 5. Set nsslapd-ndn-cache-enabled ON and check the backend monitor output for Normalized DN cache statistics + 6. Set invalid value for nsslapd-ndn-cache-enabled + 7. Set invalid value for nsslapd-ndn-cache-max-size + :expectedresults: + 1. This should be successful + 2. This should be successful + 3. This should be successful + 4. Backend monitor output should not have NDN cache statistics + 5. Backend monitor output should have NDN cache statistics + 6. This should fail + 7. This should fail + """ + log.info("Check the attribute nsslapd-ndn-cache-enabled is present in cn=config") + assert topo.standalone.config.present('nsslapd-ndn-cache-enabled') + + log.info("Check the attribute nsslapd-ndn-cache-enabled has the default value set as ON") + assert topo.standalone.config.get_attr_val_utf8('nsslapd-ndn-cache-enabled') == 'on' + + log.info("Check the attribute nsslapd-ndn-cache-max-size is present in cn=config") + assert topo.standalone.config.present('nsslapd-ndn-cache-max-size') + + backends = Backends(topo.standalone) + backend = backends.get(DEFAULT_BENAME) + + log.info("Ticket#49593 : NDN cache stats should be under the global stats - Implemented in 1.4") + log.info("Fetch the monitor value according to the ds version") + if ds_is_older('1.4'): + monitor = backend.get_monitor() + else: + monitor = MonitorLDBM(topo.standalone) + + log.info("Check the backend monitor output for Normalized DN cache statistics, " + "while nsslapd-ndn-cache-enabled is off") + topo.standalone.config.set('nsslapd-ndn-cache-enabled', 'off') + topo.standalone.restart() + assert not monitor.present('normalizedDnCacheHits') + + log.info("Check the backend monitor output for Normalized DN cache statistics, " + "while nsslapd-ndn-cache-enabled is on") + topo.standalone.config.set('nsslapd-ndn-cache-enabled', 'on') + topo.standalone.restart() + assert monitor.present('normalizedDnCacheHits') + + log.info("Set invalid value for nsslapd-ndn-cache-enabled") + with pytest.raises(ldap.OPERATIONS_ERROR): + topo.standalone.config.set('nsslapd-ndn-cache-enabled', 'invalid_value') + + log.info("Set invalid value for nsslapd-ndn-cache-max-size") + with pytest.raises(ldap.OPERATIONS_ERROR): + topo.standalone.config.set('nsslapd-ndn-cache-max-size', 'invalid_value') + + if __name__ == '__main__': # Run isolated # -s for DEBUG mode CURRENT_FILE = os.path.realpath(__file__) pytest.main("-s %s" % CURRENT_FILE) + +