test: Tool to build DB with specific version and features
authorAustin Clements <amdragon@mit.edu>
Mon, 25 Aug 2014 17:26:01 +0000 (13:26 -0400)
committerDavid Bremner <david@tethera.net>
Sat, 30 Aug 2014 17:43:46 +0000 (10:43 -0700)
This will let us test basic version and feature handling.

test/.gitignore
test/Makefile.local
test/make-db-version.cc [new file with mode: 0644]

index b3b706d851886f76b4a119363b98f4bb240f4093..0f7d5bfcbf3278d7d7dfe051f39a777fe8f018fb 100644 (file)
@@ -5,5 +5,6 @@ parse-time
 random-corpus
 smtp-dummy
 symbol-test
+make-db-version
 test-results
 tmp.*
index 916dd0bd6d347e51bf011fe23165e60576c2d91c..a2d58fc1a1b0f01677498afa8676549acecc9d1e 100644 (file)
@@ -35,6 +35,9 @@ $(dir)/symbol-test: $(dir)/symbol-test.o lib/$(LINKER_NAME)
 $(dir)/parse-time: $(dir)/parse-time.o parse-time-string/parse-time-string.o
        $(call quiet,CC) $^ -o $@
 
+$(dir)/make-db-version: $(dir)/make-db-version.o
+       $(call quiet,CXX) $^ -o $@ $(XAPIAN_LDFLAGS)
+
 .PHONY: test check
 
 test_main_srcs=$(dir)/arg-test.c \
@@ -43,6 +46,7 @@ test_main_srcs=$(dir)/arg-test.c \
              $(dir)/parse-time.c \
              $(dir)/smtp-dummy.c \
              $(dir)/symbol-test.cc \
+             $(dir)/make-db-version.cc \
 
 test_srcs=$(test_main_srcs) $(dir)/database-test.c
 
diff --git a/test/make-db-version.cc b/test/make-db-version.cc
new file mode 100644 (file)
index 0000000..fa80cac
--- /dev/null
@@ -0,0 +1,35 @@
+/* Create an empty notmuch database with a specific version and
+ * features. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <xapian.h>
+
+int main(int argc, char **argv)
+{
+    if (argc != 4) {
+       fprintf (stderr, "Usage: %s mailpath version features\n", argv[0]);
+       exit (2);
+    }
+
+    std::string nmpath (argv[1]);
+    nmpath += "/.notmuch";
+    if (mkdir (nmpath.c_str (), 0777) < 0) {
+       perror (("failed to create " + nmpath).c_str ());
+       exit (1);
+    }
+
+    try {
+       Xapian::WritableDatabase db (
+           nmpath + "/xapian", Xapian::DB_CREATE_OR_OPEN);
+       db.set_metadata ("version", argv[2]);
+       db.set_metadata ("features", argv[3]);
+       db.commit ();
+    } catch (const Xapian::Error &e) {
+       fprintf (stderr, "%s\n", e.get_description ().c_str ());
+       exit (1);
+    }
+}