Skip to content

Commit 2a6bcd4

Browse files
authored
Merge pull request #198 – Make SlapdObject a context manager
#198
2 parents e5492c7 + ca705aa commit 2a6bcd4

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

Lib/slapdtest/_slapdtest.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,14 @@ class SlapdObject(object):
164164
165165
When a reference to an instance of this class is lost, the slapd
166166
server is shut down.
167+
168+
An instance can be used as a context manager. When exiting the context
169+
manager, the slapd server is shut down and the temporary data store is
170+
removed.
171+
172+
.. versionchanged:: 3.1
173+
174+
Added context manager functionality
167175
"""
168176
slapd_conf_template = SLAPD_CONF_TEMPLATE
169177
database = 'mdb'
@@ -553,6 +561,13 @@ def ldapdelete(self, dn, recursive=False, extra_args=None):
553561
extra_args.append(dn)
554562
self._cli_popen(self.PATH_LDAPDELETE, extra_args=extra_args)
555563

564+
def __enter__(self):
565+
self.start()
566+
return self
567+
568+
def __exit__(self, exc_type, exc_value, traceback):
569+
self.stop()
570+
556571

557572
class SlapdTestCase(unittest.TestCase):
558573
"""

Tests/t_slapdobject.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import unittest
2+
3+
import slapdtest
4+
5+
6+
class TestSlapdObject(unittest.TestCase):
7+
def test_context_manager(self):
8+
with slapdtest.SlapdObject() as server:
9+
self.assertIsNotNone(server._proc)
10+
self.assertIsNone(server._proc)
11+
12+
def test_context_manager_after_start(self):
13+
server = slapdtest.SlapdObject()
14+
server.start()
15+
self.assertIsNotNone(server._proc)
16+
with server:
17+
self.assertIsNotNone(server._proc)
18+
self.assertIsNone(server._proc)

0 commit comments

Comments
 (0)