]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
ldb: test for parse errors
authorAaron Haslett <aaronhaslett@catalyst.net.nz>
Tue, 28 May 2019 05:22:10 +0000 (17:22 +1200)
committerKarolin Seeger <kseeger@samba.org>
Wed, 28 Aug 2019 07:36:29 +0000 (07:36 +0000)
Parse errors aren't passed up correctly by the tdb backend. This
patch modifies a test to expose the issue, next patch will fix it.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13959

Signed-off-by: Aaron Haslett <aaronhaslett@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
(cherry picked from commit 2de0aebed60b8e83508f50e5391ede618ce0e595)

lib/ldb/tests/ldb_kv_ops_test.c

index 30ce019fac8d5fe88f2143e64208f49f7b3f8e6a..4183f65bc5738fc636ea0627b710e6d71a5deb01 100644 (file)
@@ -201,6 +201,17 @@ static int parse(struct ldb_val key,
        return LDB_SUCCESS;
 }
 
+/*
+ * Parse function that just returns the int we pass it.
+ */
+static int parse_return(struct ldb_val key,
+                       struct ldb_val data,
+                       void *private_data)
+{
+       int *rcode = private_data;
+       return *rcode;
+}
+
 /*
  * Test that data can be written to the kv store and be read back.
  */
@@ -223,6 +234,7 @@ static void test_add_get(void **state)
        };
 
        struct ldb_val read;
+       int rcode;
 
        int flags = 0;
        TALLOC_CTX *tmp_ctx;
@@ -260,6 +272,17 @@ static void test_add_get(void **state)
        assert_int_equal(sizeof(value), read.length);
        assert_memory_equal(value, read.data, sizeof(value));
 
+       /*
+        * Now check that the error code we return in the
+        * parse function is returned by fetch_and_parse.
+        */
+       for (rcode=0; rcode<50; rcode++) {
+               ret = ltdb->kv_ops->fetch_and_parse(ltdb, key,
+                                                   parse_return,
+                                                   &rcode);
+               assert_int_equal(ret, rcode);
+       }
+
        ret = ltdb->kv_ops->unlock_read(test_ctx->ldb->modules);
        assert_int_equal(ret, 0);
        talloc_free(tmp_ctx);