Branch data Line data Source code
# 1 : : // Copyright (c) 2012-2022 The Bitcoin Core developers # 2 : : // Distributed under the MIT software license, see the accompanying # 3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php. # 4 : : # 5 : : #include <httpserver.h> # 6 : : #include <test/util/setup_common.h> # 7 : : # 8 : : #include <boost/test/unit_test.hpp> # 9 : : # 10 : : BOOST_FIXTURE_TEST_SUITE(httpserver_tests, BasicTestingSetup) # 11 : : # 12 : : BOOST_AUTO_TEST_CASE(test_query_parameters) # 13 : 2 : { # 14 : 2 : std::string uri {}; # 15 : : # 16 : : // No parameters # 17 : 2 : uri = "localhost:8080/rest/headers/someresource.json"; # 18 : 2 : BOOST_CHECK(!GetQueryParameterFromUri(uri.c_str(), "p1").has_value()); # 19 : : # 20 : : // Single parameter # 21 : 2 : uri = "localhost:8080/rest/endpoint/someresource.json?p1=v1"; # 22 : 2 : BOOST_CHECK_EQUAL(GetQueryParameterFromUri(uri.c_str(), "p1").value(), "v1"); # 23 : 2 : BOOST_CHECK(!GetQueryParameterFromUri(uri.c_str(), "p2").has_value()); # 24 : : # 25 : : // Multiple parameters # 26 : 2 : uri = "/rest/endpoint/someresource.json?p1=v1&p2=v2"; # 27 : 2 : BOOST_CHECK_EQUAL(GetQueryParameterFromUri(uri.c_str(), "p1").value(), "v1"); # 28 : 2 : BOOST_CHECK_EQUAL(GetQueryParameterFromUri(uri.c_str(), "p2").value(), "v2"); # 29 : : # 30 : : // If the query string contains duplicate keys, the first value is returned # 31 : 2 : uri = "/rest/endpoint/someresource.json?p1=v1&p1=v2"; # 32 : 2 : BOOST_CHECK_EQUAL(GetQueryParameterFromUri(uri.c_str(), "p1").value(), "v1"); # 33 : : # 34 : : // Invalid query string syntax is the same as not having parameters # 35 : 2 : uri = "/rest/endpoint/someresource.json&p1=v1&p2=v2"; # 36 : 2 : BOOST_CHECK(!GetQueryParameterFromUri(uri.c_str(), "p1").has_value()); # 37 : 2 : } # 38 : : BOOST_AUTO_TEST_SUITE_END()