From 8746c27fbbd0ad29d2396cd4d96bca09105ecf96 Mon Sep 17 00:00:00 2001 From: Otto Bruggeman Date: Tue, 22 Apr 2025 23:00:37 +0200 Subject: [PATCH] Use a lambda instead of std::bind1st Add a test for parsing http headers inside urlstest.cpp Adapt the expected outcome of urlstest from 12 to 14 errors --- src/pcm-sensor-server.cpp | 4 ++-- tests/test.sh | 6 +++--- tests/urltest.cpp | 22 ++++++++++++++++++++-- 3 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/pcm-sensor-server.cpp b/src/pcm-sensor-server.cpp index c2386362..718200bf 100644 --- a/src/pcm-sensor-server.cpp +++ b/src/pcm-sensor-server.cpp @@ -2218,9 +2218,9 @@ class HTTPHeader { while ( ss.good() ) { std::getline( ss, s, listSeparatorChar ); // Remove leading whitespace - s.erase( s.begin(), std::find_if( s.begin(), s.end(), std::bind1st( std::not_equal_to(), ' ' ) ) ); + s.erase( s.begin(), std::find_if( s.begin(), s.end(), []( char c ){ return c != ' '; } ) ); // Remove trailing whitespace - s.erase( std::find_if( s.rbegin(), s.rend(), std::bind1st( std::not_equal_to(), ' ') ).base(), s.end() ); + s.erase( std::find_if( s.rbegin(), s.rend(), []( char c ){ return c != ' '; } ).base(), s.end() ); elementList.push_back( s ); } return elementList; diff --git a/tests/test.sh b/tests/test.sh index 2190aea1..df081d7a 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -210,9 +210,9 @@ fi echo Testing urltest ./tests/urltest -# We have 12 expected errors, anything else is a bug -if [ "$?" != 12 ]; then - echo "Error in urltest, 12 expected errors but found $?!" +# We have 14 expected errors, anything else is a bug +if [ "$?" != 14 ]; then + echo "Error in urltest, 14 expected errors but found $?!" exit 1 fi diff --git a/tests/urltest.cpp b/tests/urltest.cpp index f8ec2e3e..7a407452 100644 --- a/tests/urltest.cpp +++ b/tests/urltest.cpp @@ -28,8 +28,19 @@ std::vector urls{ "http://ww\x00\x00\x00rstmark\x0a" }; +std::vector headers{ + "Content-Encoding text/html", // Invalid header no colon found + " Content-Encoding : text/html ", // Valid header, should clean up the whitespace before and after + " H o s t : my.host.com", // Valid, spaces in header name should be accepted and silenty removed + "MyUnknownHeaderType : value", // Valid, MyUnknownHeaderType is considered a custom header type + " Host : \"my.host.com" // Invalid, header value not properly quoted +}; + int main( int, char** ) { - int errors = 0; + // httpheader::debugPrint uses dbg(3), picking 5 for future changes + debug::dyn_debug_level( 5 ); + + int errors = 0, errors2 = 0; for ( auto & s : urls ) { try { std::cout << s << "\n"; @@ -40,5 +51,12 @@ int main( int, char** ) { ++errors; } } - return errors; + for ( auto & h : headers ) { + std::cout << h << "\n"; + HTTPHeader hh = HTTPHeader::parse( h ); + hh.debugPrint(); + if ( hh.type() == HeaderType::Invalid ) + ++errors2; + } + return errors+errors2; }