2 test_description="library config API"
4 . $(dirname "$0")/test-lib.sh || exit 1
8 _libconfig_sanitize() {
9 ${NOTMUCH_PYTHON} /dev/fd/3 3<<'EOF'
10 import os, sys, pwd, socket
12 pw = pwd.getpwuid(os.getuid())
14 name = pw.pw_gecos.partition(",")[0]
18 l = l.replace(user, "USERNAME", 1)
20 l = l.replace("'" + name, "'USER_FULL_NAME", 1)
28 #include <notmuch-test.h>
30 int main (int argc, char** argv)
32 notmuch_database_t *db;
34 notmuch_status_t stat;
37 for (int i = 1; i < argc; i++)
38 if (strcmp (argv[i], "%NULL%") == 0) argv[i] = NULL;
40 stat = notmuch_database_open_with_config (argv[1],
41 NOTMUCH_DATABASE_MODE_READ_WRITE,
46 if (stat != NOTMUCH_STATUS_SUCCESS) {
47 fprintf (stderr, "error opening database\n%s\n%s\n", notmuch_status_to_string (stat), msg ? msg : "");
53 EXPECT0(notmuch_database_destroy(db));
57 test_begin_subtest "notmuch_database_{set,get}_config"
58 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
60 EXPECT0(notmuch_database_set_config (db, "test.key1", "testvalue1"));
61 EXPECT0(notmuch_database_set_config (db, "test.key2", "testvalue2"));
62 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
63 printf("test.key1 = %s\n", val);
64 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
65 printf("test.key2 = %s\n", val);
70 test.key1 = testvalue1
71 test.key2 = testvalue2
74 test_expect_equal_file EXPECTED OUTPUT
77 test_begin_subtest "notmuch_database_get_config_list: empty list"
78 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
80 notmuch_config_list_t *list;
81 EXPECT0(notmuch_database_get_config_list (db, "nonexistent", &list));
82 printf("valid = %d\n", notmuch_config_list_valid (list));
83 notmuch_config_list_destroy (list);
91 test_expect_equal_file EXPECTED OUTPUT
93 test_begin_subtest "notmuch_database_get_config_list: closed db"
94 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
96 notmuch_config_list_t *list;
97 EXPECT0(notmuch_database_close (db));
98 stat = notmuch_database_get_config_list (db, "nonexistent", &list);
99 printf("%d\n", stat == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
102 cat <<'EOF' >EXPECTED
107 test_expect_equal_file EXPECTED OUTPUT
109 test_begin_subtest "notmuch_database_get_config_list: all pairs"
110 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
112 notmuch_config_list_t *list;
113 EXPECT0(notmuch_database_set_config (db, "zzzafter", "afterval"));
114 EXPECT0(notmuch_database_set_config (db, "aaabefore", "beforeval"));
115 EXPECT0(notmuch_database_get_config_list (db, "", &list));
116 for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
117 printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
119 notmuch_config_list_destroy (list);
122 cat <<'EOF' >EXPECTED
130 test_expect_equal_file EXPECTED OUTPUT
132 test_begin_subtest "notmuch_database_get_config_list: all pairs (closed db)"
133 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
135 notmuch_config_list_t *list;
136 EXPECT0(notmuch_database_get_config_list (db, "", &list));
137 EXPECT0(notmuch_database_close (db));
138 for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
139 printf("%s %d\n", notmuch_config_list_key (list), NULL == notmuch_config_list_value(list));
141 notmuch_config_list_destroy (list);
144 cat <<'EOF' >EXPECTED
152 test_expect_equal_file EXPECTED OUTPUT
154 test_begin_subtest "notmuch_database_get_config_list: one prefix"
155 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
157 notmuch_config_list_t *list;
158 EXPECT0(notmuch_database_get_config_list (db, "test.key", &list));
159 for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
160 printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
162 notmuch_config_list_destroy (list);
165 cat <<'EOF' >EXPECTED
171 test_expect_equal_file EXPECTED OUTPUT
173 test_begin_subtest "dump config"
174 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
176 EXPECT0(notmuch_database_set_config (db, "key with spaces", "value, with, spaces!"));
179 notmuch dump --include=config >OUTPUT
180 cat <<'EOF' >EXPECTED
181 #notmuch-dump batch-tag:3 config
182 #@ aaabefore beforeval
183 #@ key%20with%20spaces value,%20with,%20spaces%21
184 #@ test.key1 testvalue1
185 #@ test.key2 testvalue2
188 test_expect_equal_file EXPECTED OUTPUT
190 test_begin_subtest "restore config"
191 notmuch dump --include=config >EXPECTED
192 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
194 EXPECT0(notmuch_database_set_config (db, "test.key1", "mutatedvalue"));
197 notmuch restore --include=config <EXPECTED
198 notmuch dump --include=config >OUTPUT
199 test_expect_equal_file EXPECTED OUTPUT
202 test_begin_subtest "override config from file"
203 notmuch config set test.key1 overridden
204 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
206 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
207 printf("test.key1 = %s\n", val);
208 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
209 printf("test.key2 = %s\n", val);
212 cat <<'EOF' >EXPECTED
214 test.key1 = overridden
215 test.key2 = testvalue2
218 test_expect_equal_file EXPECTED OUTPUT
221 test_begin_subtest "NOTMUCH_CONFIG_HOOK_DIR: traditional"
222 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
224 const char *val = notmuch_config_get (db, NOTMUCH_CONFIG_HOOK_DIR);
225 printf("database.hook_dir = %s\n", val);
228 cat <<'EOF' >EXPECTED
230 database.hook_dir = MAIL_DIR/.notmuch/hooks
233 test_expect_equal_file EXPECTED OUTPUT
235 test_begin_subtest "NOTMUCH_CONFIG_HOOK_DIR: xdg"
236 dir="${HOME}/.config/notmuch/default/hooks"
238 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
240 const char *val = notmuch_config_get (db, NOTMUCH_CONFIG_HOOK_DIR);
241 printf("database.hook_dir = %s\n", val);
244 cat <<'EOF' >EXPECTED
246 database.hook_dir = CWD/home/.config/notmuch/default/hooks
250 test_expect_equal_file EXPECTED OUTPUT
252 test_begin_subtest "notmuch_config_get_values"
253 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
255 notmuch_config_values_t *values;
256 EXPECT0(notmuch_config_set (db, NOTMUCH_CONFIG_NEW_TAGS, "a;b;c"));
257 for (values = notmuch_config_get_values (db, NOTMUCH_CONFIG_NEW_TAGS);
258 notmuch_config_values_valid (values);
259 notmuch_config_values_move_to_next (values))
261 puts (notmuch_config_values_get (values));
265 cat <<'EOF' >EXPECTED
272 test_expect_equal_file EXPECTED OUTPUT
275 test_begin_subtest "notmuch_config_get_values_string"
276 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
278 notmuch_config_values_t *values;
279 EXPECT0(notmuch_database_set_config (db, "test.list", "x;y;z"));
280 for (values = notmuch_config_get_values_string (db, "test.list");
281 notmuch_config_values_valid (values);
282 notmuch_config_values_move_to_next (values))
284 puts (notmuch_config_values_get (values));
288 cat <<'EOF' >EXPECTED
295 test_expect_equal_file EXPECTED OUTPUT
298 test_begin_subtest "notmuch_config_get_values (restart)"
299 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
301 notmuch_config_values_t *values;
302 EXPECT0(notmuch_config_set (db, NOTMUCH_CONFIG_NEW_TAGS, "a;b;c"));
303 for (values = notmuch_config_get_values (db, NOTMUCH_CONFIG_NEW_TAGS);
304 notmuch_config_values_valid (values);
305 notmuch_config_values_move_to_next (values))
307 puts (notmuch_config_values_get (values));
309 for (notmuch_config_values_start (values);
310 notmuch_config_values_valid (values);
311 notmuch_config_values_move_to_next (values))
313 puts (notmuch_config_values_get (values));
317 cat <<'EOF' >EXPECTED
327 test_expect_equal_file EXPECTED OUTPUT
331 test_begin_subtest "notmuch_config_get_values, trailing ;"
332 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
334 notmuch_config_values_t *values;
335 EXPECT0(notmuch_config_set (db, NOTMUCH_CONFIG_NEW_TAGS, "a;b;c"));
336 for (values = notmuch_config_get_values (db, NOTMUCH_CONFIG_NEW_TAGS);
337 notmuch_config_values_valid (values);
338 notmuch_config_values_move_to_next (values))
340 puts (notmuch_config_values_get (values));
344 cat <<'EOF' >EXPECTED
351 test_expect_equal_file EXPECTED OUTPUT
355 test_begin_subtest "get config by key"
356 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
358 printf("before = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
359 EXPECT0(notmuch_database_set_config (db, "maildir.synchronize_flags", "false"));
360 printf("after = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
363 cat <<'EOF' >EXPECTED
369 test_expect_equal_file EXPECTED OUTPUT
373 test_begin_subtest "set config by key"
374 notmuch config set test.key1 overridden
375 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG}
377 printf("before = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
378 EXPECT0(notmuch_config_set (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS, "false"));
379 printf("after = %s\n", notmuch_config_get (db, NOTMUCH_CONFIG_SYNC_MAILDIR_FLAGS));
382 cat <<'EOF' >EXPECTED
388 test_expect_equal_file EXPECTED OUTPUT
391 test_begin_subtest "load default values"
392 export MAILDIR=${MAIL_DIR}
393 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} '' %NULL%
395 notmuch_config_key_t key;
396 for (key = NOTMUCH_CONFIG_FIRST;
397 key < NOTMUCH_CONFIG_LAST;
398 key = (notmuch_config_key_t)(key + 1)) {
399 const char *val = notmuch_config_get (db, key);
400 printf("%02d: '%s'\n", key, val ? val : "NULL" );
405 _libconfig_sanitize < OUTPUT > OUTPUT.clean
407 cat <<'EOF' >EXPECTED
411 02: 'MAIL_DIR/.notmuch/hooks'
412 03: 'MAIL_DIR/.notmuch/backups'
417 08: 'USERNAME@localhost'
424 test_expect_equal_file EXPECTED OUTPUT.clean
427 test_begin_subtest "override config from \${NOTMUCH_CONFIG}"
428 notmuch config set test.key1 overridden
429 # second argument omitted to make argv[2] == NULL
430 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR}
432 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
433 printf("test.key1 = %s\n", val);
434 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
435 printf("test.key2 = %s\n", val);
438 notmuch config set test.key1
439 cat <<'EOF' >EXPECTED
441 test.key1 = overridden
442 test.key2 = testvalue2
445 test_expect_equal_file EXPECTED OUTPUT
449 test_begin_subtest "override config from \${HOME}/.notmuch-config"
450 ovconfig=${HOME}/.notmuch-config
451 cp ${NOTMUCH_CONFIG} ${ovconfig}
452 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
454 notmuch --config=${ovconfig} config set test.key1 overridden-home
455 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
457 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
458 printf("test.key1 = %s\n", val);
459 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
460 printf("test.key2 = %s\n", val);
464 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
465 cat <<'EOF' >EXPECTED
467 test.key1 = overridden-home
468 test.key2 = testvalue2
471 test_expect_equal_file EXPECTED OUTPUT
475 test_begin_subtest "override config from \${XDG_CONFIG_HOME}/notmuch"
476 ovconfig=${HOME}/.config/notmuch/default/config
477 mkdir -p $(dirname ${ovconfig})
478 cp ${NOTMUCH_CONFIG} ${ovconfig}
479 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
481 notmuch --config=${ovconfig} config set test.key1 overridden-xdg
482 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
484 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
485 printf("test.key1 = %s\n", val);
486 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
487 printf("test.key2 = %s\n", val);
491 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
492 cat <<'EOF' >EXPECTED
494 test.key1 = overridden-xdg
495 test.key2 = testvalue2
498 test_expect_equal_file EXPECTED OUTPUT
502 test_begin_subtest "override config from \${XDG_CONFIG_HOME}/notmuch with profile"
503 ovconfig=${HOME}/.config/notmuch/work/config
504 mkdir -p $(dirname ${ovconfig})
505 cp ${NOTMUCH_CONFIG} ${ovconfig}
506 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
508 notmuch --config=${ovconfig} config set test.key1 overridden-xdg-profile
509 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% work
511 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
512 printf("test.key1 = %s\n", val);
513 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
514 printf("test.key2 = %s\n", val);
518 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
519 cat <<'EOF' >EXPECTED
521 test.key1 = overridden-xdg-profile
522 test.key2 = testvalue2
525 test_expect_equal_file EXPECTED OUTPUT
529 test_begin_subtest "override config from \${HOME}/.notmuch-config.work (via args)"
530 ovconfig=${HOME}/.notmuch-config.work
531 cp ${NOTMUCH_CONFIG} ${ovconfig}
532 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
534 notmuch --config=${ovconfig} config set test.key1 overridden-profile
535 cat c_head - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% work
537 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
538 printf("test.key1 = %s\n", val);
539 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
540 printf("test.key2 = %s\n", val);
544 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
545 cat <<'EOF' >EXPECTED
547 test.key1 = overridden-profile
548 test.key2 = testvalue2
551 test_expect_equal_file EXPECTED OUTPUT
554 test_begin_subtest "no config, fail to open database"
555 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
557 cat c_head - c_tail <<'EOF' | test_C %NULL% '' %NULL%
562 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
563 cat <<'EOF' >EXPECTED
566 error opening database
568 Error: could not locate database.
571 test_expect_equal_file EXPECTED OUTPUT
573 test_begin_subtest "open database from NOTMUCH_DATABASE"
574 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
576 export NOTMUCH_DATABASE=${MAIL_DIR}
577 cat c_head - c_tail <<'EOF' | test_C %NULL% '' %NULL%
579 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
580 printf("test.key1 = %s\n", val);
581 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
582 printf("test.key2 = %s\n", val);
585 export NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
586 unset NOTMUCH_DATABASE
587 cat <<'EOF' >EXPECTED
589 test.key1 = testvalue1
590 test.key2 = testvalue2
593 test_expect_equal_file EXPECTED OUTPUT
595 test_begin_subtest "NOTMUCH_DATABASE overrides config"
596 cp notmuch-config notmuch-config.bak
597 notmuch config set database.path /nonexistent
598 export NOTMUCH_DATABASE=${MAIL_DIR}
599 cat c_head - c_tail <<'EOF' | test_C %NULL% '' %NULL%
601 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
602 printf("test.key1 = %s\n", val);
603 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
604 printf("test.key2 = %s\n", val);
607 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
608 unset NOTMUCH_DATABASE
609 cat <<'EOF' >EXPECTED
611 test.key1 = testvalue1
612 test.key2 = testvalue2
615 cp notmuch-config.bak notmuch-config
616 test_expect_equal_file EXPECTED OUTPUT
621 #include <notmuch-test.h>
623 int main (int argc, char** argv)
625 notmuch_database_t *db;
627 notmuch_status_t stat;
630 for (int i = 1; i < argc; i++)
631 if (strcmp (argv[i], "%NULL%") == 0) argv[i] = NULL;
633 stat = notmuch_database_load_config (argv[1],
638 if (stat != NOTMUCH_STATUS_SUCCESS && stat != NOTMUCH_STATUS_NO_CONFIG) {
639 fprintf (stderr, "error opening database\n%d: %s\n%s\n", stat,
640 notmuch_status_to_string (stat), msg ? msg : "");
646 test_begin_subtest "notmuch_database_get_config (ndlc)"
647 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
649 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
650 printf("test.key1 = %s\n", val);
651 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
652 printf("test.key2 = %s\n", val);
655 cat <<'EOF' >EXPECTED
657 test.key1 = testvalue1
658 test.key2 = testvalue2
661 test_expect_equal_file EXPECTED OUTPUT
664 test_begin_subtest "notmuch_database_get_config_list: all pairs (ndlc)"
665 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
667 notmuch_config_list_t *list;
668 EXPECT0(notmuch_database_get_config_list (db, "", &list));
669 for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
670 printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
672 notmuch_config_list_destroy (list);
675 cat <<'EOF' >EXPECTED
678 key with spaces value, with, spaces!
684 test_expect_equal_file EXPECTED OUTPUT
686 test_begin_subtest "notmuch_database_get_config_list: one prefix (ndlc)"
687 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
689 notmuch_config_list_t *list;
690 EXPECT0(notmuch_database_get_config_list (db, "test.key", &list));
691 for (; notmuch_config_list_valid (list); notmuch_config_list_move_to_next (list)) {
692 printf("%s %s\n", notmuch_config_list_key (list), notmuch_config_list_value(list));
694 notmuch_config_list_destroy (list);
697 cat <<'EOF' >EXPECTED
703 test_expect_equal_file EXPECTED OUTPUT
705 test_begin_subtest "list by keys (ndlc)"
706 notmuch config set search.exclude_tags "foo;bar;fub"
707 notmuch config set new.ignore "sekrit_junk"
708 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
710 notmuch_config_key_t key;
711 for (key = NOTMUCH_CONFIG_FIRST;
712 key < NOTMUCH_CONFIG_LAST;
713 key = (notmuch_config_key_t)(key + 1)) {
714 const char *val = notmuch_config_get (db, key);
715 printf("%02d: '%s'\n", key, val ? val : "NULL" );
719 cat <<'EOF' >EXPECTED
723 02: 'MAIL_DIR/.notmuch/hooks'
724 03: 'MAIL_DIR/.notmuch/backups'
729 08: 'test_suite@notmuchmail.org'
730 09: 'test_suite_other@notmuchmail.org;test_suite@otherdomain.org'
731 10: 'Notmuch Test Suite'
735 test_expect_equal_file EXPECTED OUTPUT
737 test_begin_subtest "load default values (ndlc, nonexistent config)"
738 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} /nonexistent %NULL%
740 notmuch_config_key_t key;
741 for (key = NOTMUCH_CONFIG_FIRST;
742 key < NOTMUCH_CONFIG_LAST;
743 key = (notmuch_config_key_t)(key + 1)) {
744 const char *val = notmuch_config_get (db, key);
745 printf("%02d: '%s'\n", key, val ? val : "NULL" );
750 _libconfig_sanitize < OUTPUT > OUTPUT.clean
752 cat <<'EOF' >EXPECTED
756 02: 'MAIL_DIR/.notmuch/hooks'
757 03: 'MAIL_DIR/.notmuch/backups'
762 08: 'USERNAME@localhost'
768 test_expect_equal_file EXPECTED OUTPUT.clean
771 test_begin_subtest "override config from \${HOME}/.notmuch-config (ndlc)"
772 ovconfig=${HOME}/.notmuch-config
773 cp ${NOTMUCH_CONFIG} ${ovconfig}
774 old_NOTMUCH_CONFIG=${NOTMUCH_CONFIG}
776 notmuch --config=${ovconfig} config set test.key1 overridden-home
777 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} %NULL% %NULL%
779 EXPECT0(notmuch_database_get_config (db, "test.key1", &val));
780 printf("test.key1 = %s\n", val);
781 EXPECT0(notmuch_database_get_config (db, "test.key2", &val));
782 printf("test.key2 = %s\n", val);
786 NOTMUCH_CONFIG=${old_NOTMUCH_CONFIG}
787 cat <<'EOF' >EXPECTED
789 test.key1 = overridden-home
790 test.key2 = testvalue2
793 test_expect_equal_file EXPECTED OUTPUT
796 test_begin_subtest "notmuch_config_get_pairs: prefix (ndlc)"
797 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
799 notmuch_config_pairs_t *list;
800 for (list = notmuch_config_get_pairs (db, "user.");
801 notmuch_config_pairs_valid (list);
802 notmuch_config_pairs_move_to_next (list)) {
803 printf("%s %s\n", notmuch_config_pairs_key (list), notmuch_config_pairs_value(list));
805 notmuch_config_pairs_destroy (list);
808 cat <<'EOF' >EXPECTED
810 user.name Notmuch Test Suite
811 user.other_email test_suite_other@notmuchmail.org;test_suite@otherdomain.org
812 user.primary_email test_suite@notmuchmail.org
815 test_expect_equal_file EXPECTED OUTPUT
817 test_begin_subtest "notmuch_config_get_pairs: all pairs (ndlc)"
818 cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR} ${NOTMUCH_CONFIG} %NULL%
820 notmuch_config_pairs_t *list;
821 for (list = notmuch_config_get_pairs (db, "");
822 notmuch_config_pairs_valid (list);
823 notmuch_config_pairs_move_to_next (list)) {
824 printf("%s %s\n", notmuch_config_pairs_key (list), notmuch_config_pairs_value(list));
826 notmuch_config_pairs_destroy (list);
829 cat <<'EOF' >EXPECTED
832 database.autocommit 8000
833 database.backup_dir MAIL_DIR/.notmuch/backups
834 database.hook_dir MAIL_DIR/.notmuch/hooks
835 database.mail_root MAIL_DIR
836 database.path MAIL_DIR
837 key with spaces value, with, spaces!
838 maildir.synchronize_flags true
839 new.ignore sekrit_junk
840 new.tags unread;inbox
841 search.exclude_tags foo;bar;fub
844 user.name Notmuch Test Suite
845 user.other_email test_suite_other@notmuchmail.org;test_suite@otherdomain.org
846 user.primary_email test_suite@notmuchmail.org
850 test_expect_equal_file EXPECTED OUTPUT