Bump to 2.4.3
[platform/upstream/gpg2.git] / dirmngr / t-http-basic.c
1 /* t-http-basic.c - Basic regression tests for http.c
2  * Copyright (C) 2018  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://gnu.org/licenses/>.
18  * SPDX-License-Identifier: GPL-3.0-or-later
19  */
20
21 #include <config.h>
22 #include <stdlib.h>
23
24 #include "../common/util.h"
25 #include "t-support.h"
26 #include "http.h"
27
28 #define PGM "t-http-basic"
29
30
31 static void
32 test_http_prepare_redirect (void)
33 {
34   static struct {
35     const char *url;
36     const char *location;
37     const char *expect_url;
38     gpg_error_t expect_err;
39   } tests[] = {
40     {
41       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
42       NULL,
43       "",
44       GPG_ERR_NO_DATA
45     },
46     {
47       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
48       "",
49       "",
50       GPG_ERR_NO_DATA
51     },
52     {
53       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
54       "foo//bla",
55       "",
56       GPG_ERR_BAD_URI
57     },
58     {
59       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
60       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
61       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
62       0
63     },
64     {
65       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
66       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
67       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
68       0
69     },
70     {
71       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
72       "http://foo.gnupg.org:8080/.not-so-well-known/openpgpkey/hu/12345678",
73       "http://foo.gnupg.org:8080/.well-known/openpgpkey/hu/12345678",
74       0
75     },
76     {
77       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
78       "http:///.no-so-well-known/openpgpkey/hu/12345678",
79       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
80       GPG_ERR_BAD_URI
81     },
82     {
83       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
84       "http://gnupg.org:8080/.not-so-well-known/openpgpkey/hu/12345678",
85       "http://gnupg.org:8080/.not-so-well-known/openpgpkey/hu/12345678",
86       0
87     },
88     {
89       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
90       "http://gnupg.org:8/.not-so-well-known/openpgpkey/hu/12345678",
91       "http://gnupg.org:8/.not-so-well-known/openpgpkey/hu/12345678",
92       0
93     },
94     {
95       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
96       "http://gnupg.org:/.no-so-well-known/openpgpkey/hu/12345678",
97       "http://gnupg.org:/.no-so-well-known/openpgpkey/hu/12345678",
98       0
99     },
100     {
101       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
102       "http://gnupg.org/",
103       "http://gnupg.org/",
104       0
105     },
106     {
107       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
108       "http://gnupg.net",
109       "http://gnupg.net/.well-known/openpgpkey/hu/12345678",
110       0
111     },
112     {
113       "http://gnupg.org",
114       "http://gnupg.org",
115       "http://gnupg.org",
116       0
117     },
118     {
119       "http://gnupg.org",
120       "http://foo.gnupg.org",
121       "http://foo.gnupg.org",
122       0
123     },
124     {
125       "http://gnupg.org/",
126       "http://foo.gnupg.org",
127       "http://foo.gnupg.org/",
128       0
129     },
130     {
131       "http://gnupg.org",
132       "http://foo.gnupg.org/",
133       "http://foo.gnupg.org",
134       0
135     },
136     {
137       "http://gnupg.org/.well-known/openpgpkey/hu/12345678",
138       "http://gnupg.org/something-else",
139       "http://gnupg.org/something-else",
140       0
141     },
142   };
143   int tidx;
144   http_redir_info_t ri;
145   gpg_error_t err;
146   char *newurl;
147
148   err = http_prepare_redirect (NULL, 301, tests[0].location, &newurl);
149   if (gpg_err_code (err) != GPG_ERR_INV_ARG)
150     fail (0);
151   memset (&ri, 0, sizeof ri);
152   err = http_prepare_redirect (&ri, 301, tests[0].location, &newurl);
153   if (gpg_err_code (err) != GPG_ERR_INV_ARG)
154     fail (0);
155   memset (&ri, 0, sizeof ri);
156   ri.silent = 1;
157   ri.orig_url = "http://example.org";
158   err = http_prepare_redirect (&ri, 301, tests[0].location, &newurl);
159   if (gpg_err_code (err) != GPG_ERR_NO_DATA)
160     fail (0);
161
162   for (tidx = 0; tidx < DIM (tests); tidx++)
163     {
164       memset (&ri, 0, sizeof ri);
165       ri.silent = 1;
166       ri.redirects_left = 1;
167       ri.orig_url = tests[tidx].url;
168       ri.restrict_redir = 1; /* This is what we used to test here.  */
169
170       err = http_prepare_redirect (&ri, 301, tests[tidx].location, &newurl);
171       if (err && newurl)
172         fail (tidx);
173       if (err && gpg_err_code (err) != tests[tidx].expect_err)
174         fail (tidx);
175       if (err)
176         continue;
177       if (!newurl)
178         fail (tidx);
179       if (strcmp (tests[tidx].expect_url, newurl))
180         {
181           fprintf (stderr, "want: '%s'\n", tests[tidx].expect_url);
182           fprintf (stderr, "got : '%s'\n", newurl);
183           fail (tidx);
184         }
185
186       xfree (newurl);
187     }
188 }
189
190
191 int
192 main (int argc, char **argv)
193 {
194   (void)argc;
195   (void)argv;
196
197   test_http_prepare_redirect ();
198
199   return 0;
200 }