]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ldb: Add tests for Python set_opaque() and get_opaque()
authorJo Sutton <josutton@catalyst.net.nz>
Fri, 1 Mar 2024 03:06:49 +0000 (16:06 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Sun, 3 Mar 2024 22:33:35 +0000 (22:33 +0000)
Signed-off-by: Jo Sutton <josutton@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
lib/ldb/tests/python/api.py
selftest/knownfail.d/pyldb-opaque [new file with mode: 0644]

index e38f9dc37a163dd0889a9e67f1be32b1ce8150ed..eff4fccbbae65f7620400b0becef8065363618fa 100755 (executable)
@@ -175,6 +175,74 @@ class SimpleLdb(LdbBaseTest):
         self.assertTrue(l.get_opaque("my_opaque") is not None)
         self.assertEqual(None, l.get_opaque("unknown"))
 
+    def test_opaque_bool(self):
+        """Test that we can set boolean opaque values."""
+
+        db = ldb.Ldb(self.url(), flags=self.flags())
+        name = "my_opaque"
+
+        db.set_opaque(name, False)
+        self.assertEqual(False, db.get_opaque(name))
+
+        db.set_opaque(name, True)
+        self.assertEqual(True, db.get_opaque(name))
+
+    def test_opaque_int(self):
+        """Test that we can set (positive) integer opaque values."""
+
+        db = ldb.Ldb(self.url(), flags=self.flags())
+        name = "my_opaque"
+
+        db.set_opaque(name, 0)
+        self.assertEqual(0, db.get_opaque(name))
+
+        db.set_opaque(name, 12345678)
+        self.assertEqual(12345678, db.get_opaque(name))
+
+        # Negative values can’t be set.
+        self.assertRaises(OverflowError, db.set_opaque, name, -99999)
+
+    def test_opaque_string(self):
+        """Test that we can set string opaque values."""
+
+        db = ldb.Ldb(self.url(), flags=self.flags())
+        name = "my_opaque"
+
+        db.set_opaque(name, "")
+        self.assertEqual("", db.get_opaque(name))
+
+        db.set_opaque(name, "foo bar")
+        self.assertEqual("foo bar", db.get_opaque(name))
+
+    def test_opaque_none(self):
+        """Test that we can set an opaque to None to effectively unset it."""
+
+        db = ldb.Ldb(self.url(), flags=self.flags())
+        name = "my_opaque"
+
+        # An opaque that has not been set is the same as None.
+        self.assertIsNone(db.get_opaque(name))
+
+        # Give the opaque a value.
+        db.set_opaque(name, 3)
+        self.assertEqual(3, db.get_opaque(name))
+
+        # Test that we can set the opaque to None to unset it.
+        db.set_opaque(name, None)
+        self.assertIsNone(db.get_opaque(name))
+
+    def test_opaque_unsupported(self):
+        """Test that trying to set unsupported values raises an error."""
+
+        db = ldb.Ldb(self.url(), flags=self.flags())
+        name = "my_opaque"
+
+        self.assertRaises(ValueError, db.set_opaque, name, [])
+        self.assertRaises(ValueError, db.set_opaque, name, ())
+        self.assertRaises(ValueError, db.set_opaque, name, 3.14)
+        self.assertRaises(ValueError, db.set_opaque, name, 3+2j)
+        self.assertRaises(ValueError, db.set_opaque, name, b'foo')
+
     def test_search_scope_base_empty_db(self):
         l = ldb.Ldb(self.url(), flags=self.flags())
         self.assertEqual(len(l.search(ldb.Dn(l, "dc=foo1"),
diff --git a/selftest/knownfail.d/pyldb-opaque b/selftest/knownfail.d/pyldb-opaque
new file mode 100644 (file)
index 0000000..b42afac
--- /dev/null
@@ -0,0 +1,10 @@
+^ldb\.python\.api\.SimpleLdb\.test_opaque_bool\(none\)$
+^ldb\.python\.api\.SimpleLdb\.test_opaque_int\(none\)$
+^ldb\.python\.api\.SimpleLdb\.test_opaque_none\(none\)$
+^ldb\.python\.api\.SimpleLdb\.test_opaque_string\(none\)$
+^ldb\.python\.api\.SimpleLdb\.test_opaque_unsupported\(none\)$
+^ldb\.python\.api\.SimpleLdbLmdb\.test_opaque_bool\(none\)$
+^ldb\.python\.api\.SimpleLdbLmdb\.test_opaque_int\(none\)$
+^ldb\.python\.api\.SimpleLdbLmdb\.test_opaque_none\(none\)$
+^ldb\.python\.api\.SimpleLdbLmdb\.test_opaque_string\(none\)$
+^ldb\.python\.api\.SimpleLdbLmdb\.test_opaque_unsupported\(none\)$