"Fossies" - the Fresh Open Source Software Archive

Member "gnupg-2.2.17/dirmngr/t-http-basic.c" (23 Nov 2018, 5294 Bytes) of package /linux/misc/gnupg-2.2.17.tar.bz2:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "t-http-basic.c" see the Fossies "Dox" file reference documentation.

    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 
  169       err = http_prepare_redirect (&ri, 301, tests[tidx].location, &newurl);
  170       if (err && newurl)
  171         fail (tidx);
  172       if (err && gpg_err_code (err) != tests[tidx].expect_err)
  173         fail (tidx);
  174       if (err)
  175         continue;
  176       if (!newurl)
  177         fail (tidx);
  178       if (strcmp (tests[tidx].expect_url, newurl))
  179         {
  180           fprintf (stderr, "want: '%s'\n", tests[tidx].expect_url);
  181           fprintf (stderr, "got : '%s'\n", newurl);
  182           fail (tidx);
  183         }
  184 
  185       xfree (newurl);
  186     }
  187 }
  188 
  189 
  190 int
  191 main (int argc, char **argv)
  192 {
  193   (void)argc;
  194   (void)argv;
  195 
  196   test_http_prepare_redirect ();
  197 
  198   return 0;
  199 }