About to release 0.4.4:
[gpgme.git] / tests / gpg / t-import.c
1 /* t-import.c  - regression test
2    Copyright (C) 2000 Werner Koch (dd9jn)
3    Copyright (C) 2001, 2003 g10 Code GmbH
4
5    This file is part of GPGME.
6  
7    GPGME is free software; you can redistribute it and/or modify it
8    under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11  
12    GPGME is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    General Public License for more details.
16  
17    You should have received a copy of the GNU General Public License
18    along with GPGME; if not, write to the Free Software Foundation,
19    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
21 #include <stdlib.h>
22 #include <stdio.h>
23 #include <string.h>
24 #include <errno.h>
25
26 #include <gpgme.h>
27
28 #include "t-support.h"
29
30 \f
31 void
32 check_result (gpgme_import_result_t result, char *fpr, int secret)
33 {
34   if (result->considered != 1)
35     {
36       fprintf (stderr, "Unexpected number of considered keys %i\n",
37                result->considered);
38       exit (1);
39     }
40   if (result->no_user_id != 0)
41     {
42       fprintf (stderr, "Unexpected number of user ids %i\n",
43                result->no_user_id);
44       exit (1);
45     }
46   if ((secret && result->imported != 0)
47       || (!secret && (result->imported != 0 && result->imported != 1)))
48     {
49       fprintf (stderr, "Unexpected number of imported keys %i\n",
50                result->imported);
51       exit (1);
52     }
53   if (result->imported_rsa != 0)
54     {
55       fprintf (stderr, "Unexpected number of imported RSA keys %i\n",
56                result->imported_rsa);
57       exit (1);
58     }
59   if ((secret && result->unchanged != 0)
60       || (!secret && ((result->imported == 0 && result->unchanged != 1)
61                       || (result->imported == 1 && result->unchanged != 0))))
62     {
63       fprintf (stderr, "Unexpected number of unchanged keys %i\n",
64                result->unchanged);
65       exit (1);
66     }
67   if (result->new_user_ids != 0)
68     {
69       fprintf (stderr, "Unexpected number of new user IDs %i\n",
70                result->new_user_ids);
71       exit (1);
72     }
73   if (result->new_sub_keys != 0)
74     {
75       fprintf (stderr, "Unexpected number of new sub keys %i\n",
76                result->new_sub_keys);
77       exit (1);
78     }
79   if ((secret
80        && ((result->secret_imported == 0 && result->new_signatures != 0)
81            || (result->secret_imported == 1 && result->new_signatures > 1)))
82       || (!secret && result->new_signatures != 0))
83     {
84       fprintf (stderr, "Unexpected number of new signatures %i\n",
85                result->new_signatures);
86       if (result->new_signatures == 2)
87         fprintf (stderr, "### ignored due to gpg 1.3.4 problems\n");
88       else
89         exit (1);
90     }
91   if (result->new_revocations != 0)
92     {
93       fprintf (stderr, "Unexpected number of new revocations %i\n",
94                result->new_revocations);
95       exit (1);
96     }
97   if ((secret && result->secret_read != 1)
98       || (!secret && result->secret_read != 0))
99     {
100       fprintf (stderr, "Unexpected number of secret keys read %i\n",
101                result->secret_read);
102       exit (1);
103     }
104   if ((secret && result->secret_imported != 0 && result->secret_imported != 1)
105       || (!secret && result->secret_imported != 0))
106     {
107       fprintf (stderr, "Unexpected number of secret keys imported %i\n",
108                result->secret_imported);
109       exit (1);
110     }
111   if ((secret
112        && ((result->secret_imported == 0 && result->secret_unchanged != 1)
113            || (result->secret_imported == 1 && result->secret_unchanged != 0)))
114       || (!secret && result->secret_unchanged != 0))
115     {
116       fprintf (stderr, "Unexpected number of secret keys unchanged %i\n",
117                result->secret_unchanged);
118       exit (1);
119     }
120   if (result->not_imported != 0)
121     {
122       fprintf (stderr, "Unexpected number of secret keys not imported %i\n",
123                result->not_imported);
124       exit (1);
125     }
126   if (secret)
127     {
128       if (!result->imports
129           || (result->imports->next && result->imports->next->next))
130         {
131           fprintf (stderr, "Unexpected number of status reports\n");
132           exit (1);
133         }
134     }
135   else
136     {
137       if (!result->imports || result->imports->next)
138         {
139           fprintf (stderr, "Unexpected number of status reports\n");
140           exit (1);
141         }
142     }
143   if (strcmp (fpr, result->imports->fpr))
144     {
145       fprintf (stderr, "Unexpected fingerprint %s\n",
146                result->imports->fpr);
147       exit (1);
148     }
149   if (result->imports->next && strcmp (fpr, result->imports->next->fpr))
150     {
151       fprintf (stderr, "Unexpected fingerprint on second status %s\n",
152                result->imports->next->fpr);
153       exit (1);
154     }
155   if (result->imports->result != 0)
156     {
157       fprintf (stderr, "Unexpected status result %s\n",
158                gpgme_strerror (result->imports->result));
159       exit (1);
160     }
161   if (secret)
162     {
163       if (result->secret_imported == 0)
164         {
165           if (result->imports->status != GPGME_IMPORT_SECRET)
166             {
167               fprintf (stderr, "Unexpected status %i\n",
168                        result->imports->status);
169               exit (1);
170             }
171         }
172       else
173         {
174           if (result->imports->status
175               != (GPGME_IMPORT_SECRET | GPGME_IMPORT_NEW)
176               || (result->imports->next
177                   && result->imports->next->status != GPGME_IMPORT_SIG))
178             {
179               fprintf (stderr, "Unexpected status %i\n",
180                        result->imports->status);
181               exit (1);
182             }
183         }
184     }
185   else
186     {
187       if ((result->imported == 0 && result->imports->status != 0)
188           || (result->imported == 1
189               && result->imports->status != GPGME_IMPORT_NEW))
190         {
191           fprintf (stderr, "Unexpected status %i\n",
192                    result->imports->status);
193           exit (1);
194         }
195     }
196 }
197
198
199 int 
200 main (int argc, char *argv[])
201 {
202   gpgme_ctx_t ctx;
203   gpgme_error_t err;
204   gpgme_data_t in;
205   gpgme_import_result_t result;
206   const char *pubkey_1_asc = make_filename ("pubkey-1.asc");
207   const char *seckey_1_asc = make_filename ("seckey-1.asc");
208
209   init_gpgme (GPGME_PROTOCOL_OpenPGP);
210
211   err = gpgme_new (&ctx);
212   fail_if_err (err);
213
214   err = gpgme_data_new_from_file (&in, pubkey_1_asc, 1);
215   fail_if_err (err);
216
217   err = gpgme_op_import (ctx, in);
218   fail_if_err (err);
219   result = gpgme_op_import_result (ctx);
220   check_result (result, "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", 0);
221   gpgme_data_release (in);
222
223   err = gpgme_data_new_from_file (&in, seckey_1_asc, 1);
224   fail_if_err (err);
225
226   err = gpgme_op_import (ctx, in);
227   fail_if_err (err);
228   result = gpgme_op_import_result (ctx);
229   check_result (result, "ADAB7FCC1F4DE2616ECFA402AF82244F9CD9FD55", 1);
230   gpgme_data_release (in);
231
232   gpgme_release (ctx);
233   return 0;
234 }