diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2013-12-01 23:20:36 +0000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2013-12-06 05:21:03 +0100 |
commit | 43c021512cab2469b5ef6bb5074ee3f3b9da42a0 (patch) | |
tree | d672a75f76669afffd5a61c79ef3faf28d4fb262 /lib | |
parent | 9a67bfa834856cce0f2ce974e0189123c55095ed (diff) | |
download | samba-43c021512cab2469b5ef6bb5074ee3f3b9da42a0.tar.gz samba-43c021512cab2469b5ef6bb5074ee3f3b9da42a0.tar.xz samba-43c021512cab2469b5ef6bb5074ee3f3b9da42a0.zip |
pyntdb: Add tests for Python API.
Signed-off-by: Jelmer Vernooij <jelmer@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ntdb/test/python-api.py | 154 | ||||
-rw-r--r-- | lib/ntdb/wscript | 4 |
2 files changed, 156 insertions, 2 deletions
diff --git a/lib/ntdb/test/python-api.py b/lib/ntdb/test/python-api.py new file mode 100644 index 00000000000..b728ad0286b --- /dev/null +++ b/lib/ntdb/test/python-api.py @@ -0,0 +1,154 @@ +#!/usr/bin/env python +# Some simple tests for the Python bindings for TDB +# Note that this tests the interface of the Python bindings +# It does not test tdb itself. +# +# Copyright (C) 2007-2013 Jelmer Vernooij <jelmer@samba.org> +# Published under the GNU LGPLv3 or later + +import ntdb +from unittest import TestCase +import os, tempfile + + +class OpenTdbTests(TestCase): + + def test_nonexistent_read(self): + self.assertRaises(IOError, ntdb.Ntdb, "/some/nonexistent/file", 0, + ntdb.DEFAULT, os.O_RDWR) + +class CloseTdbTests(TestCase): + + def test_double_close(self): + self.ntdb = ntdb.Ntdb(tempfile.mkstemp()[1], ntdb.DEFAULT, + os.O_CREAT|os.O_RDWR) + self.assertNotEqual(None, self.ntdb) + + # ensure that double close does not crash python + self.ntdb.close() + self.ntdb.close() + + # Check that further operations do not crash python + self.assertRaises(RuntimeError, lambda: self.ntdb.transaction_start()) + + self.assertRaises(RuntimeError, lambda: self.ntdb["bar"]) + + +class InternalTdbTests(TestCase): + + def test_repr(self): + self.ntdb = ntdb.Ntdb() + + # repr used to crash on internal db + self.assertEquals(repr(self.ntdb), "Ntdb(<internal>)") + + +class SimpleTdbTests(TestCase): + + def setUp(self): + super(SimpleTdbTests, self).setUp() + self.ntdb = ntdb.Ntdb(tempfile.mkstemp()[1], ntdb.DEFAULT, + os.O_CREAT|os.O_RDWR) + self.assertNotEqual(None, self.ntdb) + + def tearDown(self): + del self.ntdb + + def test_repr(self): + self.assertTrue(repr(self.ntdb).startswith("Ntdb('")) + + def test_lockall(self): + self.ntdb.lock_all() + + def test_unlockall(self): + self.ntdb.lock_all() + self.ntdb.unlock_all() + + def test_lockall_read(self): + self.ntdb.read_lock_all() + self.ntdb.read_unlock_all() + + def test_store(self): + self.ntdb.store("bar", "bla") + self.assertEquals("bla", self.ntdb.get("bar")) + + def test_getitem(self): + self.ntdb["bar"] = "foo" + self.assertEquals("foo", self.ntdb["bar"]) + + def test_delete(self): + self.ntdb["bar"] = "foo" + del self.ntdb["bar"] + self.assertRaises(KeyError, lambda: self.ntdb["bar"]) + + def test_contains(self): + self.ntdb["bla"] = "bloe" + self.assertTrue("bla" in self.ntdb) + + def test_keyerror(self): + self.assertRaises(KeyError, lambda: self.ntdb["bla"]) + + def test_name(self): + self.ntdb.filename + + def test_iterator(self): + self.ntdb["bla"] = "1" + self.ntdb["brainslug"] = "2" + l = list(self.ntdb) + l.sort() + self.assertEquals(["bla", "brainslug"], l) + + def test_transaction_cancel(self): + self.ntdb["bloe"] = "2" + self.ntdb.transaction_start() + self.ntdb["bloe"] = "1" + self.ntdb.transaction_cancel() + self.assertEquals("2", self.ntdb["bloe"]) + + def test_transaction_commit(self): + self.ntdb["bloe"] = "2" + self.ntdb.transaction_start() + self.ntdb["bloe"] = "1" + self.ntdb.transaction_commit() + self.assertEquals("1", self.ntdb["bloe"]) + + def test_transaction_prepare_commit(self): + self.ntdb["bloe"] = "2" + self.ntdb.transaction_start() + self.ntdb["bloe"] = "1" + self.ntdb.transaction_prepare_commit() + self.ntdb.transaction_commit() + self.assertEquals("1", self.ntdb["bloe"]) + + def test_iterkeys(self): + self.ntdb["bloe"] = "2" + self.ntdb["bla"] = "25" + i = self.ntdb.iterkeys() + self.assertEquals(set(["bloe", "bla"]), set([i.next(), i.next()])) + + def test_clear(self): + self.ntdb["bloe"] = "2" + self.ntdb["bla"] = "25" + self.assertEquals(2, len(list(self.ntdb))) + self.ntdb.clear() + self.assertEquals(0, len(list(self.ntdb))) + + def test_len(self): + self.assertEquals(0, len(list(self.ntdb))) + self.ntdb["entry"] = "value" + self.assertEquals(1, len(list(self.ntdb))) + + def test_add_flags(self): + self.ntdb.add_flag(ntdb.NOMMAP) + self.ntdb.remove_flag(ntdb.NOMMAP) + + +class VersionTests(TestCase): + + def test_present(self): + self.assertTrue(isinstance(ntdb.__version__, str)) + + +if __name__ == '__main__': + import unittest + unittest.TestProgram() diff --git a/lib/ntdb/wscript b/lib/ntdb/wscript index d4828b02fb0..2513e5cf1c3 100644 --- a/lib/ntdb/wscript +++ b/lib/ntdb/wscript @@ -257,13 +257,13 @@ def testonly(ctx): if not env.disable_python: for f in env.NTDB_TEST_API_PY: print("..." + f) - cmd = "cd " + testdir + " && PYTHONPATH=%s %s %s" % ( + cmd = "cd " + testdir + " && PYTHONPATH=%s %s %s > test-output 2>&1" % ( os.path.abspath(os.path.join(Utils.g_module.blddir, "python")), env["PYTHON"], os.path.abspath(f)) - print cmd 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 |