From e8f510e969284e0c0d62926c404540db66c21587 Mon Sep 17 00:00:00 2001 From: Barbora Smejkalova Date: Jun 03 2020 06:49:32 +0000 Subject: Issue 50545 - Port remaining legacy tools to new python CLI Description: Created test that checks output syntax for dbmon to make sure it did not fail with error. Relates: https://pagure.io/389-ds-base/issue/50545 Reviewed by: firstyear, mreynolds (Thanks!) --- diff --git a/dirsrvtests/tests/suites/clu/dbmon_test.py b/dirsrvtests/tests/suites/clu/dbmon_test.py new file mode 100644 index 0000000..0c7a14b --- /dev/null +++ b/dirsrvtests/tests/suites/clu/dbmon_test.py @@ -0,0 +1,192 @@ +# --- BEGIN COPYRIGHT BLOCK --- +# Copyright (C) 2020 Red Hat, Inc. +# All rights reserved. +# +# License: GPL (version 3 or any later version). +# See LICENSE for details. +# --- END COPYRIGHT BLOCK --- +# +import time +import subprocess +import pytest + +from lib389.tasks import * +from lib389.utils import * +from lib389.topologies import topology_st +from lib389.cli_conf.monitor import db_monitor +from lib389.cli_base import FakeArgs + +pytestmark = pytest.mark.tier1 + +logging.getLogger(__name__).setLevel(logging.DEBUG) +log = logging.getLogger(__name__) + +OUTPUT_NO_INDEXES = [ + 'DB Monitor Report', + 'Database Cache:', + 'Cache Hit Ratio:', + 'Free Space:', + 'Free Percentage:', + 'RO Page Drops:', + 'Pages In:', + 'Pages Out:', + 'Normalized DN Cache:', + 'Cache Hit Ratio:', + 'Free Space:', + 'Free Percentage:', + 'DN Count:', + 'Evictions:', + 'Backends:', + 'dc=example,dc=com (userRoot):', + 'Entry Cache Hit Ratio:', + 'Entry Cache Count:', + 'Entry Cache Free Space:', + 'Entry Cache Free Percentage:', + 'Entry Cache Average Size:', + 'DN Cache Hit Ratio:', + 'DN Cache Count:', + 'DN Cache Free Space:', + 'DN Cache Free Percentage:', + 'DN Cache Average Size:' + ] + +OUTPUT_INDEXES = [ + 'DB Monitor Report', + 'Database Cache:', + 'Cache Hit Ratio:', + 'Free Space:', + 'Free Percentage:', + 'RO Page Drops:', + 'Pages In:', + 'Pages Out:', + 'Normalized DN Cache:', + 'Cache Hit Ratio:', + 'Free Space:', + 'Free Percentage:', + 'DN Count:', + 'Evictions:', + 'Backends:', + 'dc=example,dc=com (userRoot):', + 'Entry Cache Hit Ratio:', + 'Entry Cache Count:', + 'Entry Cache Free Space:', + 'Entry Cache Free Percentage:', + 'Entry Cache Average Size:', + 'DN Cache Hit Ratio:', + 'DN Cache Count:', + 'DN Cache Free Space:', + 'DN Cache Free Percentage:', + 'DN Cache Average Size:', + 'Indexes:', + 'Index: aci.db', + 'Cache Hit:', + 'Cache Miss:', + 'Page In:', + 'Page Out:', + 'Index: id2entry.db', + 'Index: objectclass.db', + 'Index: entryrdn.db' + ] + +JSON_OUTPUT = [ + 'date', + 'dbcache', + 'hit_ratio', + 'free', + 'free_percentage', + 'roevicts', + 'pagein', + 'pageout', + 'ndncache', + 'hit_ratio', + 'free', + 'free_percentage', + 'count', + 'evictions', + 'backends', + 'userRoot', + '"suffix": "dc=example,dc=com"', + 'entry_cache_count', + 'entry_cache_free', + 'entry_cache_free_percentage', + 'entry_cache_size', + 'entry_cache_hit_ratio', + 'dn_cache_count', + 'dn_cache_free', + 'dn_cache_free_percentage', + 'dn_cache_size', + 'dn_cache_hit_ratio', + 'indexes', + 'name', + 'objectclass.db', + 'cachehit', + 'cachemiss', + 'pagein', + 'pageout', + 'entryrdn.db', + 'aci.db', + 'id2entry.db' + ] + + +def clear_log(inst): + log.info('Clear the log') + inst.logcap.flush() + + +@pytest.mark.ds50545 +@pytest.mark.bz1795943 +@pytest.mark.skipif(ds_is_older("1.4.2"), reason="Not implemented") +def test_dsconf_dbmon(topology_st): + """Test dbmon tool, that was ported from legacy tools to dsconf + + :id: 4d584ba9-12a9-4e90-ba9a-7e103affdac5 + :setup: Standalone instance + :steps: + 1. Create DS instance + 2. Run dbmon without --indexes + 3. Run dbmon with --indexes + 4. Run dbmon with --json + :expectedresults: + 1. Success + 2. Success + 3. Success + 4. Success + """ + + standalone = topology_st.standalone + + args = FakeArgs() + args.backends = DEFAULT_BENAME + args.indexes = False + args.json = False + + log.info('Sanity check for syntax') + db_monitor(standalone, DEFAULT_SUFFIX, topology_st.logcap.log, args) + for item in OUTPUT_NO_INDEXES: + assert topology_st.logcap.contains(item) + + clear_log(topology_st) + + log.info('Sanity check for --indexes output') + args.indexes = True + db_monitor(standalone, DEFAULT_SUFFIX, topology_st.logcap.log, args) + for index_item in OUTPUT_INDEXES: + assert topology_st.logcap.contains(index_item) + + clear_log(topology_st) + + log.info('Sanity check for --json output') + args.json = True + db_monitor(standalone, DEFAULT_SUFFIX, topology_st.logcap.log, args) + for json_item in JSON_OUTPUT: + assert topology_st.logcap.contains(json_item) + + clear_log(topology_st) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE)