torture3: Add tdb-validate test
authorVolker Lendecke <vl@samba.org>
Wed, 29 Mar 2023 13:07:19 +0000 (09:07 -0400)
committerRalph Boehme <slow@samba.org>
Sat, 1 Apr 2023 05:25:28 +0000 (05:25 +0000)
Bug: https://bugzilla.samba.org/show_bug.cgi?id=14789
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
selftest/knownfail.d/tdb-validate [new file with mode: 0644]
source3/selftest/tests.py
source3/torture/proto.h
source3/torture/test_tdb_validate.c [new file with mode: 0644]
source3/torture/torture.c
source3/torture/wscript_build

diff --git a/selftest/knownfail.d/tdb-validate b/selftest/knownfail.d/tdb-validate
new file mode 100644 (file)
index 0000000..bde5821
--- /dev/null
@@ -0,0 +1 @@
+samba3.smbtorture_s3.LOCAL-TDB-VALIDATE.smbtorture
index 31112d4be9faac6b7e582037967b11fac1dd988e..47234896ed6d4178b0860415764254ca6aed8241 100755 (executable)
@@ -503,6 +503,7 @@ local_tests = [
     "LOCAL-G-LOCK8",
     "LOCAL-NAMEMAP-CACHE1",
     "LOCAL-IDMAP-CACHE1",
+    "LOCAL-TDB-VALIDATE",
     "LOCAL-hex_encode_buf",
     "LOCAL-remove_duplicate_addrs2"]
 
index 5e6d914c3da965867c1f4b7b70bfb9326041b402..a67a771ef4552dd58730641d68c50c23d6be8317 100644 (file)
@@ -176,5 +176,6 @@ bool run_hidenewfiles_showdirs(int dummy);
 bool run_readdir_timestamp(int dummy);
 bool run_ctdbd_conn1(int dummy);
 bool run_rpc_scale(int dummy);
+bool run_tdb_validate(int dummy);
 
 #endif /* __TORTURE_H__ */
diff --git a/source3/torture/test_tdb_validate.c b/source3/torture/test_tdb_validate.c
new file mode 100644 (file)
index 0000000..4768512
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Unix SMB/CIFS implementation.
+ *
+ * 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/>.
+ */
+
+#include "source3/include/includes.h"
+#include <tdb.h>
+#include "source3/torture/proto.h"
+#include "source3/lib/tdb_validate.h"
+
+static int validate_fn(struct tdb_context *tdb, TDB_DATA key, TDB_DATA value,
+                      void *private_data)
+{
+       struct tdb_validation_status *state = private_data;
+       state->success = false;
+       printf("validate_fn called\n");
+       return -1;
+}
+
+bool run_tdb_validate(int dummy)
+{
+       const char tdb_name[] = "tdb_validate.tdb";
+       bool result = false;
+       struct tdb_context *tdb = NULL;
+       char buf[] = "data";
+       TDB_DATA data = { .dptr = (uint8_t *)buf, .dsize = sizeof(buf), };
+       int ret;
+
+       unlink(tdb_name);
+
+       tdb = tdb_open(tdb_name, 0, 0, O_CREAT|O_EXCL|O_RDWR, 0600);
+       if (tdb == NULL) {
+               perror("Could not open tdb");
+               goto done;
+       }
+
+       ret = tdb_store(tdb, data, data, 0);
+       if (ret == -1) {
+               perror("tdb_store failed");
+               goto done;
+       }
+
+       ret = tdb_validate(tdb, validate_fn);
+       if (ret == 0) {
+               fprintf(stderr,
+                       "tdb_validate succeeded where it should have "
+                       "failed\n");
+               goto done;
+       }
+
+       result = true;
+done:
+       tdb_close(tdb);
+       unlink(tdb_name);
+       return result;
+}
index c63db3f9385f3d569237639a6f7e9be52f58d340..a2db49ea45ff0944da486f7dad9796086d1c9020 100644 (file)
@@ -15635,6 +15635,10 @@ static struct {
                .name  = "rpc-scale",
                .fn    = run_rpc_scale,
        },
+       {
+               .name  = "LOCAL-TDB-VALIDATE",
+               .fn    = run_tdb_validate,
+       },
        {
                .name = NULL,
        },
index 1df5d88cd316c207a4d0978b0842902b2d61884a..1d2520099e3553d5bbef712c6fc09d035ceec631 100644 (file)
@@ -59,6 +59,7 @@ bld.SAMBA3_BINARY('smbtorture' + bld.env.suffix3,
                         test_hidenewfiles.c
                         test_readdir_timestamp.c
                         test_rpc_scale.c
+                        test_tdb_validate.c
                         ''' + TORTURE3_ADDITIONAL_SOURCE,
                  deps='''
                       talloc
@@ -75,6 +76,7 @@ bld.SAMBA3_BINARY('smbtorture' + bld.env.suffix3,
                       libcli_lsa3
                       samba-cluster-support
                       util_sd
+                      TDB_VALIDATE
                       ''',
                  cflags='-DWINBINDD_SOCKET_DIR=\"%s\"' % bld.env.WINBINDD_SOCKET_DIR,
                  for_selftest=True)