message: watermark_buffer_test: Break up contiguous memory allocation to avoid bad alloc exception
  Running this test in CI on Windows we have seen bad alloc exceptions, to
  combat this and reduce memory overhead, break up large string allocation
  into smaller segments.
diff: @@ -431,19 +431,22 @@ TEST_F(WatermarkBufferTest, OverflowWatermarkDisabledOnVeryHighValue) {
  // Make sure the overflow threshold will be above std::numeric_limits<uint32_t>::max()
  Runtime::LoaderSingleton::getExisting()->mergeValues({{"envoy.buffer.overflow_multiplier", "3"}});
  - buffer1.setWatermarks((std::numeric_limits<uint32_t>::max() / 3) + 4);
  -
  - // Add 2 halves instead of full uint32_t::max to get around std::bad_alloc exception
  - const uint32_t half_max = std::numeric_limits<uint32_t>::max() / 2;
  - const std::string half_max_str = std::string(half_max, 'a');
  - buffer1.add(half_max_str.data(), half_max);
  - buffer1.add(half_max_str.data(), half_max);
  + buffer1.setWatermarks((std::numeric_limits<uint32_t>::max() / 3) + 1);
  +
  + // Add many segments instead of full uint32_t::max to get around std::bad_alloc exception
  + const uint32_t segment_denominator = 128;
  + const uint32_t big_segment_len = std::numeric_limits<uint32_t>::max() / segment_denominator + 1;
  + const std::string big_segment_str = std::string(big_segment_len, 'a');
  + for (uint32_t i = 0; i < segment_denominator; ++i) {
  + buffer1.add(big_segment_str.data(), big_segment_len);
  + }
  EXPECT_EQ(1, high_watermark_buffer1);
  EXPECT_EQ(0, overflow_watermark_buffer1);
  buffer1.add(TEN_BYTES, 10);
  EXPECT_EQ(1, high_watermark_buffer1);
  EXPECT_EQ(0, overflow_watermark_buffer1);
  - EXPECT_EQ(2 * half_max + static_cast<uint64_t>(10), buffer1.length());
  + EXPECT_EQ(static_cast<uint64_t>(segment_denominator) * big_segment_len + 10, buffer1.length());
  + EXPECT_GT(buffer1.length(), std::numeric_limits<uint32_t>::max());
  #endif
  }
  