diff options
author | Garming Sam <garming@catalyst.net.nz> | 2019-04-03 16:12:35 +1300 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2019-04-08 02:07:23 +0000 |
commit | 2e05fd785a3b7355abb6fea3003f244a0a958581 (patch) | |
tree | 31298ac57f61f33c52a8fd72cdf89c73b565d37b /lib/ldb-samba | |
parent | 18438c8af2fb64ea3580cee92b4744a759a0ded8 (diff) | |
download | samba-2e05fd785a3b7355abb6fea3003f244a0a958581.tar.gz |
ldb: tests for <= and >= integer indexing with duplicates
We need to make sure that duplicates are correctly returned (uSNChanged
for instance is UNIQUE but, we should be able to index on attributes
which are not unique).
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'lib/ldb-samba')
-rw-r--r-- | lib/ldb-samba/tests/index.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/lib/ldb-samba/tests/index.py b/lib/ldb-samba/tests/index.py index 764cb2cf3ac..2256e3eceaa 100644 --- a/lib/ldb-samba/tests/index.py +++ b/lib/ldb-samba/tests/index.py @@ -133,6 +133,49 @@ class LdbTDBIndexedComparisonExpressions(LdbBaseTest): assert_int32_expr(">=" + str(int32_max-1)) assert_int32_expr("=10", "==10") + def test_comparison_expression_duplicates(self): + self.l.samba_schema_attribute_add("int32attr", 0, + _ldb.SYNTAX_SAMBA_INT32) + + int32_max = 2**31-1 + int32_min = -2**31 + + test_nums = list(range(-5, 5)) * 3 + test_nums += list(range(-20, 20, 5)) * 2 + test_nums += list(range(-50, 50, 15)) + test_nums = sorted(test_nums) + + for i, n in enumerate(test_nums): + ouuid = 0x0123456789abcdef + i + ouuid_s = bytes(('0' + hex(ouuid)[2:]).encode()) + self.l.add({"dn": "OU=COMPTESTOU{},DC=SAMBA,DC=ORG".format(i), + "objectUUID": ouuid_s, + "int32attr": str(n)}) + + def assert_int32_expr(expr, py_expr=None): + res = self.l.search(base="DC=SAMBA,DC=ORG", + scope=SCOPE_SUBTREE, + expression="(int32attr%s)" % (expr)) + + if not py_expr: + py_expr = expr + expect = [n for n in test_nums if eval(str(n) + py_expr)] + vals = sorted([int(r.get("int32attr")[0]) for r in res]) + self.assertEqual(len(res), len(expect)) + self.assertEqual(set(vals), set(expect)) + self.assertEqual(expect, vals) + + assert_int32_expr(">=-2") + assert_int32_expr("<=2") + assert_int32_expr(">=" + str(int32_min)) + assert_int32_expr("<=" + str(int32_min)) + assert_int32_expr("<=" + str(int32_min+1)) + assert_int32_expr("<=" + str(int32_max)) + assert_int32_expr(">=" + str(int32_max)) + assert_int32_expr(">=" + str(int32_max-1)) + assert_int32_expr("=-5", "==-5") + assert_int32_expr("=5", "==5") + # Run the same tests against an lmdb backend class LdbLMDBIndexedComparisonExpressions(LdbTDBIndexedComparisonExpressions): |