LCOV - code coverage report
Current view: top level - tests - tld_test_full_uri.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 27 51 52.9 %
Date: 2022-02-19 13:28:04 Functions: 3 3 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* TLD library -- test the TLD interface
       2             :  * Copyright (c) 2011-2022  Made to Order Software Corp.  All Rights Reserved
       3             :  *
       4             :  * Permission is hereby granted, free of charge, to any person obtaining a
       5             :  * copy of this software and associated documentation files (the
       6             :  * "Software"), to deal in the Software without restriction, including
       7             :  * without limitation the rights to use, copy, modify, merge, publish,
       8             :  * distribute, sublicense, and/or sell copies of the Software, and to
       9             :  * permit persons to whom the Software is furnished to do so, subject to
      10             :  * the following conditions:
      11             :  *
      12             :  * The above copyright notice and this permission notice shall be included
      13             :  * in all copies or substantial portions of the Software.
      14             :  *
      15             :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
      16             :  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      17             :  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
      18             :  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
      19             :  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
      20             :  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
      21             :  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
      22             :  */
      23             : 
      24             : /** \file
      25             :  * \brief Test a full URI with tld_check_uri() function.
      26             :  *
      27             :  * This file implements various tests to verify that the
      28             :  * tld_check_uri() function works as expected.
      29             :  */
      30             : 
      31             : // libtld lib
      32             : //
      33             : #include    <libtld/tld.h>
      34             : #include    <libtld/tld_data.h>
      35             : #include    <libtld/tld_file.h>
      36             : 
      37             : 
      38             : // C lib
      39             : //
      40             : #include    <string.h>
      41             : #include    <stdlib.h>
      42             : #include    <stdio.h>
      43             : #include    <limits.h>
      44             : 
      45             : 
      46             : 
      47             : 
      48             : int err_count = 0;
      49             : int verbose = 0;
      50             : 
      51             : 
      52             : 
      53             : char *              g_filename1 = "../../BUILD/Debug/contrib/libtld/libtld/tlds.tld";
      54             : char *              g_filename2 = "../libtld/tlds.tld";
      55             : struct tld_file *   g_tld_file = NULL;
      56             : 
      57             : 
      58             : /* we get access to the table with all the TLDs so we can go through them all
      59             :  * the library does not give direct access by default... (although maybe we
      60             :  * could give users access to the data)
      61             :  */
      62           1 : void load_tlds()
      63             : {
      64             :     enum tld_file_error err;
      65             : 
      66           1 :     err = tld_file_load(g_filename1, &g_tld_file);
      67           1 :     if(err == TLD_FILE_ERROR_NONE)
      68             :     {
      69           0 :         return;
      70             :     }
      71             : 
      72           1 :     err = tld_file_load(g_filename2, &g_tld_file);
      73           1 :     if(err == TLD_FILE_ERROR_NONE)
      74             :     {
      75           1 :         return;
      76             :     }
      77             : 
      78           0 :     fprintf(stderr, "fatal error: could not read TLD files \"%s\" or \"%s\".\n",
      79             :                         g_filename1, g_filename2);
      80           0 :     exit(1);
      81             : }
      82             : 
      83             : 
      84             : 
      85             : 
      86             : 
      87             : /// \brief Structure used to define many tests to run against the tld_check_uri() function
      88             : struct test_info
      89             : {
      90             :     /// The URI to be tested
      91             :     const char *        f_uri;
      92             :     /// The valid protocols for that test
      93             :     const char *        f_protocols;
      94             :     /// Flags used to call the tld_check_uri() function
      95             :     int                 f_flags;
      96             :     /// The expected result
      97             :     enum tld_result     f_result;
      98             :     /// The expected info values
      99             :     struct tld_info     f_info;
     100             : };
     101             : 
     102             : /* WARNING: the first and last protocols need to be tested for full
     103             :  *          validity of the library; if you add more, add them in the
     104             :  *          middle or update the list of entries below to include the
     105             :  *          new start/end protocols.
     106             :  */
     107             : #define PROTOCOLS "ftp,sftp,http,https,gopher"
     108             : 
     109             : const struct test_info test_info_entries[] =
     110             : {
     111             :     /* NULL entries */
     112             :     {
     113             :       NULL,
     114             :       PROTOCOLS,
     115             :       0,
     116             :       TLD_RESULT_NULL,
     117             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     118             :     },
     119             :     {
     120             :       "",
     121             :       PROTOCOLS,
     122             :       0,
     123             :       TLD_RESULT_NULL,
     124             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     125             :     },
     126             :     /* invalid entries */
     127             :     {
     128             :       "bad://www.m2osw.th/bad-protocol",
     129             :       PROTOCOLS,
     130             :       0,
     131             :       TLD_RESULT_BAD_URI,
     132             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     133             :     },
     134             :     {
     135             :       "b!d://www.m2osw.cg/bad-protocol/character",
     136             :       PROTOCOLS,
     137             :       0,
     138             :       TLD_RESULT_BAD_URI,
     139             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     140             :     },
     141             :     {
     142             :       "https:/www.m2osw.sx.cn/missing/slash",
     143             :       PROTOCOLS,
     144             :       0,
     145             :       TLD_RESULT_BAD_URI,
     146             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     147             :     },
     148             :     {
     149             :       "http:q/www.m2osw.lezajsk.pl/q/instead/of/slash",
     150             :       PROTOCOLS,
     151             :       0,
     152             :       TLD_RESULT_BAD_URI,
     153             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     154             :     },
     155             :     {
     156             :       "https::/www.m2osw.museum.mv/two/colons",
     157             :       PROTOCOLS,
     158             :       0,
     159             :       TLD_RESULT_BAD_URI,
     160             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     161             :     },
     162             :     {
     163             :       "http:///www.m2osw.rec.co/3/slashes",
     164             :       PROTOCOLS,
     165             :       0,
     166             :       TLD_RESULT_BAD_URI,
     167             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     168             :     },
     169             :     {
     170             :       "https://@www.m2osw.co.zm/bad?user=info",
     171             :       PROTOCOLS,
     172             :       0,
     173             :       TLD_RESULT_BAD_URI,
     174             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     175             :     },
     176             :     {
     177             :       "https://@www.m2osw.mil.py@/bad?user=info",
     178             :       PROTOCOLS,
     179             :       0,
     180             :       TLD_RESULT_BAD_URI,
     181             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     182             :     },
     183             :     {
     184             :       "https://:password1@www.m2osw.net.tn/bad?user=info",
     185             :       PROTOCOLS,
     186             :       0,
     187             :       TLD_RESULT_BAD_URI,
     188             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     189             :     },
     190             :     {
     191             :       "https://alexis:@www.m2osw.int.rw/bad?user=info",
     192             :       PROTOCOLS,
     193             :       0,
     194             :       TLD_RESULT_BAD_URI,
     195             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     196             :     },
     197             :     {
     198             :       "https://:@www.m2osw.l.lc/bad?user=info",
     199             :       PROTOCOLS,
     200             :       0,
     201             :       TLD_RESULT_BAD_URI,
     202             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     203             :     },
     204             :     {
     205             :       "https://www.m2osw.mil.sh:/bad?port=empty",
     206             :       PROTOCOLS,
     207             :       0,
     208             :       TLD_RESULT_BAD_URI,
     209             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     210             :     },
     211             :     {
     212             :       "https://www.m2osw.krasnoyarsk.ru:abc/bad?port=invalid&p=number",
     213             :       PROTOCOLS,
     214             :       0,
     215             :       TLD_RESULT_BAD_URI,
     216             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     217             :     },
     218             :     {
     219             :       "sftp://www.m2osw.cat.tt:-33/bad?port=unexpected number",
     220             :       PROTOCOLS,
     221             :       0,
     222             :       TLD_RESULT_BAD_URI,
     223             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     224             :     },
     225             :     {
     226             :       "https://www.m2osw.cat.tt/bad/variable/name?=value",
     227             :       PROTOCOLS,
     228             :       0,
     229             :       TLD_RESULT_BAD_URI,
     230             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     231             :     },
     232             :     {
     233             :       "http://www.m2osw.edu.pt/bar%xx/percent",
     234             :       PROTOCOLS,
     235             :       0,
     236             :       TLD_RESULT_BAD_URI,
     237             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     238             :     },
     239             :     {
     240             :       "http://www.m2osw.tjeldsund.no/con\trol/character",
     241             :       PROTOCOLS,
     242             :       0,
     243             :       TLD_RESULT_BAD_URI,
     244             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     245             :     },
     246             :     {
     247             :       "http://www.m2osw.edu.pt/con%09rol/character", /* %09 = \t */
     248             :       PROTOCOLS,
     249             :       0,
     250             :       TLD_RESULT_BAD_URI,
     251             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     252             :     },
     253             :     {
     254             :       "http://www.m2osw.other.nf/space character",
     255             :       PROTOCOLS,
     256             :       VALID_URI_NO_SPACES,
     257             :       TLD_RESULT_BAD_URI,
     258             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     259             :     },
     260             :     {
     261             :       "http://www.m2osw.co.mp/space+character",
     262             :       PROTOCOLS,
     263             :       VALID_URI_NO_SPACES,
     264             :       TLD_RESULT_BAD_URI,
     265             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     266             :     },
     267             :     {
     268             :       "http://www.m2osw.bv.nl/space%20character",
     269             :       PROTOCOLS,
     270             :       VALID_URI_NO_SPACES,
     271             :       TLD_RESULT_BAD_URI,
     272             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     273             :     },
     274             :     {
     275             :       "http://www.m2osw.gov.pk/bad/variable/name?good=value&=at&the=beginning",
     276             :       PROTOCOLS,
     277             :       0,
     278             :       TLD_RESULT_BAD_URI,
     279             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     280             :     },
     281             :     {
     282             :       "http://www.m2osw.rakpetroleum.om/bad/variable/name?good=value&at=the&=beginning",
     283             :       PROTOCOLS,
     284             :       0,
     285             :       TLD_RESULT_BAD_URI,
     286             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     287             :     },
     288             :     {
     289             :       "http://www.m2osw.orange.om/missing/question/mark&good=values&here=perfect",
     290             :       PROTOCOLS,
     291             :       0,
     292             :       TLD_RESULT_BAD_URI,
     293             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     294             :     },
     295             :     {
     296             :       "http://www.m2osw.orange.om/invalid%9ftoo/large",
     297             :       PROTOCOLS,
     298             :       VALID_URI_ASCII_ONLY,
     299             :       TLD_RESULT_BAD_URI,
     300             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     301             :     },
     302             :     {
     303             :       "http://www.m2osw.orange.om/invalid%9ztoo/large",
     304             :       PROTOCOLS,
     305             :       0,
     306             :       TLD_RESULT_BAD_URI,
     307             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     308             :     },
     309             :     {
     310             :       "http://www.m2osw.orange.om/invalid%z9too/large",
     311             :       PROTOCOLS,
     312             :       0,
     313             :       TLD_RESULT_BAD_URI,
     314             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     315             :     },
     316             :     {
     317             :       "http://www.m2osw.backspace.\010.no/forbid/control-characters",
     318             :       PROTOCOLS,
     319             :       0,
     320             :       TLD_RESULT_BAD_URI,
     321             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     322             :     },
     323             :     {
     324             :       "http://www.m2osw.backspace.no/forbid/control-characters/\010/in/path/too",
     325             :       PROTOCOLS,
     326             :       0,
     327             :       TLD_RESULT_BAD_URI,
     328             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     329             :     },
     330             :     {
     331             :       "http://www.m2osw.and\xF8y.no/forbid/special-characters",
     332             :       PROTOCOLS,
     333             :       VALID_URI_ASCII_ONLY,
     334             :       TLD_RESULT_BAD_URI,
     335             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     336             :     },
     337             :     {
     338             :       "http://www.m2osw.and%F8y.no/forbid/special-characters",
     339             :       PROTOCOLS,
     340             :       VALID_URI_ASCII_ONLY,
     341             :       TLD_RESULT_BAD_URI,
     342             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     343             :     },
     344             :     {
     345             :       "http://www.m2osw.and .no/forbid/spaces",
     346             :       PROTOCOLS,
     347             :       VALID_URI_ASCII_ONLY,
     348             :       TLD_RESULT_BAD_URI,
     349             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     350             :     },
     351             :     {
     352             :       "http://www.m2osw.and+.no/forbid/spaces",
     353             :       PROTOCOLS,
     354             :       VALID_URI_ASCII_ONLY,
     355             :       TLD_RESULT_BAD_URI,
     356             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     357             :     },
     358             :     {
     359             :       "http://www.m2osw.and%20.no/forbid/spaces",
     360             :       PROTOCOLS,
     361             :       VALID_URI_ASCII_ONLY,
     362             :       TLD_RESULT_BAD_URI,
     363             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     364             :     },
     365             :     {
     366             :       "http://www.m2osw.%1F.no/escape/forbidden",
     367             :       PROTOCOLS,
     368             :       VALID_URI_ASCII_ONLY,
     369             :       TLD_RESULT_BAD_URI,
     370             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     371             :     },
     372             :     {
     373             :       "http://www.m2osw.no/large/characters\xF0/forbidden",
     374             :       PROTOCOLS,
     375             :       VALID_URI_ASCII_ONLY,
     376             :       TLD_RESULT_BAD_URI,
     377             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     378             :     },
     379             :     {
     380             :       "http://a--really--long--domain-name--is-actually--forbidden.this--is--done-by--checking--the--length--which--is--limited--to--two--hundred--and--fifty--six--characters.note--that--the--buffer--must--include--a--null--terminator--which--means--you--really--are--limited--to--255--characters.www.m2osw.no/large/characters\xF0/forbidden",
     381             :       PROTOCOLS,
     382             :       0,
     383             :       TLD_RESULT_BAD_URI,
     384             :       { TLD_CATEGORY_UNDEFINED, TLD_STATUS_UNDEFINED, "", NULL, -1, 0 }
     385             :     },
     386             :     /* valid entries */
     387             :     {
     388             :       "https://www.m2osw.co.uk/simple",
     389             :       PROTOCOLS,
     390             :       0,
     391             :       TLD_RESULT_SUCCESS,
     392             :       { TLD_CATEGORY_COUNTRY, TLD_STATUS_VALID, "United Kingdom", ".co.uk/", 17, 0 }
     393             :     },
     394             :     {
     395             :       "ftp://www.m2osw.ltd%2Euk/encoded/period", /* still encoded */
     396             :       PROTOCOLS,
     397             :       0,
     398             :       TLD_RESULT_SUCCESS,
     399             :       { TLD_CATEGORY_COUNTRY, TLD_STATUS_VALID, "United Kingdom", ".ltd%2Euk/", 15, 0 }
     400             :     },
     401             :     {
     402             :       "http://www.m2osw.orange.ac.om/valid%9fcharacter",
     403             :       PROTOCOLS,
     404             :       0,
     405             :       TLD_RESULT_SUCCESS,
     406             :       { TLD_CATEGORY_COUNTRY, TLD_STATUS_VALID, "Oman", ".ac.om", 23, 0 }
     407             :     },
     408             :     {
     409             :       "http://www.m2osw.orange.ac.om/valid\x9f/character",
     410             :       PROTOCOLS,
     411             :       0,
     412             :       TLD_RESULT_SUCCESS,
     413             :       { TLD_CATEGORY_COUNTRY, TLD_STATUS_VALID, "Oman", ".ac.om", 23, 0 }
     414             :     },
     415             :     {
     416             :       "ftp://www.m2osw.ltd%2euk/encoded/period", /* still encoded */
     417             :       PROTOCOLS,
     418             :       0,
     419             :       TLD_RESULT_SUCCESS,
     420             :       { TLD_CATEGORY_COUNTRY, TLD_STATUS_VALID, "United Kingdom", ".ltd%2euk/", 15, 0 }
     421             :     },
     422             :     {
     423             :       "http://m2osw.org.nr/encoded/period?#&=55", /* looks like an empty variable name */
     424             :       PROTOCOLS,
     425             :       0,
     426             :       TLD_RESULT_SUCCESS,
     427             :       { TLD_CATEGORY_COUNTRY, TLD_STATUS_VALID, "Nauru", ".org.nr/", 12, 0 }
     428             :     },
     429             :     {
     430             :       "http://snap.m2osw.blogspot.mx:888/longer/address",
     431             :       PROTOCOLS,
     432             :       0,
     433             :       TLD_RESULT_SUCCESS,
     434             :       { TLD_CATEGORY_ENTREPRENEURIAL, TLD_STATUS_VALID, "", ".blogspot.mx:", 17, 0 }
     435             :     },
     436             :     {
     437             :       "HTTP://alexis:password1@www.m2osw.com:888/correct/uri?with=variable",
     438             :       PROTOCOLS,
     439             :       0,
     440             :       TLD_RESULT_SUCCESS,
     441             :       { TLD_CATEGORY_INTERNATIONAL, TLD_STATUS_VALID, "", ".com:", 33, 0 }
     442             :     },
     443             :     {
     444             :       "ftp://ftp.m2osw.me/freeware/download/snap/snap-1.0.tar.gz",
     445             :       PROTOCOLS,
     446             :       0,
     447             :       TLD_RESULT_SUCCESS,
     448             :       { TLD_CATEGORY_COUNTRY, TLD_STATUS_VALID, "Montenegro", ".me/", 15, 0 }
     449             :     },
     450             :     {
     451             :       "gopher://news.m2osw.ca.us:71/protocols",
     452             :       PROTOCOLS,
     453             :       0,
     454             :       TLD_RESULT_SUCCESS,
     455             :       { TLD_CATEGORY_COUNTRY, TLD_STATUS_VALID, "United States", ".ca.us:", 19, 0 }
     456             :     },
     457             :     {
     458             :       "random://news.m2osw.edu.mm/asterisk/protocols",
     459             :       "*",
     460             :       0,
     461             :       TLD_RESULT_SUCCESS,
     462             :       { TLD_CATEGORY_COUNTRY, TLD_STATUS_VALID, "Republic of the Union of Myanmar", ".edu.mm/", 19, 0 }
     463             :     },
     464             : };
     465             : #define    test_info_entries_length (sizeof(test_info_entries) / sizeof(test_info_entries[0]))
     466             : 
     467             : 
     468           1 : void test_uri()
     469             : {
     470           1 :     struct tld_info info;
     471             :     enum tld_result result;
     472             :     size_t i;
     473             : 
     474          51 :     for(i = 0; i < test_info_entries_length; ++i)
     475             :     {
     476             :         //fprintf(stderr, "testing [%s]\n", test_info_entries[i].f_uri);
     477          50 :         result = tld_check_uri(test_info_entries[i].f_uri, &info, test_info_entries[i].f_protocols, test_info_entries[i].f_flags);
     478          50 :         if(result != test_info_entries[i].f_result)
     479             :         {
     480           0 :             fprintf(stderr, "error:%s: URI failed with the wrong result: %d\n", test_info_entries[i].f_uri, result);
     481           0 :             ++err_count;
     482             :         }
     483             : 
     484          50 :         if(test_info_entries[i].f_info.f_tld == NULL)
     485             :         {
     486          39 :             if(info.f_tld != NULL)
     487             :             {
     488           0 :                 fprintf(stderr, "error:%s: TLD was expected to be NULL, got \"%s\" instead.\n", test_info_entries[i].f_uri, info.f_tld);
     489           0 :                 ++err_count;
     490             :             }
     491             :         }
     492             :         else
     493             :         {
     494          11 :             if(info.f_tld == NULL)
     495             :             {
     496           0 :                 fprintf(stderr, "error:%s: TLD was not expected to be NULL but \"%s\" instead.\n", test_info_entries[i].f_uri, test_info_entries[i].f_info.f_tld);
     497           0 :                 ++err_count;
     498             :             }
     499          11 :             else if(strncmp(test_info_entries[i].f_info.f_tld, info.f_tld, strlen(test_info_entries[i].f_info.f_tld)) != 0)
     500             :             {
     501           0 :                 fprintf(stderr, "error:%s: TLD was not properly extracted: \"%s\".\n", test_info_entries[i].f_uri, info.f_tld);
     502           0 :                 ++err_count;
     503             :             }
     504             :         }
     505             : 
     506          50 :         if(info.f_category != test_info_entries[i].f_info.f_category)
     507             :         {
     508           0 :             fprintf(stderr, "error:%s: category was not properly extracted, got %d, expected %d.\n",
     509           0 :                     test_info_entries[i].f_uri, info.f_category, test_info_entries[i].f_info.f_category);
     510           0 :             ++err_count;
     511             :         }
     512             : 
     513          50 :         if(info.f_status != test_info_entries[i].f_info.f_status)
     514             :         {
     515           0 :             fprintf(stderr, "error:%s: status was not properly extracted.\n", test_info_entries[i].f_uri);
     516           0 :             ++err_count;
     517             :         }
     518             : 
     519             :         if(test_info_entries[i].f_info.f_country == NULL)
     520             :         {
     521             :             if(info.f_country != NULL)
     522             :             {
     523             :                 fprintf(stderr, "error:%s: country was expected to be NULL.\n", test_info_entries[i].f_uri);
     524             :                 ++err_count;
     525             :             }
     526             :         }
     527             :         else
     528             :         {
     529             :             if(info.f_country == NULL)
     530             :             {
     531             :                 fprintf(stderr, "error:%s: country is NULL when it was expected to be \"%s\".\n", test_info_entries[i].f_uri, test_info_entries[i].f_info.f_country);
     532             :                 ++err_count;
     533             :             }
     534          50 :             else if(strcmp(info.f_country, test_info_entries[i].f_info.f_country) != 0)
     535             :             {
     536           0 :                 fprintf(stderr, "error:%s: country was not properly extracted.\n", test_info_entries[i].f_uri);
     537           0 :                 ++err_count;
     538             :             }
     539             :         }
     540             : 
     541          50 :         if(info.f_offset != test_info_entries[i].f_info.f_offset)
     542             :         {
     543           0 :             fprintf(stderr, "error:%s: TLD offset is not the expected value (%d).\n", test_info_entries[i].f_uri, info.f_offset);
     544           0 :             ++err_count;
     545             :         }
     546             :     }
     547           1 : }
     548             : 
     549             : 
     550             : 
     551             : 
     552             : 
     553             : 
     554             : 
     555             : 
     556             : 
     557           1 : int main(int argc, char *argv[])
     558             : {
     559           1 :     fprintf(stderr, "testing tld full URI version %s: tld_valid_uri() function\n", tld_version());
     560             : 
     561           1 :     if(argc > 1)
     562             :     {
     563           0 :         if(strcmp(argv[1], "-v") == 0)
     564             :         {
     565           0 :             verbose = 1;
     566             :         }
     567             :     }
     568             : 
     569             :     /* call all the tests, one by one
     570             :      * failures are "recorded" in the err_count global variable
     571             :      * and the process stops with an error message and exit(1)
     572             :      * if err_count is not zero.
     573             :      */
     574           1 :     load_tlds();
     575           1 :     test_uri();
     576             : 
     577           1 :     if(err_count)
     578             :     {
     579           0 :         fprintf(stderr, "%d error%s occured.\n",
     580           0 :                     err_count, err_count != 1 ? "s" : "");
     581             :     }
     582           1 :     exit(err_count ? 1 : 0);
     583             : }
     584             : 
     585             : /* vim: ts=4 sw=4 et
     586             :  */

Generated by: LCOV version 1.13