chiark / gitweb /
gpg agent lockup fix: Interrupt main loop when active_connections_value==0
[gnupg2.git] / g10 / t-keydb.c
1 /* t-keydb.c - Tests for keydb.c.
2  * Copyright (C) 2015 g10 Code GmbH
3  *
4  * This file is part of GnuPG.
5  *
6  * GnuPG is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * GnuPG is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see <https://www.gnu.org/licenses/>.
18  */
19
20 #include "test.c"
21
22 #include "keydb.h"
23
24 static void
25 do_test (int argc, char *argv[])
26 {
27   int rc;
28   KEYDB_HANDLE hd1, hd2;
29   KEYDB_SEARCH_DESC desc1, desc2;
30   KBNODE kb1, kb2, p;
31   char *uid1;
32   char *uid2;
33   char *fname;
34
35   (void) argc;
36   (void) argv;
37
38   fname = prepend_srcdir ("t-keydb-keyring.kbx");
39   rc = keydb_add_resource (fname, 0);
40   test_free (fname);
41   if (rc)
42     ABORT ("Failed to open keyring.");
43
44   hd1 = keydb_new ();
45   if (!hd1)
46     ABORT ("");
47   hd2 = keydb_new ();
48   if (!hd2)
49     ABORT ("");
50
51   rc = classify_user_id ("2689 5E25 E844 6D44 A26D  8FAF 2F79 98F3 DBFC 6AD9",
52                          &desc1, 0);
53   if (rc)
54     ABORT ("Failed to convert fingerprint for DBFC6AD9");
55
56   rc = keydb_search (hd1, &desc1, 1, NULL);
57   if (rc)
58     ABORT ("Failed to lookup key associated with DBFC6AD9");
59
60
61   classify_user_id ("8061 5870 F5BA D690 3336  86D0 F2AD 85AC 1E42 B367",
62                     &desc2, 0);
63   if (rc)
64     ABORT ("Failed to convert fingerprint for 1E42B367");
65
66   rc = keydb_search (hd2, &desc2, 1, NULL);
67   if (rc)
68     ABORT ("Failed to lookup key associated with 1E42B367");
69
70   rc = keydb_get_keyblock (hd2, &kb2);
71   if (rc)
72     ABORT ("Failed to get keyblock for 1E42B367");
73
74   rc = keydb_get_keyblock (hd1, &kb1);
75   if (rc)
76     ABORT ("Failed to get keyblock for DBFC6AD9");
77
78   p = kb1;
79   while (p && p->pkt->pkttype != PKT_USER_ID)
80     p = p->next;
81   if (! p)
82     ABORT ("DBFC6AD9 has no user id packet");
83   uid1 = p->pkt->pkt.user_id->name;
84
85   p = kb2;
86   while (p && p->pkt->pkttype != PKT_USER_ID)
87     p = p->next;
88   if (! p)
89     ABORT ("1E42B367 has no user id packet");
90   uid2 = p->pkt->pkt.user_id->name;
91
92   if (verbose)
93     {
94       printf ("user id for DBFC6AD9: %s\n", uid1);
95       printf ("user id for 1E42B367: %s\n", uid2);
96     }
97
98   TEST_P ("cache consistency", strcmp (uid1, uid2) != 0);
99
100   release_kbnode (kb1);
101   release_kbnode (kb2);
102   keydb_release (hd1);
103   keydb_release (hd2);
104 }