tests: Mark lots of unused vars and fix const mismatches.
[gpgme.git] / tests / gpg / t-thread1.c
1 /* t-thread1.c - Regression test.
2    Copyright (C) 2000 Werner Koch (dd9jn)
3    Copyright (C) 2001, 2003, 2004 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 Lesser General Public License as
9    published by the Free Software Foundation; either version 2.1 of
10    the License, or (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    Lesser General Public License for more details.
16
17    You should have received a copy of the GNU Lesser General Public
18    License along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20    02111-1307, USA.  */
21
22 /* We need to include config.h so that we know whether we are building
23    with large file system (LFS) support. */
24 #ifdef HAVE_CONFIG_H
25 #include <config.h>
26 #endif
27
28 #include <stdlib.h>
29 #include <stdio.h>
30 #include <string.h>
31 #include <errno.h>
32 #include <unistd.h>
33 #include <pthread.h>
34
35 #include <gpgme.h>
36
37 #include "t-support.h"
38
39 #define ROUNDS 20
40
41 \f
42 void *
43 thread_one (void *name)
44 {
45   int i;
46
47   for (i = 0; i < ROUNDS; i++)
48     {
49       gpgme_ctx_t ctx;
50       gpgme_error_t err;
51       gpgme_data_t in, out;
52       gpgme_key_t key[3] = { NULL, NULL, NULL };
53       gpgme_encrypt_result_t result;
54
55       err = gpgme_new (&ctx);
56       fail_if_err (err);
57       gpgme_set_armor (ctx, 1);
58
59       err = gpgme_data_new_from_mem (&in, "Hallo Leute\n", 12, 0);
60       fail_if_err (err);
61
62       err = gpgme_data_new (&out);
63       fail_if_err (err);
64
65       err = gpgme_get_key (ctx, "A0FF4590BB6122EDEF6E3C542D727CC768697734",
66                            &key[0], 0);
67       fail_if_err (err);
68       err = gpgme_get_key (ctx, "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2",
69                            &key[1], 0);
70       fail_if_err (err);
71
72       err = gpgme_op_encrypt (ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, in, out);
73       fail_if_err (err);
74       result = gpgme_op_encrypt_result (ctx);
75       if (result->invalid_recipients)
76         {
77           fprintf (stderr, "Invalid recipient encountered: %s\n",
78                    result->invalid_recipients->fpr);
79           exit (1);
80         }
81       printf ("Encrypt %s %i\n", (char *) name, i);
82
83       gpgme_key_unref (key[0]);
84       gpgme_key_unref (key[1]);
85       gpgme_data_release (in);
86       gpgme_data_release (out);
87       gpgme_release (ctx);
88     }
89   return NULL;
90 }
91
92
93 void *
94 thread_two (void *name)
95 {
96   int i;
97   char *cipher_1_asc = make_filename ("cipher-1.asc");
98   char *agent_info;
99
100   agent_info = getenv("GPG_AGENT_INFO");
101
102   for (i = 0; i < ROUNDS; i++)
103     {
104       gpgme_ctx_t ctx;
105       gpgme_error_t err;
106       gpgme_data_t in, out;
107       gpgme_decrypt_result_t result;
108
109       init_gpgme (GPGME_PROTOCOL_OpenPGP);
110
111       err = gpgme_new (&ctx);
112       fail_if_err (err);
113
114       if (!(agent_info && strchr (agent_info, ':')))
115         gpgme_set_passphrase_cb (ctx, passphrase_cb, NULL);
116
117       err = gpgme_data_new_from_file (&in, cipher_1_asc, 1);
118       fail_if_err (err);
119
120       err = gpgme_data_new (&out);
121       fail_if_err (err);
122
123       err = gpgme_op_decrypt (ctx, in, out);
124       fail_if_err (err);
125       result = gpgme_op_decrypt_result (ctx);
126       if (result->unsupported_algorithm)
127         {
128           fprintf (stderr, "%s:%i: unsupported algorithm: %s\n",
129                    __FILE__, __LINE__, result->unsupported_algorithm);
130           exit (1);
131         }
132       printf ("Decrypt %s %i\n", (char *) name, i);
133
134       gpgme_data_release (in);
135       gpgme_data_release (out);
136       gpgme_release (ctx);
137     }
138   free (cipher_1_asc);
139   return NULL;
140 }
141
142 int
143 main (void)
144 {
145   pthread_t tone;
146   pthread_t ttwo;
147   char arg_A[] = "A";
148   char arg_B[] = "B";
149
150   init_gpgme (GPGME_PROTOCOL_OpenPGP);
151
152   pthread_create (&tone, NULL, thread_one, arg_A);
153   pthread_create (&ttwo, NULL, thread_two, arg_B);
154
155   pthread_join (tone, NULL);
156   pthread_join (ttwo, NULL);
157
158   return 0;
159 }