changeset 623:09e15af29d36

Add a script as test harness for Valgrind'ing the C extension
author Franz Glasner <f.glasner@feldmann-mg.com>
date Thu, 13 Jan 2022 17:52:46 +0100
parents 8d2d5d54ff3c
children 429a7d5002b8
files tests/data/conf_perf.py tests/valgrind-checks.py
diffstat 2 files changed, 123 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/tests/data/conf_perf.py	Thu Jan 13 17:38:57 2022 +0100
+++ b/tests/data/conf_perf.py	Thu Jan 13 17:52:46 2022 +0100
@@ -7,14 +7,14 @@
     from collections import OrderedDict
 except ImportError:
     from ordereddict import OrderedDict
-    
+
 
 key1 = u"in the root namespace"
 key2 = u"in the root namespace -- too"
 
 tree1 = OrderedDict([
     (u'key3',  0x20),
-    
+
     (u'tree2', OrderedDict([
         (u'key4', u"get this as `tree1.tree2.key4'"),
         (u'key5', True),
@@ -29,5 +29,8 @@
         (u'key10', u"1{{key1}}2{{key2}}{{key1}}3{{tree1.tree2.key4}}"),
         (u"key11", u"{{tree1.tree2.key6}}"),
         (u"key12", u"{{PY:version}}"),
-        (u"key13", u"{{tree1.key3}}__{{PY:version}}"),
-    ]))])
+        (u"key13", u"{{tree1.key3}}__{{PY:version}}")])),
+
+    (u'tree3', OrderedDict([
+        (u'bogus-key', u"{{key2}}{{non.existing}}")])),
+])
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/valgrind-checks.py	Thu Jan 13 17:52:46 2022 +0100
@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+r"""Checks to be run within Valgrind
+
+"""
+
+from __future__ import print_function
+
+import os
+
+from _test_context import TESTDATADIR
+
+import configmix
+
+
+NUM = 1000000
+WITH_JAIL = True
+
+DOTS = 10000
+
+
+cfg = configmix.load(os.path.join(TESTDATADIR, "conf_perf.py"))
+
+DEFAULT_DICT = {u"the": u"default"}
+
+
+i = 1
+while i <= NUM:
+
+    tmp1 = cfg.getvarl(u"tree1", u"tree2", u"key8")
+    tmp2 = cfg.getvarl_s(u"tree1", u"tree2", u"key8")
+    tmp3 = cfg.getvar(u"tree1.tree2.key8")
+    tmp4 = cfg.getvar_s(u"tree1.tree2.key8")
+
+    try:
+        tmp1 = cfg.getvarl(u"tree1", u"tree2", u"keyX")
+    except KeyError:
+        pass
+    else:
+        assert False
+    try:
+        tmp2 = cfg.getvarl_s(u"tree1", u"tree2", u"keyXX")
+    except KeyError:
+        pass
+    else:
+        assert False
+    try:
+        tmp3 = cfg.getvar(u"tree1.tree2.keyXXX")
+    except KeyError:
+        pass
+    else:
+        assert False
+    try:
+        tmp4 = cfg.getvar_s(u"tree1.tree2.keyXXXX")
+    except KeyError:
+        pass
+    else:
+        assert False
+
+    tmp1 = cfg.getvarl_s(u"tree1", u"tree2", u"key10")
+    # non-cacheable interpolation
+    tmp2 = cfg.getvarl_s(u"tree1", u"tree2", u"key12")
+    tmp3 = cfg.getvarl_s(u"tree1", u"tree2", u"key13")
+
+    tmp1 = cfg.getvar_s(u"tree1.tree2.key10")
+    # non-cacheable interpolation
+    tmp2 = cfg.getvar_s(u"tree1.tree2.key12")
+    tmp3 = cfg.getvar_s(u"tree1.tree2.key13")
+
+    assert("key2" in cfg)
+    assert((u"tree1", u"tree2", u"keyX") not in cfg)
+    assert((u"tree1", u"tree2", u"key8") in cfg)
+
+    tmp1 = cfg.getvarl(u"tree1", u"treeXXXX", default=DEFAULT_DICT)
+    assert(tmp1 is DEFAULT_DICT)
+    tmp2 = cfg.getvarl_s(u"tree1", u"treeXXXXXXX", default=DEFAULT_DICT)
+    assert(tmp2 is DEFAULT_DICT)    
+    tmp3 = cfg.getvar(u"treeXXXXXXXXXXX", default=DEFAULT_DICT)
+    assert(tmp3 is DEFAULT_DICT)
+    tmp4 = cfg.getvar_s(u"treeXXXXXXXXXXXXXXXXXXX", default=DEFAULT_DICT)
+    assert(tmp4 is DEFAULT_DICT)
+
+    if WITH_JAIL:
+        jail = cfg.jailed(root=u"tree1.tree2")
+        assert(u"key5" in jail)
+        tmp1 = jail[u"key6"]
+        tmp2 = jail[(u"key8",)]
+
+        jail2 = cfg.jailed(rootpath=(u"tree1",))
+        assert((u"tree2", u"key9") in jail2)
+        tmp1 = jail2.getvarl_s(u"tree2")
+
+        tmp1 = jail2.getvar(u"tree3")
+        try:
+            tmp2 = jail2.getvar_s(u"tree3")
+        except KeyError:
+            pass
+        else:
+            assert False
+
+        try:
+            tmp1 = jail2.getvar(u"treeXXXX")
+        except KeyError:
+            pass
+        else:
+            assert False
+
+    if i % DOTS == 0:
+        print(".", end='', flush=True)
+
+    i += 1
+
+jail = jail2 = None
+tmp1 = tmp2 = tmp3 = tmp4 = None
+
+print()
+print("Done (loops: %d)." % (NUM,))