LCOV - code coverage report
Current view: top level - tests - catch_validator.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 137 137
Test Date: 2026-11-09 21:32:01 Functions: 100.0 % 1 1
Legend: Lines: hit not hit

            Line data    Source code
       1              : // Copyright (c) 2011-2026  Made to Order Software Corp.  All Rights Reserved
       2              : //
       3              : // https://snapwebsites.org/project/edhttp
       4              : // contact@m2osw.com
       5              : //
       6              : // This program 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              : // This program 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://www.gnu.org/licenses/>.
      18              : 
      19              : /** \file
      20              :  * \brief Verify the validator_uri class.
      21              :  *
      22              :  * This file implements tests to verify that the validator_uri
      23              :  * class functions as expected.
      24              :  */
      25              : 
      26              : // self
      27              : //
      28              : #include    "catch_main.h"
      29              : 
      30              : 
      31              : // edhttp
      32              : //
      33              : #include    <edhttp/validator_uri.h>
      34              : 
      35              : 
      36              : 
      37            9 : CATCH_TEST_CASE("validator_uri", "[domain]")
      38              : {
      39            9 :     CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (default)")
      40              :     {
      41            3 :         advgetopt::validator::pointer_t v(advgetopt::validator::create("uri"));
      42              : 
      43            1 :         CATCH_REQUIRE(v != nullptr);
      44            1 :         CATCH_REQUIRE(v->name() == "uri");
      45              : 
      46            3 :         CATCH_REQUIRE(v->validate("http://snap.website/"));
      47            3 :         CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
      48            3 :         CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
      49            3 :         CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
      50              : 
      51            3 :         CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
      52            3 :         CATCH_REQUIRE_FALSE(v->validate("bad:too"));
      53            3 :         CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
      54              : 
      55            3 :         CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
      56            3 :         CATCH_REQUIRE_FALSE(v->validate("cdu:/refused/by/default"));
      57            1 :     }
      58           10 :     CATCH_END_SECTION()
      59              : 
      60            9 :     CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (refuse all)")
      61              :     {
      62            3 :         advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(refuse-ip, refuse-path)"));
      63              : 
      64            1 :         CATCH_REQUIRE(v != nullptr);
      65            1 :         CATCH_REQUIRE(v->name() == "uri");
      66              : 
      67            3 :         CATCH_REQUIRE(v->validate("http://snap.website/"));
      68            3 :         CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
      69            3 :         CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
      70            3 :         CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
      71              : 
      72            3 :         CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
      73            3 :         CATCH_REQUIRE_FALSE(v->validate("bad:too"));
      74            3 :         CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
      75              : 
      76            3 :         CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
      77            3 :         CATCH_REQUIRE_FALSE(v->validate("cdu:/refused/by/default"));
      78            1 :     }
      79           10 :     CATCH_END_SECTION()
      80              : 
      81            9 :     CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (refuse ip)")
      82              :     {
      83            3 :         advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(refuse_ip)"));
      84              : 
      85            1 :         CATCH_REQUIRE(v != nullptr);
      86            1 :         CATCH_REQUIRE(v->name() == "uri");
      87              : 
      88            3 :         CATCH_REQUIRE(v->validate("http://snap.website/"));
      89            3 :         CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
      90            3 :         CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
      91            3 :         CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
      92              : 
      93            3 :         CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
      94            3 :         CATCH_REQUIRE_FALSE(v->validate("bad:too"));
      95            3 :         CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
      96              : 
      97            3 :         CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
      98            3 :         CATCH_REQUIRE_FALSE(v->validate("cdu:/refused/by/default"));
      99            1 :     }
     100           10 :     CATCH_END_SECTION()
     101              : 
     102            9 :     CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (refuse path)")
     103              :     {
     104            3 :         advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(refuse_path)"));
     105              : 
     106            1 :         CATCH_REQUIRE(v != nullptr);
     107            1 :         CATCH_REQUIRE(v->name() == "uri");
     108              : 
     109            3 :         CATCH_REQUIRE(v->validate("http://snap.website/"));
     110            3 :         CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
     111            3 :         CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
     112            3 :         CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
     113              : 
     114            3 :         CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
     115            3 :         CATCH_REQUIRE_FALSE(v->validate("bad:too"));
     116            3 :         CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
     117              : 
     118            3 :         CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
     119            3 :         CATCH_REQUIRE_FALSE(v->validate("cdu:/refused/by/default"));
     120            1 :     }
     121           10 :     CATCH_END_SECTION()
     122              : 
     123            9 :     CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (accept IP, dash)")
     124              :     {
     125            3 :         advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(accept-ip)"));
     126              : 
     127            1 :         CATCH_REQUIRE(v != nullptr);
     128            1 :         CATCH_REQUIRE(v->name() == "uri");
     129              : 
     130            3 :         CATCH_REQUIRE(v->validate("http://snap.website/"));
     131            3 :         CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
     132            3 :         CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
     133            3 :         CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
     134            3 :         CATCH_REQUIRE(v->validate("http://127.0.0.1/accepted?this#one"));
     135              : 
     136            3 :         CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
     137            3 :         CATCH_REQUIRE_FALSE(v->validate("bad:too"));
     138            3 :         CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
     139              : 
     140            3 :         CATCH_REQUIRE_FALSE(v->validate("/refused/by/default"));
     141            1 :     }
     142           10 :     CATCH_END_SECTION()
     143              : 
     144            9 :     CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (accept IP, underscore)")
     145              :     {
     146            3 :         advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(accept_ip)"));
     147              : 
     148            1 :         CATCH_REQUIRE(v != nullptr);
     149            1 :         CATCH_REQUIRE(v->name() == "uri");
     150              : 
     151            3 :         CATCH_REQUIRE(v->validate("http://snap.website/"));
     152            3 :         CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
     153            3 :         CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
     154            3 :         CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
     155            3 :         CATCH_REQUIRE(v->validate("http://127.0.0.1/accepted?this#one"));
     156              : 
     157            3 :         CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
     158            3 :         CATCH_REQUIRE_FALSE(v->validate("bad:too"));
     159            3 :         CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
     160              : 
     161            3 :         CATCH_REQUIRE_FALSE(v->validate("/refused/by/default"));
     162            1 :     }
     163           10 :     CATCH_END_SECTION()
     164              : 
     165            9 :     CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (accept Unix path, dash)")
     166              :     {
     167            3 :         advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(accept-path)"));
     168              : 
     169            1 :         CATCH_REQUIRE(v != nullptr);
     170            1 :         CATCH_REQUIRE(v->name() == "uri");
     171              : 
     172            3 :         CATCH_REQUIRE(v->validate("http://snap.website/"));
     173            3 :         CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
     174            3 :         CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
     175            3 :         CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
     176            3 :         CATCH_REQUIRE(v->validate("cdu:///refused/by/default"));
     177              : 
     178            3 :         CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
     179            3 :         CATCH_REQUIRE_FALSE(v->validate("bad:too"));
     180            3 :         CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
     181              : 
     182            3 :         CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
     183            1 :     }
     184           10 :     CATCH_END_SECTION()
     185              : 
     186            9 :     CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (accept Unix path, underscore)")
     187              :     {
     188            3 :         advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(accept_path)"));
     189              : 
     190            1 :         CATCH_REQUIRE(v != nullptr);
     191            1 :         CATCH_REQUIRE(v->name() == "uri");
     192              : 
     193            3 :         CATCH_REQUIRE(v->validate("http://snap.website/"));
     194            3 :         CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
     195            3 :         CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
     196            3 :         CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
     197            3 :         CATCH_REQUIRE(v->validate("cdu:///refused/by/default"));
     198              : 
     199            3 :         CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
     200            3 :         CATCH_REQUIRE_FALSE(v->validate("bad:too"));
     201            3 :         CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
     202              : 
     203            3 :         CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
     204            1 :     }
     205           10 :     CATCH_END_SECTION()
     206              : 
     207            9 :     CATCH_START_SECTION("validator_uri: validate valid and invalid URIs (invalid parameter)")
     208              :     {
     209              :         // TODO: verify error message
     210            3 :         advgetopt::validator::pointer_t v(advgetopt::validator::create("uri(allow_path)"));
     211              : 
     212            1 :         CATCH_REQUIRE(v != nullptr);
     213            1 :         CATCH_REQUIRE(v->name() == "uri");
     214              : 
     215            3 :         CATCH_REQUIRE(v->validate("http://snap.website/"));
     216            3 :         CATCH_REQUIRE(v->validate("https://snap.website/with/path"));
     217            3 :         CATCH_REQUIRE(v->validate("gopher://snap.website/?with=param"));
     218            3 :         CATCH_REQUIRE(v->validate("cd://snap.website/#with-anchor"));
     219              : 
     220            3 :         CATCH_REQUIRE_FALSE(v->validate("://bar.uri/"));
     221            3 :         CATCH_REQUIRE_FALSE(v->validate("bad:too"));
     222            3 :         CATCH_REQUIRE_FALSE(v->validate("---really bad---"));
     223              : 
     224            3 :         CATCH_REQUIRE_FALSE(v->validate("http://127.0.0.1/refused-by-default"));
     225            3 :         CATCH_REQUIRE_FALSE(v->validate("cdu:///refused/by/default"));
     226            1 :     }
     227           10 :     CATCH_END_SECTION()
     228            9 : }
     229              : 
     230              : 
     231              : // vim: ts=4 sw=4 et
        

Generated by: LCOV version 2.0-1

Snap C++ | List of projects | List of versions