diff --git a/src/hurl/hurl.cc b/src/hurl/hurl.cc index 4f1417f..d13e400 100644 --- a/src/hurl/hurl.cc +++ b/src/hurl/hurl.cc @@ -117,6 +117,7 @@ return STATUS_ERROR;\ }\ } while(0) +#define _STRN_CASE_CMP(_a,_b) ((strncasecmp(_a, _b, strlen(_a)) == 0) && (strlen(_a) == strlen(_b))) //! ---------------------------------------------------------------------------- //! types //! ---------------------------------------------------------------------------- @@ -510,10 +511,10 @@ class request { bool l_replace = false; bool l_remove = false; if (!strcasecmp(a_key.c_str(), "User-Agent") || - !strcasecmp(a_key.c_str(), "Referer") || - !strcasecmp(a_key.c_str(), "Accept") || - !strcasecmp(a_key.c_str(), "X-Forwarded-For") || - !strcasecmp(a_key.c_str(), "Host")) + !strcasecmp(a_key.c_str(), "Referer") || + !strcasecmp(a_key.c_str(), "Accept") || + !strcasecmp(a_key.c_str(), "X-Forwarded-For") || + !strcasecmp(a_key.c_str(), "Host")) { l_replace = true; if (a_val.empty()) @@ -528,7 +529,7 @@ class request { ns_hurl::kv_map_list_t::iterator i_obj = m_headers.find(a_key); if (i_obj != m_headers.end()) { - // Special handling for Host/User-agent/referer + // Special handling for Host/User-agent/Referer if (l_replace) { i_obj->second.clear(); @@ -1170,7 +1171,6 @@ int32_t http_session::srequest(void) } ns_hurl::kv_map_list_t::const_iterator i_hdr; bool l_specd_host = false; -#define STRN_CASE_CMP(_a,_b) (strncasecmp(_a, _b, strlen(_a)) == 0) #define SET_IF_V1(_key) do { \ i_hdr = m_request->m_headers.find(_key);\ if (i_hdr != m_request->m_headers.end()) { \ @@ -1193,9 +1193,9 @@ if (i_hdr != m_request->m_headers.end()) { \ i_hl != m_request->m_headers.end(); ++i_hl) { - if (STRN_CASE_CMP("host", i_hl->first.c_str()) || - STRN_CASE_CMP("accept", i_hl->first.c_str()) || - STRN_CASE_CMP("user-agent", i_hl->first.c_str())) + if (_STRN_CASE_CMP("host", i_hl->first.c_str()) || + _STRN_CASE_CMP("accept", i_hl->first.c_str()) || + _STRN_CASE_CMP("user-agent", i_hl->first.c_str())) { continue; } @@ -1847,15 +1847,15 @@ int32_t h2_session::srequest(void) // ----------------------------------------- // std headers // ----------------------------------------- -#define SET_IF(_key) do { \ +#define _SET_IF(_key) do { \ i_hdr = m_request->m_headers.find(_key);\ if (i_hdr != m_request->m_headers.end()) { \ SET_HEADER(l_hdr_idx, i_hdr->first, i_hdr->second.front()); \ ++l_hdr_idx;\ }\ } while(0) - SET_IF("user-agent"); - SET_IF("accept"); + _SET_IF("user-agent"); + _SET_IF("accept"); // ----------------------------------------- // the rest... // ----------------------------------------- @@ -1863,14 +1863,13 @@ int32_t h2_session::srequest(void) i_hdr != m_request->m_headers.end(); ++i_hdr) { -#define STRN_CASE_CMP(_a,_b) (strncasecmp(_a, _b, strlen(_a)) == 0) - if (STRN_CASE_CMP("accept", i_hdr->first.c_str()) || - STRN_CASE_CMP("user-agent", i_hdr->first.c_str())) + if (_STRN_CASE_CMP("accept", i_hdr->first.c_str()) || + _STRN_CASE_CMP("user-agent", i_hdr->first.c_str())) { continue; } if (!m_request->m_no_host && - STRN_CASE_CMP("host", i_hdr->first.c_str())) + _STRN_CASE_CMP("host", i_hdr->first.c_str())) { continue; } diff --git a/tests/whitebox/CMakeLists.txt b/tests/whitebox/CMakeLists.txt index 0fc099a..16cefb7 100644 --- a/tests/whitebox/CMakeLists.txt +++ b/tests/whitebox/CMakeLists.txt @@ -1,8 +1,27 @@ # ------------------------------------------------------------------------------ +# includes +# ------------------------------------------------------------------------------ +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/src/core + ${CMAKE_SOURCE_DIR}/ext +) +# ------------------------------------------------------------------------------ # build catch # ------------------------------------------------------------------------------ -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ../../ext/) -add_library(compiled_catch STATIC ${CMAKE_CURRENT_SOURCE_DIR}/../../ext/catch/catch.hpp _catch.cc) +add_library(compiled_catch STATIC ${CMAKE_SOURCE_DIR}/ext/catch/catch.hpp _catch.cc) +# ------------------------------------------------------------------------------ +# macros +# ------------------------------------------------------------------------------ +macro (add_hurl_wb_test test_name) + add_executable("wb_${test_name}" "wb_${test_name}.cc") + target_link_libraries("wb_${test_name}" + ${DEBUG_LIBRARIES} + compiled_catch + ${CMAKE_BINARY_DIR}/src/core/libhurlcore.a + ${LIBRARIES}) + add_test(${test_name} "wb_${test_name}") +endmacro() # ------------------------------------------------------------------------------ # fix for error # ... diff --git a/tests/whitebox/dns/CMakeLists.txt b/tests/whitebox/dns/CMakeLists.txt index ffe0495..f04568d 100644 --- a/tests/whitebox/dns/CMakeLists.txt +++ b/tests/whitebox/dns/CMakeLists.txt @@ -1,28 +1,2 @@ -# ------------------------------------------------------------------------------ -# wb_ai_cache -# ------------------------------------------------------------------------------ -SET(SRCS wb_ai_cache.cc) -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src/core) -add_executable(wb_ai_cache ${HDRS} ${SRCS}) -target_link_libraries(wb_ai_cache - compiled_catch - ${DEBUG_LIBRARIES} - ${CMAKE_BINARY_DIR}/src/core/libhurlcore.a - ${LIBRARIES} -) -SET_TARGET_PROPERTIES(wb_ai_cache PROPERTIES OUTPUT_NAME "wb_ai_cache") -add_test(ai_cache wb_ai_cache) -# ------------------------------------------------------------------------------ -# wb_nresolver -# ------------------------------------------------------------------------------ -SET(SRCS wb_nresolver.cc) -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src/core) -add_executable(wb_nresolver ${HDRS} ${SRCS}) -target_link_libraries(wb_nresolver - compiled_catch - ${DEBUG_LIBRARIES} - ${CMAKE_BINARY_DIR}/src/core/libhurlcore.a - ${LIBRARIES} -) -SET_TARGET_PROPERTIES(wb_nresolver PROPERTIES OUTPUT_NAME "wb_nresolver") -add_test(nresolver wb_nresolver) +add_hurl_wb_test(ai_cache) +add_hurl_wb_test(nresolver) diff --git a/tests/whitebox/nconn/CMakeLists.txt b/tests/whitebox/nconn/CMakeLists.txt index edbdfd3..e9dda8d 100644 --- a/tests/whitebox/nconn/CMakeLists.txt +++ b/tests/whitebox/nconn/CMakeLists.txt @@ -1,18 +1,2 @@ -# ------------------------------------------------------------------------------ -# wb_nconn_tcp -# ------------------------------------------------------------------------------ -SET(SRCS wb_nconn_tcp.cc) -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src/core) -add_executable(wb_nconn_tcp ${HDRS} ${SRCS}) -target_link_libraries(wb_nconn_tcp compiled_catch ${DEBUG_LIBRARIES} ${CMAKE_BINARY_DIR}/src/core/libhurlcore.a ${LIBRARIES}) -SET_TARGET_PROPERTIES(wb_nconn_tcp PROPERTIES OUTPUT_NAME "wb_nconn_tcp") -add_test(nconn_tcp wb_nconn_tcp) -# ------------------------------------------------------------------------------ -# wb_nconn_tls -# ------------------------------------------------------------------------------ -SET(SRCS wb_nconn_tls.cc) -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src/core) -add_executable(wb_nconn_tls ${HDRS} ${SRCS}) -target_link_libraries(wb_nconn_tls compiled_catch ${DEBUG_LIBRARIES} ${CMAKE_BINARY_DIR}/src/core/libhurlcore.a ${LIBRARIES}) -SET_TARGET_PROPERTIES(wb_nconn_tls PROPERTIES OUTPUT_NAME "wb_nconn_tls") -add_test(nconn_tls wb_nconn_tls) +add_hurl_wb_test(nconn_tcp) +add_hurl_wb_test(nconn_tls) diff --git a/tests/whitebox/support/CMakeLists.txt b/tests/whitebox/support/CMakeLists.txt index e6f80fa..281a888 100644 --- a/tests/whitebox/support/CMakeLists.txt +++ b/tests/whitebox/support/CMakeLists.txt @@ -1,27 +1,4 @@ -# ------------------------------------------------------------------------------ -# wb_nbq -# ------------------------------------------------------------------------------ -SET(SRCS wb_nbq.cc) -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src/core) -add_executable(wb_nbq ${HDRS} ${SRCS}) -target_link_libraries(wb_nbq compiled_catch ${DEBUG_LIBRARIES} ${CMAKE_BINARY_DIR}/src/core/libhurlcore.a ${LIBRARIES}) -SET_TARGET_PROPERTIES(wb_nbq PROPERTIES OUTPUT_NAME "wb_nbq") -add_test(nbq wb_nbq) -# ------------------------------------------------------------------------------ -# wb_obj_pool -# ------------------------------------------------------------------------------ -SET(SRCS wb_obj_pool.cc) -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src/core) -add_executable(wb_obj_pool ${HDRS} ${SRCS}) -target_link_libraries(wb_obj_pool compiled_catch ${DEBUG_LIBRARIES} ${CMAKE_BINARY_DIR}/src/core/libhurlcore.a ${LIBRARIES}) -SET_TARGET_PROPERTIES(wb_obj_pool PROPERTIES OUTPUT_NAME "wb_obj_pool") -add_test(obj_pool wb_obj_pool) -# ------------------------------------------------------------------------------ -# wb_nlru -# ------------------------------------------------------------------------------ -SET(SRCS wb_nlru.cc) -include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/src/core) -add_executable(wb_nlru ${HDRS} ${SRCS}) -target_link_libraries(wb_nlru compiled_catch ${DEBUG_LIBRARIES} ${CMAKE_BINARY_DIR}/src/core/libhurlcore.a ${LIBRARIES}) -SET_TARGET_PROPERTIES(wb_nlru PROPERTIES OUTPUT_NAME "wb_nlru") -add_test(nlru wb_nlru) +add_hurl_wb_test(nbq) +add_hurl_wb_test(obj_pool) +add_hurl_wb_test(nlru) +add_hurl_wb_test(kv_map) diff --git a/tests/whitebox/support/wb_kv_map.cc b/tests/whitebox/support/wb_kv_map.cc new file mode 100644 index 0000000..d8e6338 --- /dev/null +++ b/tests/whitebox/support/wb_kv_map.cc @@ -0,0 +1,62 @@ +//! ---------------------------------------------------------------------------- +//! Copyright Edgio Inc. +//! +//! \file: TODO +//! \details: TODO +//! +//! Licensed under the terms of the Apache 2.0 open source license. +//! Please refer to the LICENSE file in the project root for the terms. +//! ---------------------------------------------------------------------------- +//! ---------------------------------------------------------------------------- +//! includes +//! ---------------------------------------------------------------------------- +#include "status.h" +#include "support/ndebug.h" +#include "support/kv_map_list.h" +#include "catch/catch.hpp" +//! ---------------------------------------------------------------------------- +//! append +//! ---------------------------------------------------------------------------- +static inline void _append(ns_hurl::kv_map_list_t& a_map, + const std::string& a_key, + const std::string& a_val) +{ + ns_hurl::kv_map_list_t::iterator i_obj = a_map.find(a_key); + if (i_obj != a_map.end()) + { + i_obj->second.push_back(a_val); + return; + } + ns_hurl::str_list_t l_list; + l_list.push_back(a_val); + a_map[a_key] = l_list; + return; +} +//! ---------------------------------------------------------------------------- +//! append +//! ---------------------------------------------------------------------------- +static inline void _show(ns_hurl::kv_map_list_t& a_map) +{ + for(auto && i_k : a_map) + { + NDBG_OUTPUT("%s: ", i_k.first.c_str()); + for(auto && i_v : i_k.second) + { + NDBG_OUTPUT("%s ", i_v.c_str()); + } + NDBG_OUTPUT("\n"); + } +} +//! ---------------------------------------------------------------------------- +//! Tests +//! ---------------------------------------------------------------------------- +TEST_CASE( "kv_map test", "[kv_map]" ) { + SECTION("basic test") { + ns_hurl::kv_map_list_t l_kvml; + NDBG_PRINT("APPEND\n"); + _append(l_kvml, "TEST", "TEST"); + NDBG_PRINT("APPEND\n"); + _append(l_kvml, "TEST-TEST", "TEST"); + REQUIRE((l_kvml.size() == 2)); + } +}