summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2012-02-22 17:21:04 +1030
committerAmitay Isaacs <amitay@gmail.com>2012-03-07 13:16:16 +1100
commit74d522237e6fc63e1e9331c82c04a809b3df3a65 (patch)
tree70bdbd0d868caaa03299a4b3883319699bb6a814
parent9d897b0951e73a4717ae133d5b6b2493334fbf22 (diff)
downloadsamba-74d522237e6fc63e1e9331c82c04a809b3df3a65.tar.gz
samba-74d522237e6fc63e1e9331c82c04a809b3df3a65.tar.xz
samba-74d522237e6fc63e1e9331c82c04a809b3df3a65.zip
lib/tdb2: wire up unit tests.
The tests are ccan-style, so the names tell how to link them. This logic is generic, and could be moved to wafsamba, cleaned up, and used elsewhere. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-rw-r--r--lib/tdb2/Makefile1
-rw-r--r--lib/tdb2/wscript81
2 files changed, 81 insertions, 1 deletions
diff --git a/lib/tdb2/Makefile b/lib/tdb2/Makefile
index fe44ff6b569..ddd439d5037 100644
--- a/lib/tdb2/Makefile
+++ b/lib/tdb2/Makefile
@@ -45,6 +45,7 @@ everything: all
testsuite: all
+.PHONY: check
check: test
torture: all
diff --git a/lib/tdb2/wscript b/lib/tdb2/wscript
index 28fda3f97da..00b6b576313 100644
--- a/lib/tdb2/wscript
+++ b/lib/tdb2/wscript
@@ -13,7 +13,7 @@ while not os.path.exists(srcdir+'/buildtools') and len(srcdir.split('/')) < 5:
srcdir = '../' + srcdir
sys.path.insert(0, srcdir + '/buildtools/wafsamba')
-import wafsamba, samba_dist, Options, Logs
+import wafsamba, samba_dist, Options, Logs, glob
samba_dist.DIST_DIRS('lib/tdb2:. lib/replace:lib/replace lib/ccan:lib/ccan buildtools:buildtools')
@@ -63,6 +63,18 @@ def configure(conf):
conf.SAMBA_CONFIG_H()
+ # Seems like env can't contain sets?
+ conf.env.tdb2_test = {}
+ conf.env.tdb2_test['run'] = glob.glob('test/run*.c')
+ conf.env.tdb2_test['api'] = glob.glob('test/api*.c')
+ conf.env.tdb2_test['runhelper'] = glob.glob('test/helprun*.c')
+ conf.env.tdb2_test['apihelper'] = glob.glob('test/helpapi*.c')
+ conf.env.tdb2_test['helper'] = list(set(glob.glob('test/*.c'))
+ - set(conf.env.tdb2_test['run'])
+ - set(conf.env.tdb2_test['api'])
+ - set(conf.env.tdb2_test['runhelper'])
+ - set(conf.env.tdb2_test['apihelper']))
+
def build(bld):
if bld.env.BUILD_TDB2:
bld.RECURSE('lib/replace')
@@ -116,6 +128,33 @@ def build(bld):
'tools/tdb2backup.c',
deps='tdb')
+ # FIXME: We need CCAN for some API tests, but waf thinks it's
+ # already available via tdb. It is, but not publicly.
+ # Workaround is to build a private, non-hiding version.
+ bld.SAMBA_SUBSYSTEM('tdb-testing',
+ SRC,
+ deps='replace ccan',
+ includes='.')
+
+ bld.SAMBA_SUBSYSTEM('tdb2-test-helpers',
+ bld.env.tdb2_test['helper'], deps='replace')
+ bld.SAMBA_SUBSYSTEM('tdb2-run-helpers',
+ bld.env.tdb2_test['runhelper'], deps='replace')
+ bld.SAMBA_SUBSYSTEM('tdb2-api-helpers',
+ bld.env.tdb2_test['apihelper'], deps='replace tdb-testing')
+
+ for f in bld.env.tdb2_test['run']:
+ base = os.path.splitext(os.path.basename(f))[0]
+ bld.SAMBA_BINARY('tdb2-' + base, f,
+ deps='ccan replace tdb2-test-helpers tdb2-run-helpers',
+ install=False)
+
+ for f in bld.env.tdb2_test['api']:
+ base = os.path.splitext(os.path.basename(f))[0]
+ bld.SAMBA_BINARY('tdb2-' + base, f,
+ deps='ccan replace tdb2-test-helpers tdb2-api-helpers',
+ install=False)
+
if not bld.CONFIG_SET('USING_SYSTEM_PYTDB'):
bld.SAMBA_PYTHON('pytdb',
source='pytdb.c',
@@ -124,6 +163,46 @@ def build(bld):
realname='tdb.so',
cflags='-DPACKAGE_VERSION=\"%s\"' % VERSION)
+def testonly(ctx):
+ '''run tdb2 testsuite'''
+ import Utils, samba_utils, shutil
+ ecode = 0;
+
+ env = samba_utils.LOAD_ENVIRONMENT()
+
+ if env.BUILD_TDB2 and env.standalone_tdb2:
+ # FIXME: This is horrible :(
+ test_prefix = "%s/st" % (Utils.g_module.blddir)
+ shutil.rmtree(test_prefix, ignore_errors=True)
+ os.makedirs(test_prefix)
+
+ # Create scratch directory for tests.
+ testdir = os.path.join(test_prefix, 'tdb2-tests')
+ samba_utils.mkdir_p(testdir)
+ # Symlink back to source dir so it can find tests in test/
+ link = os.path.join(testdir, 'test')
+ if not os.path.exists(link):
+ os.symlink(os.path.abspath(os.path.join(env.cwd, 'test')), link)
+ for f in env.tdb2_test['run'] + env.tdb2_test['api']:
+ name = "tdb2-" + os.path.splitext(os.path.basename(f))[0]
+ cmd = "cd " + testdir + " && " + os.path.abspath(os.path.join(Utils.g_module.blddir, name)) + " > test-output 2>&1"
+ print("..." + f)
+ ret = samba_utils.RUN_COMMAND(cmd)
+ if ret != 0:
+ print("%s (%s) failed:" % (name, f))
+ samba_utils.RUN_COMMAND("cat " + os.path.join(testdir, 'test-output'))
+ ecode = ret;
+ break;
+
+ sys.exit(ecode)
+
+# WAF doesn't build the unit tests for this, maybe because they don't link with tdb?
+# This forces it
+def test(ctx):
+ import Scripting
+ Scripting.commands.append('build')
+ Scripting.commands.append('testonly')
+
def dist():
'''makes a tarball for distribution'''
samba_dist.dist()