1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-27 14:04:05 +03:00
Andrew Bartlett b8d0602e59 selftest: Rework samba.dsdb locking test to samba.dsdb_lock
This avoids running the test while samba is modifying and locking the same database,
as this can lead to a deadlock.

The deadlock is not seen in production as the LDB read lock is not held while
waiting for another process, but this test needs to do this to demonstrate
the locking safety.

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>

Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Fri Dec  8 21:47:55 CET 2017 on sn-devel-144
2017-12-08 21:47:55 +01:00

66 lines
2.3 KiB
Python

# Unix SMB/CIFS implementation. Tests for SamDB
# Copyright (C) Jelmer Vernooij <jelmer@samba.org> 2008
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
"""Tests for samba.samdb."""
import logging
import os
import uuid
import shutil
from samba.auth import system_session
from samba.provision import provision
from samba.tests import TestCaseInTempDir
from samba.dsdb import DS_DOMAIN_FUNCTION_2008_R2
class SamDBTestCase(TestCaseInTempDir):
"""Base-class for tests with a Sam Database.
This is used by the Samba SamDB-tests, but e.g. also by the OpenChange
provisioning tests (which need a Sam).
"""
def setUp(self):
super(SamDBTestCase, self).setUp()
self.session = system_session()
logger = logging.getLogger("selftest")
domain = "dsdb"
realm = "dsdb.samba.example.com"
host_name = "test"
server_role = "active directory domain controller"
dns_backend = "SAMBA_INTERNAL"
self.result = provision(logger,
self.session, targetdir=self.tempdir,
realm=realm, domain=domain,
hostname=host_name,
use_ntvfs=True,
serverrole=server_role,
dns_backend="SAMBA_INTERNAL",
dom_for_fun_level=DS_DOMAIN_FUNCTION_2008_R2)
self.samdb = self.result.samdb
self.lp = self.result.lp
def tearDown(self):
for f in ['names.tdb']:
os.remove(os.path.join(self.tempdir, f))
for d in ['etc', 'msg.lock', 'private', 'state']:
shutil.rmtree(os.path.join(self.tempdir, d))
super(SamDBTestCase, self).tearDown()