Skip to content

Commit 89639dd

Browse files
committed
Tests commands
1 parent 64871f3 commit 89639dd

File tree

2 files changed

+69
-21
lines changed

2 files changed

+69
-21
lines changed

slapd/__init__.py

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -162,17 +162,17 @@ def __init__(
162162
self.suffix = suffix
163163
self.root_cn = root_cn
164164
self.root_pw = root_pw
165-
self.local_host = "127.0.0.1"
165+
self.hostname = "127.0.0.1"
166166

167167
self._proc = None
168-
self._port = port or self._avail_tcp_port()
169-
self.server_id = self._port % 4096
168+
self.port = port or self._avail_tcpport()
169+
self.server_id = self.port % 4096
170170
self.testrundir = os.path.join(
171-
self.TMPDIR, "%s-%d" % (datadir_prefix or "python-ldap-test", self._port)
171+
self.TMPDIR, "%s-%d" % (datadir_prefix or "python-ldap-test", self.port)
172172
)
173173
self._slapd_conf = os.path.join(self.testrundir, "slapd.d")
174174
self._db_directory = os.path.join(self.testrundir, "openldap-data")
175-
self.ldap_uri = "ldap://%s:%d/" % (host or self.local_host, self._port)
175+
self.ldap_uri = "ldap://%s:%d/" % (host or self.hostname, self.port)
176176
self.debug = debug
177177
have_ldapi = hasattr(socket, "AF_UNIX")
178178
if have_ldapi:
@@ -209,14 +209,6 @@ def __exit__(self, exc_type, exc_value, traceback):
209209
def root_dn(self):
210210
return "cn={self.root_cn},{self.suffix}".format(self=self)
211211

212-
@property
213-
def hostname(self):
214-
return self.local_host
215-
216-
@property
217-
def port(self):
218-
return self._port
219-
220212
def _find_commands(self):
221213
self.PATH_LDAPADD = self._find_command("ldapadd")
222214
self.PATH_LDAPDELETE = self._find_command("ldapdelete")
@@ -275,13 +267,13 @@ def _cleanup_rundir(self):
275267
os.rmdir(self.testrundir)
276268
self.logger.info("cleaned-up %s", self.testrundir)
277269

278-
def _avail_tcp_port(self):
270+
def _avail_tcpport(self):
279271
"""
280272
find an available port for TCP connection
281273
"""
282274
sock = socket.socket()
283275
try:
284-
sock.bind((self.local_host, 0))
276+
sock.bind((self.hostname, 0))
285277
port = sock.getsockname()[1]
286278
finally:
287279
sock.close()
@@ -367,20 +359,20 @@ def _start_slapd(self):
367359
self.logger.info("starting slapd: %r", " ".join(slapd_args))
368360
self._proc = subprocess.Popen(slapd_args)
369361
deadline = time.monotonic() + 10
370-
while True: # pragma: no cover
371-
if self._proc.poll() is not None:
362+
while True:
363+
if self._proc.poll() is not None: # pragma: no cover
372364
self._stopped()
373365
raise RuntimeError("slapd exited before opening port")
374366
try:
375367
self.logger.debug("slapd connection check to %s", self.default_ldap_uri)
376368
self.ldapwhoami()
377369
except RuntimeError:
378-
if time.monotonic() >= deadline:
370+
if time.monotonic() >= deadline: # pragma: no cover
379371
break
380372
time.sleep(0.2)
381373
else:
382374
return
383-
raise RuntimeError("slapd did not start properly")
375+
raise RuntimeError("slapd did not start properly") # pragma: no cover
384376

385377
def start(self):
386378
"""
@@ -390,7 +382,6 @@ def start(self):
390382
if self._proc is not None:
391383
return
392384

393-
# prepare directory structure
394385
atexit.register(self.stop)
395386
self._cleanup_rundir()
396387
self.setup_rundir()
@@ -455,7 +446,7 @@ def _cli_auth_args(self):
455446

456447
def _cli_popen(
457448
self, ldapcommand, extra_args=None, ldap_uri=None, stdin_data=None
458-
): # pragma: no cover
449+
):
459450
if ldap_uri is None:
460451
ldap_uri = self.default_ldap_uri
461452

tests/test_slapdobject.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
import slapd
22

33

4+
def test_nominal_case():
5+
server = slapd.Slapd()
6+
server.start()
7+
server.restart()
8+
server.stop()
9+
10+
411
def test_context_manager():
512
with slapd.Slapd() as server:
613
assert server._proc is not None
714
assert server._proc is None
15+
server.stop()
816

917

1018
def test_context_manager_after_start():
@@ -14,3 +22,52 @@ def test_context_manager_after_start():
1422
with server:
1523
assert server._proc is not None
1624
assert server._proc is None
25+
server.stop()
26+
27+
28+
def test_commands():
29+
server = slapd.Slapd()
30+
server.start()
31+
assert (
32+
"dn:cn=manager,dc=slapd-test,dc=python-ldap,dc=org\n"
33+
== server.ldapwhoami().stdout.decode("utf-8")
34+
)
35+
ldif = (
36+
"dn: dc=slapd-test,dc=python-ldap,dc=org\n"
37+
"objectClass: dcObject\n"
38+
"objectClass: organization\n"
39+
"dc: slapd-test\n"
40+
"o: slapd-test\n"
41+
"\n"
42+
"dn: cn=Manager,dc=slapd-test,dc=python-ldap,dc=org\n"
43+
"objectClass: applicationProcess\n"
44+
"cn: Manager\n"
45+
"\n"
46+
"dn: ou=home,dc=slapd-test,dc=python-ldap,dc=org\n"
47+
"objectClass: organizationalUnit\n"
48+
"ou: home\n"
49+
)
50+
server.ldapadd(ldif)
51+
52+
assert (
53+
"dn: ou=home,dc=slapd-test,dc=python-ldap,dc=org"
54+
in server.slapcat().stdout.decode("utf-8")
55+
)
56+
57+
ldif = (
58+
"dn: ou=home,dc=slapd-test,dc=python-ldap,dc=org\n"
59+
"changetype: modify\n"
60+
"add: description\n"
61+
"description: foobar\n"
62+
)
63+
server.ldapmodify(ldif)
64+
65+
assert "foobar" in server.slapcat().stdout.decode("utf-8")
66+
67+
server.ldapdelete("ou=home,dc=slapd-test,dc=python-ldap,dc=org", True)
68+
assert (
69+
"dn: ou=home,dc=slapd-test,dc=python-ldap,dc=org"
70+
not in server.slapcat().stdout.decode("utf-8")
71+
)
72+
73+
server.stop()

0 commit comments

Comments
 (0)