File: ticket49290_test.py

package info (click to toggle)
389-ds-base 2.3.1%2Bdfsg1-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 37,536 kB
  • sloc: ansic: 306,972; python: 96,937; cpp: 10,257; perl: 2,854; makefile: 2,046; sh: 925; yacc: 806; xml: 379; lex: 366; javascript: 148; java: 50
file content (68 lines) | stat: -rw-r--r-- 2,511 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# --- BEGIN COPYRIGHT BLOCK ---
# Copyright (C) 2017 Red Hat, Inc.
# All rights reserved.
#
# License: GPL (version 3 or any later version).
# See LICENSE for details.
# --- END COPYRIGHT BLOCK ---
#

import pytest
import ldap

from lib389.topologies import topology_st
from lib389._constants import DEFAULT_SUFFIX, DEFAULT_BENAME

from lib389.backend import Backends

pytestmark = pytest.mark.tier2

def test_49290_range_unindexed_notes(topology_st):
    """
    Ticket 49290 had a small collection of issues - the primary issue is
    that range requests on an attribute that is unindexed was not reporting
    notes=U. This asserts that:

    * When unindexed, the attr shows notes=U
    * when indexed, the attr does not
    """

    # First, assert that modifyTimestamp does not have an index. If it does,
    # delete it.
    topology_st.standalone.config.set('nsslapd-accesslog-logbuffering', 'off')
    backends = Backends(topology_st.standalone)
    backend = backends.get(DEFAULT_BENAME)
    indexes = backend.get_indexes()

    for i in indexes.list():
        i_cn = i.get_attr_val_utf8('cn')
        if i_cn.lower() == 'modifytimestamp':
            i.delete()
            topology_st.standalone.restart()

    # Now restart the server, and perform a modifyTimestamp range operation.
    # in access, we should see notes=U (or notes=A)
    results = topology_st.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(modifyTimestamp>=0)', ['nsUniqueId',])
    access_lines_unindexed = topology_st.standalone.ds_access_log.match('.*notes=U.*')
    assert len(access_lines_unindexed) == 1

    # Now add the modifyTimestamp index and run db2index. This will restart
    # the server
    indexes.create(properties={
        'cn': 'modifytimestamp',
        'nsSystemIndex': 'false',
        'nsIndexType' : 'eq',
    })
    topology_st.standalone.stop()
    assert topology_st.standalone.db2index(DEFAULT_BENAME, attrs=['modifytimestamp'] )
    topology_st.standalone.start()

    # Now run the modifyTimestamp range query again. Assert that there is no
    # notes=U/A in the log
    results = topology_st.standalone.search_s(DEFAULT_SUFFIX, ldap.SCOPE_SUBTREE, '(modifyTimestamp>=0)', ['nsUniqueId',])
    access_lines_indexed = topology_st.standalone.ds_access_log.match('.*notes=U.*')
    # Remove the old lines too.
    access_lines_final = set(access_lines_unindexed) - set(access_lines_indexed)
    # Make sure we have no unindexed notes in the log.
    assert len(access_lines_final) == 0