g10: Add test for keydb as well as new testing infrastructure.
[gnupg.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 <http://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;
31   char *uid1;
32   char *uid2;
33
34   (void) argc;
35   (void) argv;
36
37   rc = keydb_add_resource (SOURCE_DIR "/t-keydb-keyring.kbx", 0);
38   if (rc)
39     ABORT ("Failed to open keyring.");
40
41   hd1 = keydb_new ();
42   hd2 = keydb_new ();
43
44   rc = classify_user_id ("2689 5E25 E844 6D44 A26D  8FAF 2F79 98F3 DBFC 6AD9",
45                          &desc1, 0);
46   if (rc)
47     ABORT ("Failed to convert fingerprint for DBFC6AD9");
48
49   rc = keydb_search (hd1, &desc1, 1, NULL);
50   if (rc)
51     ABORT ("Failed to lookup key associated with DBFC6AD9");
52
53
54   classify_user_id ("8061 5870 F5BA D690 3336  86D0 F2AD 85AC 1E42 B367",
55                     &desc2, 0);
56   if (rc)
57     ABORT ("Failed to convert fingerprint for 1E42B367");
58
59   rc = keydb_search (hd2, &desc2, 1, NULL);
60   if (rc)
61     ABORT ("Failed to lookup key associated with 1E42B367");
62
63   rc = keydb_get_keyblock (hd2, &kb2);
64   if (rc)
65     ABORT ("Failed to get keyblock for 1E42B367");
66
67   rc = keydb_get_keyblock (hd1, &kb1);
68   if (rc)
69     ABORT ("Failed to get keyblock for DBFC6AD9");
70
71   while (kb1 && kb1->pkt->pkttype != PKT_USER_ID)
72     kb1 = kb1->next;
73   if (! kb1)
74     ABORT ("DBFC6AD9 has no user id packet");
75   uid1 = kb1->pkt->pkt.user_id->name;
76
77   while (kb2 && kb2->pkt->pkttype != PKT_USER_ID)
78     kb2 = kb2->next;
79   if (! kb2)
80     ABORT ("1E42B367 has no user id packet");
81   uid2 = kb2->pkt->pkt.user_id->name;
82
83   printf ("user id for DBFC6AD9: %s\n", uid1);
84   printf ("user id for 1E42B367: %s\n", uid2);
85
86   TEST_P ("cache consistency", strcmp (uid1, uid2) != 0);
87 }