This is an automated email from the ASF dual-hosted git repository.

zwoop pushed a commit to branch 9.2.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/9.2.x by this push:
     new ae6819c8d Revert "Fixes silent header duplication that occurs upon 
successful revalidation when duplicate headers are present (#9527)"
ae6819c8d is described below

commit ae6819c8d929099cdc2eaa3aaf48f5724ad6d18d
Author: Leif Hedstrom <[email protected]>
AuthorDate: Wed Apr 5 15:00:04 2023 -0600

    Revert "Fixes silent header duplication that occurs upon successful 
revalidation when duplicate headers are present (#9527)"
    
    This reverts commit c7ed799ccc16c7cebbd8ce2b5951b9911bf65530.
    
    Instead, we'll do #9534
---
 proxy/http/HttpTransact.cc                 |   8 +-
 proxy/http/Makefile.am                     |  29 +-
 proxy/http/unit_tests/main.cc              |  60 ---
 proxy/http/unit_tests/test_HttpTransact.cc | 573 -----------------------------
 4 files changed, 2 insertions(+), 668 deletions(-)

diff --git a/proxy/http/HttpTransact.cc b/proxy/http/HttpTransact.cc
index 39e78c9c2..b2c1677a8 100644
--- a/proxy/http/HttpTransact.cc
+++ b/proxy/http/HttpTransact.cc
@@ -5109,17 +5109,11 @@ 
HttpTransact::merge_response_header_with_cached_header(HTTPHdr *cached_header, H
     //
     if (field.m_next_dup) {
       if (dups_seen == false) {
-        const char *name2;
-        int name_len2;
-
         // use a second iterator to delete the
         // remaining response headers in the cached response,
         // so that they will be added in the next iterations.
         for (auto spot2 = spot; spot2 != limit; ++spot2) {
-          MIMEField &field2{*spot2};
-          name2 = field2.name_get(&name_len2);
-
-          cached_header->field_delete(name2, name_len2);
+          cached_header->field_delete(&*spot2, true);
         }
         dups_seen = true;
       }
diff --git a/proxy/http/Makefile.am b/proxy/http/Makefile.am
index 8afa4bd0d..53f983251 100644
--- a/proxy/http/Makefile.am
+++ b/proxy/http/Makefile.am
@@ -85,7 +85,7 @@ if BUILD_TESTS
 libhttp_a_SOURCES += RegressionHttpTransact.cc
 endif
 
-check_PROGRAMS = test_proxy_http test_PreWarm test_HttpTransact
+check_PROGRAMS = test_proxy_http test_PreWarm
 
 TESTS = $(check_PROGRAMS)
 
@@ -123,33 +123,6 @@ test_PreWarm_LDADD = \
 test_PreWarm_SOURCES = \
        unit_tests/test_PreWarm.cc
 
-test_HttpTransact_CPPFLAGS = \
-       $(AM_CPPFLAGS) \
-       -I$(abs_top_srcdir)/tests/include
-
-if OS_LINUX
-test_HttpTransact_LDFLAGS = $(AM_LDFLAGS)\
-       -Wl,--unresolved-symbols=ignore-all
-else
-test_HttpTransact_LDFLAGS = $(AM_LDFLAGS)\
-    -Wl,-undefined -Wl,suppress -Wl,-flat_namespace -Wl,-dead_strip
-endif
-
-test_HttpTransact_LDADD = \
-       $(top_builddir)/src/tscore/libtscore.la \
-       $(top_builddir)/src/records/librecords_p.a \
-       $(top_builddir)/proxy/ProxySession.o \
-       $(top_builddir)/proxy/http/HttpTransact.o \
-       $(top_builddir)/proxy/http/HttpTransactHeaders.o \
-       $(top_builddir)/proxy/hdrs/libhdrs.a \
-       $(top_builddir)/iocore/eventsystem/libinkevent.a \
-       @SWOC_LIBS@
-
-test_HttpTransact_SOURCES = \
-       ../../iocore/cache/test/stub.cc \
-       unit_tests/main.cc \
-       unit_tests/test_HttpTransact.cc
-
 clang-tidy-local: $(libhttp_a_SOURCES) $(noinst_HEADERS)
        $(CXX_Clang_Tidy)
 
diff --git a/proxy/http/unit_tests/main.cc b/proxy/http/unit_tests/main.cc
deleted file mode 100644
index 334de97c4..000000000
--- a/proxy/http/unit_tests/main.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-/** @file
-
-    The main file for tests
-
-    @section license License
-
-    Licensed to the Apache Software Foundation (ASF) under one
-    or more contributor license agreements.  See the NOTICE file
-    distributed with this work for additional information
-    regarding copyright ownership.  The ASF licenses this file
-    to you under the Apache License, Version 2.0 (the
-    "License"); you may not use this file except in compliance
-    with the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-*/
-
-#define CATCH_CONFIG_MAIN
-#include "catch.hpp"
-
-#include "tscore/I_Layout.h"
-
-#include "I_EventSystem.h"
-#include "records/I_RecordsConfig.h"
-
-#include "diags.i"
-
-#define TEST_THREADS 1
-
-struct EventProcessorListener : Catch::TestEventListenerBase {
-  using TestEventListenerBase::TestEventListenerBase;
-
-  void
-  testRunStarting(Catch::TestRunInfo const & /* testRunInfo */) override
-  {
-    Layout::create();
-    init_diags("", nullptr);
-    RecProcessInit();
-    LibRecordsConfigInit();
-
-    ink_event_system_init(EVENT_SYSTEM_MODULE_PUBLIC_VERSION);
-    eventProcessor.start(TEST_THREADS);
-
-    EThread *main_thread = new EThread;
-    main_thread->set_specific();
-  }
-
-  void
-  testRunEnded(Catch::TestRunStats const & /* testRunStats */) override
-  {
-  }
-};
-
-CATCH_REGISTER_LISTENER(EventProcessorListener);
diff --git a/proxy/http/unit_tests/test_HttpTransact.cc 
b/proxy/http/unit_tests/test_HttpTransact.cc
deleted file mode 100644
index caa07e9e7..000000000
--- a/proxy/http/unit_tests/test_HttpTransact.cc
+++ /dev/null
@@ -1,573 +0,0 @@
-/** @file
-
-  Unit Tests for HttpTransact
-
-  @section license License
-
-  Licensed to the Apache Software Foundation (ASF) under one
-  or more contributor license agreements.  See the NOTICE file
-  distributed with this work for additional information
-  regarding copyright ownership.  The ASF licenses this file
-  to you under the Apache License, Version 2.0 (the
-  "License"); you may not use this file except in compliance
-  with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
- */
-
-#include <string_view>
-#include "tscore/Diags.h"
-#include "HttpTransact.h"
-#include "records/I_RecordsConfig.h"
-
-#include "catch.hpp"
-
-TEST_CASE("HttpTransact", "[http]")
-{
-  url_init();
-  mime_init();
-  http_init();
-
-  SECTION("HttpTransact::merge_response_header_with_cached_header")
-  {
-    SECTION("Basic")
-    {
-      HTTPHdr hdr1;
-      HTTPHdr hdr2;
-      MIMEField *field;
-      const char *str;
-      int len;
-
-      struct header {
-        std::string_view name;
-        std::string_view value;
-      };
-
-      struct header input1[] = {
-        {"AAA", "111"},
-        {"BBB", "222"},
-        {"CCC", "333"},
-      };
-      struct header input2[] = {
-        {"DDD", "444"},
-        {"EEE", "555"},
-        {"FFF", "666"}
-      };
-
-      hdr1.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : input1) {
-        field = hdr1.field_create(entry.name.data(), entry.name.length());
-        hdr1.field_attach(field);
-        hdr1.field_value_set(field, entry.value.data(), entry.value.length());
-      }
-
-      hdr2.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : input2) {
-        field = hdr2.field_create(entry.name.data(), entry.name.length());
-        hdr2.field_attach(field);
-        hdr2.field_value_set(field, entry.value.data(), entry.value.length());
-      }
-
-      HttpTransact::merge_response_header_with_cached_header(&hdr1, &hdr2);
-
-      CHECK(hdr1.fields_count() == 6);
-
-      field = hdr1.field_find("AAA", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "111", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("BBB", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "222", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("CCC", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "333", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("DDD", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "444", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("EEE", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "555", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("FFF", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "666", len) == 0);
-      CHECK(field->has_dups() == false);
-    }
-
-    SECTION("Have comon headers")
-    {
-      HTTPHdr hdr1;
-      HTTPHdr hdr2;
-      MIMEField *field;
-      const char *str;
-      int len;
-
-      struct header {
-        std::string_view name;
-        std::string_view value;
-      };
-
-      struct header input1[] = {
-        {"AAA", "111"},
-        {"BBB", "222"},
-        {"CCC", "333"},
-      };
-      struct header input2[] = {
-        {"DDD", "444"},
-        {"BBB", "555"},
-        {"FFF", "666"}
-      };
-
-      hdr1.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : input1) {
-        field = hdr1.field_create(entry.name.data(), entry.name.length());
-        hdr1.field_attach(field);
-        hdr1.field_value_set(field, entry.value.data(), entry.value.length());
-      }
-
-      hdr2.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : input2) {
-        field = hdr2.field_create(entry.name.data(), entry.name.length());
-        hdr2.field_attach(field);
-        hdr2.field_value_set(field, entry.value.data(), entry.value.length());
-      }
-
-      HttpTransact::merge_response_header_with_cached_header(&hdr1, &hdr2);
-
-      CHECK(hdr1.fields_count() == 5);
-
-      field = hdr1.field_find("AAA", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "111", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("BBB", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "555", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("CCC", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "333", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("DDD", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "444", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("FFF", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "666", len) == 0);
-      CHECK(field->has_dups() == false);
-    }
-
-    SECTION("Have dup headers")
-    {
-      HTTPHdr hdr1;
-      HTTPHdr hdr2;
-      MIMEField *field;
-      const char *str;
-      int len;
-
-      struct header {
-        std::string_view name;
-        std::string_view value;
-      };
-
-      struct header input1[] = {
-        {"AAA", "111"},
-        {"BBB", "222"},
-        {"CCC", "333"},
-      };
-      struct header input2[] = {
-        {"DDD", "444"},
-        {"EEE", "555"},
-        {"EEE", "666"}
-      };
-
-      hdr1.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : input1) {
-        field = hdr1.field_create(entry.name.data(), entry.name.length());
-        hdr1.field_attach(field);
-        hdr1.field_value_set(field, entry.value.data(), entry.value.length());
-      }
-
-      hdr2.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : input2) {
-        field = hdr2.field_create(entry.name.data(), entry.name.length());
-        hdr2.field_attach(field);
-        hdr2.field_value_set(field, entry.value.data(), entry.value.length());
-      }
-
-      HttpTransact::merge_response_header_with_cached_header(&hdr1, &hdr2);
-
-      CHECK(hdr1.fields_count() == 6);
-
-      field = hdr1.field_find("AAA", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "111", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("BBB", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "222", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("CCC", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "333", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("DDD", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "444", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("EEE", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "555", len) == 0);
-      CHECK(field->has_dups() == true);
-    }
-
-    SECTION("Have dup headers 2")
-    {
-      HTTPHdr hdr1;
-      HTTPHdr hdr2;
-      MIMEField *field;
-      const char *str;
-      int len;
-
-      struct header {
-        std::string_view name;
-        std::string_view value;
-      };
-
-      struct header input1[] = {
-        {"AAA", "111"},
-        {"BBB", "222"},
-        {"CCC", "333"},
-      };
-      struct header input2[] = {
-        {"DDD", "444"},
-        {"DDD", "555"},
-        {"FFF", "666"}
-      };
-
-      hdr1.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : input1) {
-        field = hdr1.field_create(entry.name.data(), entry.name.length());
-        hdr1.field_attach(field);
-        hdr1.field_value_set(field, entry.value.data(), entry.value.length());
-      }
-
-      hdr2.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : input2) {
-        field = hdr2.field_create(entry.name.data(), entry.name.length());
-        hdr2.field_attach(field);
-        hdr2.field_value_set(field, entry.value.data(), entry.value.length());
-      }
-
-      HttpTransact::merge_response_header_with_cached_header(&hdr1, &hdr2);
-
-      CHECK(hdr1.fields_count() == 6);
-
-      field = hdr1.field_find("AAA", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "111", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("BBB", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "222", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("CCC", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "333", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("DDD", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "444", len) == 0);
-      CHECK(field->has_dups() == true);
-
-      field = hdr1.field_find("FFF", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "666", len) == 0);
-      CHECK(field->has_dups() == false);
-    }
-
-    SECTION("Have common and dup headers")
-    {
-      HTTPHdr hdr1;
-      HTTPHdr hdr2;
-      MIMEField *field;
-      const char *str;
-      int len;
-
-      struct header {
-        std::string_view name;
-        std::string_view value;
-      };
-
-      struct header input1[] = {
-        {"AAA", "111"},
-        {"BBB", "222"},
-        {"CCC", "333"},
-        {"DDD", "444"},
-      };
-      struct header input2[] = {
-        {"AAA", "555"},
-        {"BBB", "666"},
-        {"BBB", "777"},
-        {"CCC", "888"},
-        {"EEE", "999"},
-      };
-
-      hdr1.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : input1) {
-        field = hdr1.field_create(entry.name.data(), entry.name.length());
-        hdr1.field_attach(field);
-        hdr1.field_value_set(field, entry.value.data(), entry.value.length());
-      }
-
-      hdr2.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : input2) {
-        field = hdr2.field_create(entry.name.data(), entry.name.length());
-        hdr2.field_attach(field);
-        hdr2.field_value_set(field, entry.value.data(), entry.value.length());
-      }
-
-      HttpTransact::merge_response_header_with_cached_header(&hdr1, &hdr2);
-
-      CHECK(hdr1.fields_count() == 6);
-
-      field = hdr1.field_find("AAA", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "555", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("BBB", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "666", len) == 0);
-      CHECK(field->has_dups() == true);
-
-      ///////////// Dup //////////////////////////
-      field = field->m_next_dup;
-      str   = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "777", len) == 0);
-      CHECK(field->has_dups() == false);
-      ///////////////////////////////////////
-
-      field = hdr1.field_find("CCC", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "888", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("DDD", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "444", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = hdr1.field_find("EEE", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "999", len) == 0);
-      CHECK(field->has_dups() == false);
-    }
-    SECTION("Response has superset")
-    {
-      HTTPHdr cached_headers;
-      HTTPHdr response_headers;
-      MIMEField *field;
-      const char *str;
-      int len;
-
-      struct header {
-        std::string_view name;
-        std::string_view value;
-      };
-
-      struct header cached[] = {
-        {"Foo",   "111"},
-        {"Fizz",  "555"},
-        {"Bar",   "333"},
-        {"Bop",   "666"},
-        {"Bar",   "222"},
-        {"X-Foo", "aaa"},
-        {"Eat",   "444"},
-      };
-      // Response headers in a 304 should, in theory, match the cached 
headers, but, what if they don't?
-      // The response headers should still be merged into the cached object 
properly given the existing logic.
-      // In the following, the ordering is different from the cached headers, 
the Bar headers are missing, and two duplicate Zip
-      // headers are not in the cached object.
-      struct header response[] = {
-        {"X-Foo", "aaa"},
-        {"Zip",   "888"},
-        {"Zip",   "999"},
-        {"Eat",   "444"},
-        {"Foo",   "111"},
-        {"Fizz",  "555"},
-        {"Bop",   "666"},
-      };
-
-      cached_headers.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : cached) {
-        field = cached_headers.field_create(entry.name.data(), 
entry.name.length());
-        cached_headers.field_attach(field);
-        cached_headers.field_value_set(field, entry.value.data(), 
entry.value.length());
-      }
-
-      response_headers.create(HTTP_TYPE_RESPONSE);
-      for (auto &&entry : response) {
-        field = response_headers.field_create(entry.name.data(), 
entry.name.length());
-        response_headers.field_attach(field);
-        response_headers.field_value_set(field, entry.value.data(), 
entry.value.length());
-      }
-
-      HttpTransact::merge_response_header_with_cached_header(&cached_headers, 
&response_headers);
-
-      CHECK(cached_headers.fields_count() == 9);
-      CHECK(response_headers.fields_count() == 7);
-
-      field = cached_headers.field_find("Foo", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "111", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = cached_headers.field_find("Fizz", 4);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "555", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = cached_headers.field_find("Bop", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "666", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = cached_headers.field_find("X-Foo", 5);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "aaa", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = cached_headers.field_find("Eat", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "444", len) == 0);
-      CHECK(field->has_dups() == false);
-
-      field = cached_headers.field_find("Bar", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "333", len) == 0);
-      CHECK(field->has_dups() == true);
-
-      ///////////// Dup //////////////////////////
-      field = field->m_next_dup;
-      str   = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "222", len) == 0);
-      CHECK(field->has_dups() == false);
-      ///////////////////////////////////////
-
-      field = cached_headers.field_find("Zip", 3);
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "888", len) == 0);
-      CHECK(field->has_dups() == true);
-
-      ///////////// Dup //////////////////////////
-      REQUIRE(field->m_next_dup != nullptr);
-      field = field->m_next_dup;
-      REQUIRE(field != nullptr);
-      str = field->value_get(&len);
-      CHECK(len == 3);
-      CHECK(strncmp(str, "999", len) == 0);
-      CHECK(field->has_dups() == false);
-      ///////////////////////////////////////
-    }
-  }
-}
-
-#include "HttpSessionManager.h"
-HttpSessionManager httpSessionManager;
-StatPagesManager statPagesManager;
\ No newline at end of file

Reply via email to