[Patch v2 04/17] test: add database routines for testing

2012-12-01 Thread Jani Nikula
On Sat, 24 Nov 2012, david at tethera.net wrote:
> From: David Bremner 
>
> Initially, provide a way to create "stub" messages in the notmuch
> database without corresponding files.  This is essentially cut and
> paste from lib/database.cc. This is a seperate file since we don't
> want to export these symbols from libnotmuch or bloat the library with
> non-exported code.
> ---
>  test/Makefile.local  |1 +
>  test/database-test.c |   71 
> ++
>  test/database-test.h |   21 +++
>  3 files changed, 93 insertions(+)
>  create mode 100644 test/database-test.c
>  create mode 100644 test/database-test.h
>
> diff --git a/test/Makefile.local b/test/Makefile.local
> index 8da4c56..8479f91 100644
> --- a/test/Makefile.local
> +++ b/test/Makefile.local
> @@ -45,5 +45,6 @@ CLEAN := $(CLEAN) $(dir)/smtp-dummy $(dir)/smtp-dummy.o \
>$(dir)/symbol-test $(dir)/symbol-test.o \
>$(dir)/arg-test $(dir)/arg-test.o \
>$(dir)/hex-xcode $(dir)/hex-xcode.o \
> +  $(dir)/database-test.o \
>$(dir)/parse-time $(dir)/parse-time.o \
>$(dir)/corpus.mail $(dir)/test-results $(dir)/tmp.*
> diff --git a/test/database-test.c b/test/database-test.c
> new file mode 100644
> index 000..739e03b
> --- /dev/null
> +++ b/test/database-test.c
> @@ -0,0 +1,71 @@
> +/*
> + * Database routines intended only for testing, not exported from
> + * library.
> + *
> + * Copyright (c) 2012 David Bremner
> + *
> + * 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/ .
> + *
> + * Author: David Bremner 
> + */
> +
> +#include "notmuch-private.h"
> +#include "database-test.h"
> +
> +notmuch_status_t
> +notmuch_database_add_stub_message (notmuch_database_t *notmuch,
> +const char *message_id,
> +const char **tags)
> +{
> +const char **tag;
> +notmuch_status_t ret;
> +notmuch_private_status_t private_status;
> +notmuch_message_t *message;
> +
> +ret = _notmuch_database_ensure_writable (notmuch);
> +if (ret)
> + return ret;
> +
> +message = _notmuch_message_create_for_message_id (notmuch,
> +   message_id,
> +   _status);
> +if (message == NULL) {
> + return COERCE_STATUS (private_status,
> +   "Unexpected status value from 
> _notmuch_message_create_for_message_id");
> +
> +}
> +
> +if (private_status != NOTMUCH_PRIVATE_STATUS_NO_DOCUMENT_FOUND)
> + return NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID;
> +
> +_notmuch_message_add_term (message, "type", "mail");
> +
> +if (tags) {
> + ret = notmuch_message_freeze (message);
> + if (ret)
> + return ret;
> +
> + for (tag = tags; *tag; tag++) {
> + ret = notmuch_message_add_tag (message, *tag);
> + if (ret)
> + return ret;
> + }
> +}
> +
> +ret = notmuch_message_thaw (message);
> +if (ret)
> + return ret;

You'll get NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW whenever tags ==
NULL. You need to move thaw within the if (tags) block.

Otherwise, looks good.

BR,
Jani.

> +
> +return NOTMUCH_STATUS_SUCCESS;
> +}
> diff --git a/test/database-test.h b/test/database-test.h
> new file mode 100644
> index 000..84f7988
> --- /dev/null
> +++ b/test/database-test.h
> @@ -0,0 +1,21 @@
> +#ifndef _DATABASE_TEST_H
> +#define _DATABASE_TEST_H
> +/* Add a new stub message to the given notmuch database.
> + *
> + * At least the following return values are possible:
> + *
> + * NOTMUCH_STATUS_SUCCESS: Message successfully added to database.
> + *
> + * NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: Message has the same message
> + *   ID as another message already in the database.
> + *
> + * NOTMUCH_STATUS_READ_ONLY_DATABASE: Database was opened in read-only
> + *   mode so no message can be added.
> + */
> +
> +notmuch_status_t
> +notmuch_database_add_stub_message (notmuch_database_t *database,
> +const char *message_id,
> +const char **tag_list);
> +
> +#endif
> -- 
> 1.7.10.4
>
> ___
> notmuch mailing list
> notmuch at notmuchmail.org
> http://notmuchmail.org/mailman/listinfo/notmuch


Re: [Patch v2 04/17] test: add database routines for testing

2012-11-30 Thread Jani Nikula
On Sat, 24 Nov 2012, da...@tethera.net wrote:
 From: David Bremner brem...@debian.org

 Initially, provide a way to create stub messages in the notmuch
 database without corresponding files.  This is essentially cut and
 paste from lib/database.cc. This is a seperate file since we don't
 want to export these symbols from libnotmuch or bloat the library with
 non-exported code.
 ---
  test/Makefile.local  |1 +
  test/database-test.c |   71 
 ++
  test/database-test.h |   21 +++
  3 files changed, 93 insertions(+)
  create mode 100644 test/database-test.c
  create mode 100644 test/database-test.h

 diff --git a/test/Makefile.local b/test/Makefile.local
 index 8da4c56..8479f91 100644
 --- a/test/Makefile.local
 +++ b/test/Makefile.local
 @@ -45,5 +45,6 @@ CLEAN := $(CLEAN) $(dir)/smtp-dummy $(dir)/smtp-dummy.o \
$(dir)/symbol-test $(dir)/symbol-test.o \
$(dir)/arg-test $(dir)/arg-test.o \
$(dir)/hex-xcode $(dir)/hex-xcode.o \
 +  $(dir)/database-test.o \
$(dir)/parse-time $(dir)/parse-time.o \
$(dir)/corpus.mail $(dir)/test-results $(dir)/tmp.*
 diff --git a/test/database-test.c b/test/database-test.c
 new file mode 100644
 index 000..739e03b
 --- /dev/null
 +++ b/test/database-test.c
 @@ -0,0 +1,71 @@
 +/*
 + * Database routines intended only for testing, not exported from
 + * library.
 + *
 + * Copyright (c) 2012 David Bremner
 + *
 + * 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/ .
 + *
 + * Author: David Bremner da...@tethera.net
 + */
 +
 +#include notmuch-private.h
 +#include database-test.h
 +
 +notmuch_status_t
 +notmuch_database_add_stub_message (notmuch_database_t *notmuch,
 +const char *message_id,
 +const char **tags)
 +{
 +const char **tag;
 +notmuch_status_t ret;
 +notmuch_private_status_t private_status;
 +notmuch_message_t *message;
 +
 +ret = _notmuch_database_ensure_writable (notmuch);
 +if (ret)
 + return ret;
 +
 +message = _notmuch_message_create_for_message_id (notmuch,
 +   message_id,
 +   private_status);
 +if (message == NULL) {
 + return COERCE_STATUS (private_status,
 +   Unexpected status value from 
 _notmuch_message_create_for_message_id);
 +
 +}
 +
 +if (private_status != NOTMUCH_PRIVATE_STATUS_NO_DOCUMENT_FOUND)
 + return NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID;
 +
 +_notmuch_message_add_term (message, type, mail);
 +
 +if (tags) {
 + ret = notmuch_message_freeze (message);
 + if (ret)
 + return ret;
 +
 + for (tag = tags; *tag; tag++) {
 + ret = notmuch_message_add_tag (message, *tag);
 + if (ret)
 + return ret;
 + }
 +}
 +
 +ret = notmuch_message_thaw (message);
 +if (ret)
 + return ret;

You'll get NOTMUCH_STATUS_UNBALANCED_FREEZE_THAW whenever tags ==
NULL. You need to move thaw within the if (tags) block.

Otherwise, looks good.

BR,
Jani.

 +
 +return NOTMUCH_STATUS_SUCCESS;
 +}
 diff --git a/test/database-test.h b/test/database-test.h
 new file mode 100644
 index 000..84f7988
 --- /dev/null
 +++ b/test/database-test.h
 @@ -0,0 +1,21 @@
 +#ifndef _DATABASE_TEST_H
 +#define _DATABASE_TEST_H
 +/* Add a new stub message to the given notmuch database.
 + *
 + * At least the following return values are possible:
 + *
 + * NOTMUCH_STATUS_SUCCESS: Message successfully added to database.
 + *
 + * NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: Message has the same message
 + *   ID as another message already in the database.
 + *
 + * NOTMUCH_STATUS_READ_ONLY_DATABASE: Database was opened in read-only
 + *   mode so no message can be added.
 + */
 +
 +notmuch_status_t
 +notmuch_database_add_stub_message (notmuch_database_t *database,
 +const char *message_id,
 +const char **tag_list);
 +
 +#endif
 -- 
 1.7.10.4

 ___
 notmuch mailing list
 notmuch@notmuchmail.org
 http://notmuchmail.org/mailman/listinfo/notmuch
___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch


[Patch v2 04/17] test: add database routines for testing

2012-11-24 Thread da...@tethera.net
From: David Bremner 

Initially, provide a way to create "stub" messages in the notmuch
database without corresponding files.  This is essentially cut and
paste from lib/database.cc. This is a seperate file since we don't
want to export these symbols from libnotmuch or bloat the library with
non-exported code.
---
 test/Makefile.local  |1 +
 test/database-test.c |   71 ++
 test/database-test.h |   21 +++
 3 files changed, 93 insertions(+)
 create mode 100644 test/database-test.c
 create mode 100644 test/database-test.h

diff --git a/test/Makefile.local b/test/Makefile.local
index 8da4c56..8479f91 100644
--- a/test/Makefile.local
+++ b/test/Makefile.local
@@ -45,5 +45,6 @@ CLEAN := $(CLEAN) $(dir)/smtp-dummy $(dir)/smtp-dummy.o \
 $(dir)/symbol-test $(dir)/symbol-test.o \
 $(dir)/arg-test $(dir)/arg-test.o \
 $(dir)/hex-xcode $(dir)/hex-xcode.o \
+$(dir)/database-test.o \
 $(dir)/parse-time $(dir)/parse-time.o \
 $(dir)/corpus.mail $(dir)/test-results $(dir)/tmp.*
diff --git a/test/database-test.c b/test/database-test.c
new file mode 100644
index 000..739e03b
--- /dev/null
+++ b/test/database-test.c
@@ -0,0 +1,71 @@
+/*
+ * Database routines intended only for testing, not exported from
+ * library.
+ *
+ * Copyright (c) 2012 David Bremner
+ *
+ * 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/ .
+ *
+ * Author: David Bremner 
+ */
+
+#include "notmuch-private.h"
+#include "database-test.h"
+
+notmuch_status_t
+notmuch_database_add_stub_message (notmuch_database_t *notmuch,
+  const char *message_id,
+  const char **tags)
+{
+const char **tag;
+notmuch_status_t ret;
+notmuch_private_status_t private_status;
+notmuch_message_t *message;
+
+ret = _notmuch_database_ensure_writable (notmuch);
+if (ret)
+   return ret;
+
+message = _notmuch_message_create_for_message_id (notmuch,
+ message_id,
+ _status);
+if (message == NULL) {
+   return COERCE_STATUS (private_status,
+ "Unexpected status value from 
_notmuch_message_create_for_message_id");
+
+}
+
+if (private_status != NOTMUCH_PRIVATE_STATUS_NO_DOCUMENT_FOUND)
+   return NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID;
+
+_notmuch_message_add_term (message, "type", "mail");
+
+if (tags) {
+   ret = notmuch_message_freeze (message);
+   if (ret)
+   return ret;
+
+   for (tag = tags; *tag; tag++) {
+   ret = notmuch_message_add_tag (message, *tag);
+   if (ret)
+   return ret;
+   }
+}
+
+ret = notmuch_message_thaw (message);
+if (ret)
+   return ret;
+
+return NOTMUCH_STATUS_SUCCESS;
+}
diff --git a/test/database-test.h b/test/database-test.h
new file mode 100644
index 000..84f7988
--- /dev/null
+++ b/test/database-test.h
@@ -0,0 +1,21 @@
+#ifndef _DATABASE_TEST_H
+#define _DATABASE_TEST_H
+/* Add a new stub message to the given notmuch database.
+ *
+ * At least the following return values are possible:
+ *
+ * NOTMUCH_STATUS_SUCCESS: Message successfully added to database.
+ *
+ * NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: Message has the same message
+ * ID as another message already in the database.
+ *
+ * NOTMUCH_STATUS_READ_ONLY_DATABASE: Database was opened in read-only
+ * mode so no message can be added.
+ */
+
+notmuch_status_t
+notmuch_database_add_stub_message (notmuch_database_t *database,
+  const char *message_id,
+  const char **tag_list);
+
+#endif
-- 
1.7.10.4



[Patch v2 04/17] test: add database routines for testing

2012-11-24 Thread david
From: David Bremner brem...@debian.org

Initially, provide a way to create stub messages in the notmuch
database without corresponding files.  This is essentially cut and
paste from lib/database.cc. This is a seperate file since we don't
want to export these symbols from libnotmuch or bloat the library with
non-exported code.
---
 test/Makefile.local  |1 +
 test/database-test.c |   71 ++
 test/database-test.h |   21 +++
 3 files changed, 93 insertions(+)
 create mode 100644 test/database-test.c
 create mode 100644 test/database-test.h

diff --git a/test/Makefile.local b/test/Makefile.local
index 8da4c56..8479f91 100644
--- a/test/Makefile.local
+++ b/test/Makefile.local
@@ -45,5 +45,6 @@ CLEAN := $(CLEAN) $(dir)/smtp-dummy $(dir)/smtp-dummy.o \
 $(dir)/symbol-test $(dir)/symbol-test.o \
 $(dir)/arg-test $(dir)/arg-test.o \
 $(dir)/hex-xcode $(dir)/hex-xcode.o \
+$(dir)/database-test.o \
 $(dir)/parse-time $(dir)/parse-time.o \
 $(dir)/corpus.mail $(dir)/test-results $(dir)/tmp.*
diff --git a/test/database-test.c b/test/database-test.c
new file mode 100644
index 000..739e03b
--- /dev/null
+++ b/test/database-test.c
@@ -0,0 +1,71 @@
+/*
+ * Database routines intended only for testing, not exported from
+ * library.
+ *
+ * Copyright (c) 2012 David Bremner
+ *
+ * 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/ .
+ *
+ * Author: David Bremner da...@tethera.net
+ */
+
+#include notmuch-private.h
+#include database-test.h
+
+notmuch_status_t
+notmuch_database_add_stub_message (notmuch_database_t *notmuch,
+  const char *message_id,
+  const char **tags)
+{
+const char **tag;
+notmuch_status_t ret;
+notmuch_private_status_t private_status;
+notmuch_message_t *message;
+
+ret = _notmuch_database_ensure_writable (notmuch);
+if (ret)
+   return ret;
+
+message = _notmuch_message_create_for_message_id (notmuch,
+ message_id,
+ private_status);
+if (message == NULL) {
+   return COERCE_STATUS (private_status,
+ Unexpected status value from 
_notmuch_message_create_for_message_id);
+
+}
+
+if (private_status != NOTMUCH_PRIVATE_STATUS_NO_DOCUMENT_FOUND)
+   return NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID;
+
+_notmuch_message_add_term (message, type, mail);
+
+if (tags) {
+   ret = notmuch_message_freeze (message);
+   if (ret)
+   return ret;
+
+   for (tag = tags; *tag; tag++) {
+   ret = notmuch_message_add_tag (message, *tag);
+   if (ret)
+   return ret;
+   }
+}
+
+ret = notmuch_message_thaw (message);
+if (ret)
+   return ret;
+
+return NOTMUCH_STATUS_SUCCESS;
+}
diff --git a/test/database-test.h b/test/database-test.h
new file mode 100644
index 000..84f7988
--- /dev/null
+++ b/test/database-test.h
@@ -0,0 +1,21 @@
+#ifndef _DATABASE_TEST_H
+#define _DATABASE_TEST_H
+/* Add a new stub message to the given notmuch database.
+ *
+ * At least the following return values are possible:
+ *
+ * NOTMUCH_STATUS_SUCCESS: Message successfully added to database.
+ *
+ * NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID: Message has the same message
+ * ID as another message already in the database.
+ *
+ * NOTMUCH_STATUS_READ_ONLY_DATABASE: Database was opened in read-only
+ * mode so no message can be added.
+ */
+
+notmuch_status_t
+notmuch_database_add_stub_message (notmuch_database_t *database,
+  const char *message_id,
+  const char **tag_list);
+
+#endif
-- 
1.7.10.4

___
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch