Skip to content

Commit c476aca

Browse files
committed
cc userver: use gmock matchers instead of string find + npos
commit_hash:ea65472b0a3a439cfb1bb0821e41964ebf851a13
1 parent a52e995 commit c476aca

20 files changed

Lines changed: 117 additions & 80 deletions

File tree

chaotic/integration_tests/tests/render/all_of.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include <userver/formats/json/inline.hpp>
22
#include <userver/utest/assert_macros.hpp>
33

4+
#include <gmock/gmock.h>
5+
46
#include <userver/chaotic/exception.hpp>
57
#include <userver/formats/json/serialize.hpp>
68
#include <userver/formats/json/value_builder.hpp>
@@ -161,7 +163,7 @@ TEST(Simple, AllOfOneOf) {
161163
std::get<1>(oneof).type = "broken";
162164
EXPECT_EQ(std::get<1>(oneof).type, "broken");
163165
EXPECT_EQ(TestToJsonString(obj), json);
164-
EXPECT_NE(ToJsonString(obj).find("\"type\""), std::string::npos) << "No 'type'";
166+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"type\"")) << "No 'type'";
165167
EXPECT_EQ(ToJsonString(obj).find("\"type\""), ToJsonString(obj).rfind("\"type\"")) << "Multiple 'type's";
166168
}*/
167169

chaotic/integration_tests/tests/render/one_of.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include <userver/formats/json/inline.hpp>
22
#include <userver/utest/assert_macros.hpp>
33

4+
#include <gmock/gmock.h>
5+
46
#include <userver/chaotic/exception.hpp>
57
#include <userver/formats/json/serialize.hpp>
68
#include <userver/formats/json/value_builder.hpp>
@@ -95,7 +97,7 @@ TEST(Simple, OneOfWithDiscriminator) {
9597
EXPECT_EQ(std::get<0>(obj.oneof.value()).foo, 42);
9698
EXPECT_EQ(TestToJsonString(obj), json);
9799
EXPECT_EQ(TestWriteToStream(obj), json);
98-
EXPECT_NE(ToJsonString(obj).find("\"type\""), std::string::npos) << "No 'type'";
100+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"type\"")) << "No 'type'";
99101
EXPECT_EQ(ToJsonString(obj).find("\"type\""), ToJsonString(obj).rfind("\"type\"")) << "Multiple 'type's";
100102

101103
EXPECT_EQ(TestDomSerializer(obj), json);
@@ -104,7 +106,7 @@ TEST(Simple, OneOfWithDiscriminator) {
104106
EXPECT_EQ(std::get<0>(obj.oneof.value()).type, "incorrect");
105107
EXPECT_EQ(TestDomSerializer(obj), json);
106108
EXPECT_EQ(TestToJsonString(obj), json);
107-
EXPECT_NE(ToJsonString(obj).find("\"type\""), std::string::npos) << "No 'type'";
109+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"type\"")) << "No 'type'";
108110
EXPECT_EQ(ToJsonString(obj).find("\"type\""), ToJsonString(obj).rfind("\"type\"")) << "Multiple 'type's";
109111
}
110112

@@ -114,7 +116,7 @@ TEST(Simple, OneOfWithDiscriminatorSax) {
114116
EXPECT_EQ(std::get<0>(obj.oneof.value()).type, "ObjectFoo");
115117
EXPECT_EQ(std::get<0>(obj.oneof.value()).foo, 42);
116118
EXPECT_EQ(TestToJsonString(obj), json);
117-
EXPECT_NE(ToJsonString(obj).find("\"type\""), std::string::npos) << "No 'type'";
119+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"type\"")) << "No 'type'";
118120
EXPECT_EQ(ToJsonString(obj).find("\"type\""), ToJsonString(obj).rfind("\"type\"")) << "Multiple 'type's";
119121

120122
EXPECT_EQ(TestDomSerializer(obj), json);

chaotic/integration_tests/tests/render/oneofdiscriminator.cpp

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include <userver/formats/json/inline.hpp>
22
#include <userver/utest/assert_macros.hpp>
33

4+
#include <gmock/gmock.h>
5+
46
#include <userver/chaotic/exception.hpp>
57
#include <userver/formats/json/serialize.hpp>
68
#include <userver/formats/json/value_builder.hpp>
@@ -48,7 +50,7 @@ TEST(Simple, OneOfWithDiscriminator2) {
4850
EXPECT_EQ(std::get<0>(obj.foo.value()).extra["additional"].As<int>(), 14);
4951
EXPECT_EQ(TestToJsonString(obj), json);
5052
EXPECT_EQ(TestWriteToStream(obj), json);
51-
EXPECT_NE(ToJsonString(obj).find("\"type\""), std::string::npos) << "No 'type'";
53+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"type\"")) << "No 'type'";
5254
EXPECT_EQ(ToJsonString(obj).find("\"type\""), ToJsonString(obj).rfind("\"type\"")) << "Multiple 'type's";
5355

5456
EXPECT_EQ(TestDomSerializer(obj), json);
@@ -57,7 +59,7 @@ TEST(Simple, OneOfWithDiscriminator2) {
5759
EXPECT_EQ(std::get<0>(obj.foo.value()).type, "incorrect");
5860
EXPECT_EQ(TestDomSerializer(obj), json);
5961
EXPECT_EQ(TestToJsonString(obj), json);
60-
EXPECT_NE(ToJsonString(obj).find("\"type\""), std::string::npos) << "No 'type'";
62+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"type\"")) << "No 'type'";
6163
EXPECT_EQ(ToJsonString(obj).find("\"type\""), ToJsonString(obj).rfind("\"type\"")) << "Multiple 'type's";
6264
}
6365

@@ -69,7 +71,7 @@ TEST(Simple, OneOfWithDiscriminator3) {
6971
EXPECT_EQ(std::get<1>(obj.foo.value()).b_prop, 42);
7072
EXPECT_EQ(std::get<1>(obj.foo.value()).extra["additional"].As<int>(), 14);
7173
EXPECT_EQ(TestToJsonString(obj), json);
72-
EXPECT_NE(ToJsonString(obj).find("\"type\""), std::string::npos) << "No 'type'";
74+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"type\"")) << "No 'type'";
7375
EXPECT_EQ(ToJsonString(obj).find("\"type\""), ToJsonString(obj).rfind("\"type\"")) << "Multiple 'type's";
7476

7577
EXPECT_EQ(TestDomSerializer(obj), json);
@@ -78,7 +80,7 @@ TEST(Simple, OneOfWithDiscriminator3) {
7880
EXPECT_EQ(std::get<1>(obj.foo.value()).type, "incorrect");
7981
EXPECT_EQ(TestDomSerializer(obj), json);
8082
EXPECT_EQ(TestToJsonString(obj), json);
81-
EXPECT_NE(ToJsonString(obj).find("\"type\""), std::string::npos) << "No 'type'";
83+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"type\"")) << "No 'type'";
8284
EXPECT_EQ(ToJsonString(obj).find("\"type\""), ToJsonString(obj).rfind("\"type\"")) << "Multiple 'type's";
8385
}
8486

@@ -87,7 +89,7 @@ TEST(Simple, OneOfWithDiscriminator4) {
8789
auto obj = json.As<ns::IntegerOneOfDiscriminator>();
8890
EXPECT_EQ(std::get<0>(obj.foo.value()).version, 42);
8991
EXPECT_EQ(TestToJsonString(obj), json);
90-
EXPECT_NE(ToJsonString(obj).find("\"version\""), std::string::npos) << "No 'version'";
92+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"version\"")) << "No 'version'";
9193
EXPECT_EQ(ToJsonString(obj).find("\"version\""), ToJsonString(obj).rfind("\"version\"")) << "Multiple 'version's";
9294

9395
EXPECT_EQ(TestDomSerializer(obj), json);
@@ -96,7 +98,7 @@ TEST(Simple, OneOfWithDiscriminator4) {
9698
EXPECT_EQ(std::get<0>(obj.foo.value()).version, 777);
9799
EXPECT_EQ(TestDomSerializer(obj), json);
98100
EXPECT_EQ(TestToJsonString(obj), json);
99-
EXPECT_NE(ToJsonString(obj).find("\"version\""), std::string::npos) << "No 'version'";
101+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"version\"")) << "No 'version'";
100102
EXPECT_EQ(ToJsonString(obj).find("\"version\""), ToJsonString(obj).rfind("\"version\"")) << "Multiple 'version's";
101103
}
102104

@@ -105,7 +107,7 @@ TEST(Simple, OneOfWithDiscriminator5) {
105107
auto obj = json.As<ns::IntegerOneOfDiscriminator>();
106108
EXPECT_EQ(std::get<1>(obj.foo.value()).version, 52);
107109
EXPECT_EQ(TestToJsonString(obj), json);
108-
EXPECT_NE(ToJsonString(obj).find("\"version\""), std::string::npos) << "No 'version'";
110+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"version\"")) << "No 'version'";
109111
EXPECT_EQ(ToJsonString(obj).find("\"version\""), ToJsonString(obj).rfind("\"version\"")) << "Multiple 'version's";
110112

111113
EXPECT_EQ(TestDomSerializer(obj), json);
@@ -114,7 +116,7 @@ TEST(Simple, OneOfWithDiscriminator5) {
114116
EXPECT_EQ(std::get<1>(obj.foo.value()).version, 777);
115117
EXPECT_EQ(TestDomSerializer(obj), json);
116118
EXPECT_EQ(TestToJsonString(obj), json);
117-
EXPECT_NE(ToJsonString(obj).find("\"version\""), std::string::npos) << "No 'version'";
119+
EXPECT_THAT(ToJsonString(obj), testing::HasSubstr("\"version\"")) << "No 'version'";
118120
EXPECT_EQ(ToJsonString(obj).find("\"version\""), ToJsonString(obj).rfind("\"version\"")) << "Multiple 'version's";
119121
}
120122

core/src/clients/http/client_test.cpp

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ struct ComplexStatusValidateCallback {
274274
HttpResponse PutValidateCallback(const HttpRequest& request) {
275275
LOG_INFO() << "HTTP Server receive: " << request;
276276

277-
EXPECT_NE(request.find("PUT"), std::string::npos) << "PUT request has no PUT in headers: " << request;
277+
EXPECT_THAT(request, testing::HasSubstr("PUT")) << "PUT request has no PUT in headers: " << request;
278278

279279
return {
280280
"HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Length: "
@@ -322,8 +322,7 @@ std::string TryGetHeader(const HttpRequest& request, std::string_view header) {
322322
if (first_pos == std::string::npos) {
323323
return {};
324324
}
325-
const auto second_pos = request.find(header, first_pos + header.length());
326-
EXPECT_EQ(second_pos, std::string::npos)
325+
EXPECT_EQ(request.find(header, first_pos + header.length()), std::string::npos)
327326
<< "Header `" << header << "` exists more than once in request: " << request;
328327

329328
auto values_begin_pos = request.find(':', first_pos + header.length()) + 1;
@@ -335,8 +334,8 @@ std::string TryGetHeader(const HttpRequest& request, std::string_view header) {
335334
}
336335

337336
std::string AssertHeader(const HttpRequest& request, std::string_view header) {
338-
const auto first_pos = request.find(header);
339-
EXPECT_NE(first_pos, std::string::npos) << "Failed to find header `" << header << "` in request: " << request;
337+
EXPECT_THAT(request, testing::HasSubstr(header))
338+
<< "Failed to find header `" << header << "` in request: " << request;
340339

341340
return TryGetHeader(request, header);
342341
}
@@ -403,16 +402,30 @@ struct CheckCookie {
403402
const std::set<std::string> expected_cookies;
404403

405404
HttpResponse operator()(const HttpRequest& request) {
405+
static const HttpResponse kOkResponse{
406+
"HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Length: 0\r\n\r\n",
407+
HttpResponse::kWriteAndClose
408+
};
409+
406410
const auto header_pos = request.find("Cookie:");
407-
EXPECT_NE(header_pos, std::string::npos) << "Failed to find 'Cookie' header in request: " << request;
411+
if (header_pos == std::string::npos) {
412+
ADD_FAILURE() << "Failed to find 'Cookie' header in request: " << request;
413+
return kOkResponse;
414+
}
408415

409416
EXPECT_EQ(request.find("Cookie:", header_pos + 1), std::string::npos)
410417
<< "Duplicate 'Cookie' header in request: " << request;
411418

412419
const auto value_start = request.find_first_not_of(' ', header_pos + 7);
413-
EXPECT_NE(value_start, std::string::npos) << "Malformed request: " << request;
420+
if (value_start == std::string::npos) {
421+
ADD_FAILURE() << "Malformed request: " << request;
422+
return kOkResponse;
423+
}
414424
const auto value_end = request.find("\r\n", value_start);
415-
EXPECT_NE(value_end, std::string::npos) << "Malformed request: " << request;
425+
if (value_end == std::string::npos) {
426+
ADD_FAILURE() << "Malformed request: " << request;
427+
return kOkResponse;
428+
}
416429

417430
auto value = request.substr(value_start, value_end - value_start);
418431
std::vector<std::string> received_cookies;
@@ -425,7 +438,7 @@ struct CheckCookie {
425438
}
426439
EXPECT_TRUE(unseen_cookies.empty()) << "Not all cookies received";
427440

428-
return {"HTTP/1.1 200 OK\r\nConnection: close\r\nContent-Length: 0\r\n\r\n", HttpResponse::kWriteAndClose};
441+
return kOkResponse;
429442
}
430443
};
431444

@@ -1203,7 +1216,7 @@ UTEST(HttpClient, GetWithBody) {
12031216
auto http_client_ptr = utest::CreateHttpClient();
12041217

12051218
const utest::SimpleServer http_server_final{[](const HttpRequest& request) -> HttpResponse {
1206-
EXPECT_NE(request.find("get_body_data"), std::string::npos);
1219+
EXPECT_THAT(request, testing::HasSubstr("get_body_data"));
12071220
return {
12081221
fmt::format(clients::http::kResponse200WithHeaderPattern, "xxx: good"),
12091222
HttpResponse::kWriteAndClose,

core/src/clients/http/form_test.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#include <userver/clients/http/form.hpp>
22

3+
#include <gmock/gmock.h>
4+
35
#include <userver/clients/http/client.hpp>
46
#include <userver/http/http_version.hpp>
57
#include <userver/utest/http_client.hpp>
@@ -57,20 +59,20 @@ void ValidateFilesend(
5759
key = "name=\"" + key + "\"";
5860
filename = "filename=\"" + filename + "\"";
5961

60-
const auto key_pos = request.find(key);
61-
EXPECT_NE(key_pos, std::string::npos) << "Found no '" << key << "' in: " << request;
62+
EXPECT_THAT(request, testing::HasSubstr(key)) << "Found no '" << key << "' in: " << request;
6263

6364
const auto test_data_pos = request.find(test_data);
64-
EXPECT_NE(test_data_pos, std::string::npos) << "failed to find '" << test_data << "' in:" << request;
65+
EXPECT_THAT(request, testing::HasSubstr(test_data)) << "failed to find '" << test_data << "' in:" << request;
6566

6667
const auto multipart_pos = request.find("multipart/form-data");
67-
EXPECT_NE(multipart_pos, std::string::npos) << "failed to find 'multipart/form-data' in:" << request;
68+
EXPECT_THAT(request, testing::HasSubstr("multipart/form-data"))
69+
<< "failed to find 'multipart/form-data' in:" << request;
6870

6971
const auto filename_pos = request.find(filename);
70-
EXPECT_NE(filename_pos, std::string::npos) << "failed to find '" << filename << "' in:" << request;
72+
EXPECT_THAT(request, testing::HasSubstr(filename)) << "failed to find '" << filename << "' in:" << request;
7173

7274
const auto content_type_pos = request.find(content_type);
73-
EXPECT_NE(content_type_pos, std::string::npos) << "failed to find 'image/jpeg' in:" << request;
75+
EXPECT_THAT(request, testing::HasSubstr(content_type)) << "failed to find 'image/jpeg' in:" << request;
7476

7577
EXPECT_LT(multipart_pos, filename_pos) << "Filename appears before 'multipart/form-data': " << request;
7678

core/src/engine/io/socket_test.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <userver/utest/utest.hpp>
22

33
#include <arpa/inet.h>
4+
#include <gmock/gmock.h>
45
#include <gtest/gtest.h>
56
#include <sys/socket.h>
67
#include <unistd.h>
@@ -346,7 +347,7 @@ UTEST(Socket, ErrorPeername) {
346347
error_value == std::errc::wrong_protocol_type || error_value == std::errc::broken_pipe ||
347348
error_value == std::errc::connection_reset || error_value == std::errc::connection_aborted
348349
);
349-
EXPECT_NE(std::string_view{ex.what()}.find(fmt::to_string(listener.addr)), std::string_view::npos);
350+
EXPECT_THAT(std::string_view{ex.what()}, testing::HasSubstr(fmt::to_string(listener.addr)));
350351
}
351352
}
352353

@@ -523,7 +524,7 @@ UTEST(Socket, UdpIpMreqIPv4) {
523524

524525
EXPECT_FALSE(result); // not expecting any input
525526
} catch (const std::exception& e) {
526-
EXPECT_NE(std::string_view{e.what()}.find("No such device"), std::string_view::npos)
527+
EXPECT_THAT(std::string_view{e.what()}, testing::HasSubstr("No such device"))
527528
<< "Error not related to host support of IPv4: " << e.what();
528529
}
529530
}

core/src/logging/log_message_test.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ std::string ToStringViaStreams(const T& value) {
3535

3636
void CheckModulePath(std::string_view message, std::string_view expected) {
3737
auto module_pos = message.find("module=");
38-
ASSERT_NE(std::string::npos, module_pos) << "no module logged";
38+
ASSERT_THAT(message, testing::HasSubstr("module=")) << "no module logged";
3939
auto path_pos = message.find(std::string{expected} + ':', module_pos);
4040
auto delim_pos = message.find('\t', module_pos);
4141
ASSERT_LT(path_pos, delim_pos)
@@ -372,10 +372,10 @@ TEST_F(LoggingTest, LogExtraTAXICOMMON1362) {
372372
EXPECT_EQ(result.back(), '\n');
373373
result.pop_back();
374374

375-
EXPECT_TRUE(result.find(tskv_test::ascii_part) != std::string::npos) << "Result: " << result;
375+
EXPECT_THAT(result, testing::HasSubstr(tskv_test::ascii_part)) << "Result: " << result;
376376

377377
const auto png_pos = result.find("PNG");
378-
EXPECT_TRUE(png_pos != std::string::npos) << "Result: " << result;
378+
ASSERT_THAT(result, testing::HasSubstr("PNG")) << "Result: " << result;
379379

380380
EXPECT_EQ(0, std::count(result.begin() + png_pos, result.end(), '\n')) << "Result: " << result;
381381
EXPECT_EQ(0, std::count(result.begin() + png_pos, result.end(), '\t')) << "Result: " << result;
@@ -391,10 +391,10 @@ TEST_F(LoggingTest, TAXICOMMON1362) {
391391
const std::string result = GetStreamString();
392392

393393
const auto ascii_pos = result.find(tskv_test::ascii_part);
394-
EXPECT_TRUE(ascii_pos != std::string::npos) << "Result: " << result;
394+
ASSERT_THAT(result, testing::HasSubstr(tskv_test::ascii_part)) << "Result: " << result;
395395

396396
const auto body_pos = result.find("body=");
397-
EXPECT_TRUE(body_pos != std::string::npos) << "Result: " << result;
397+
ASSERT_THAT(result, testing::HasSubstr("body=")) << "Result: " << result;
398398

399399
EXPECT_EQ(result.substr(body_pos, ascii_pos - body_pos).find_first_of({'\n', '\t', '\0'}), std::string::npos)
400400
<< "Result: " << result;

core/src/logging/log_test.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <gmock/gmock.h>
12
#include <gtest/gtest.h>
23

34
#include <optional>
@@ -46,9 +47,9 @@ TEST_F(LoggingTest, LogExtraExtendType) {
4647

4748
logging::LogFlush();
4849
const auto log_contents = GetStreamString();
49-
EXPECT_NE(log_contents.find("key1=value1"), std::string::npos);
50-
EXPECT_NE(log_contents.find("key1=value2"), std::string::npos);
51-
EXPECT_EQ(log_contents.find("key1=value3"), std::string::npos);
50+
EXPECT_THAT(log_contents, testing::HasSubstr("key1=value1"));
51+
EXPECT_THAT(log_contents, testing::HasSubstr("key1=value2"));
52+
EXPECT_THAT(log_contents, testing::Not(testing::HasSubstr("key1=value3")));
5253
}
5354

5455
TEST_F(LoggingTest, MultipleFlushes) {
@@ -62,8 +63,8 @@ TEST_F(LoggingTest, MultipleFlushes) {
6263
LOG_TRACE() << "some message2";
6364

6465
const auto log_contents = GetStreamString();
65-
EXPECT_NE(log_contents.find("text=some message1"), std::string::npos);
66-
EXPECT_NE(log_contents.find("text=some message2"), std::string::npos);
66+
EXPECT_THAT(log_contents, testing::HasSubstr("text=some message1"));
67+
EXPECT_THAT(log_contents, testing::HasSubstr("text=some message2"));
6768
}
6869

6970
TEST_F(LoggingTest, ChronoDuration) {

core/src/server/http/http_response_cookie_test.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#include <gmock/gmock.h>
2+
13
#include <userver/utest/utest.hpp>
24

35
#include <sys/param.h>
@@ -150,7 +152,7 @@ TEST(HttpCookie, AttributeValidation) {
150152
UEXPECT_NO_THROW(cookie.SetPath("/some/path"));
151153
UEXPECT_NO_THROW(cookie.SetDomain("sub.domain.test"));
152154
UEXPECT_NO_THROW(cookie.SetSameSite("None"));
153-
EXPECT_EQ(cookie.ToString().find("\r\n"), std::string::npos);
155+
EXPECT_THAT(cookie.ToString(), testing::Not(testing::HasSubstr("\r\n")));
154156
}
155157

156158
TEST(HttpCookie, FromString) {

core/src/server/http/http_response_test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ UTEST(HttpResponse, Smoke) {
3838
constexpr std::string_view expected_header = "HTTP/1.1 200 OK\r\n";
3939
ASSERT_EQ(reply.substr(0, expected_header.size()), expected_header);
4040
const auto expected_content_length = fmt::format("\r\n{}: {}\r\n", http::headers::kContentLength, kBody.size());
41-
EXPECT_TRUE(reply.find(expected_content_length) != std::string_view::npos);
41+
EXPECT_THAT(reply, testing::HasSubstr(expected_content_length));
4242

4343
EXPECT_EQ(reply.substr(reply.size() - 4 - kBody.size()), fmt::format("\r\n\r\n{}", kBody));
4444
}
@@ -104,7 +104,7 @@ UTEST_P(HttpResponseBody, ForbiddenBody) {
104104
const std::string_view reply{buffer.data(), reply_size};
105105
const std::string expected_header = "HTTP/1.1 " + std::to_string(GetParam()) + " ";
106106
ASSERT_EQ(reply.substr(0, expected_header.size()), expected_header);
107-
EXPECT_TRUE(reply.find(http::headers::kContentLength) == std::string_view::npos);
107+
EXPECT_THAT(reply, testing::Not(testing::HasSubstr(http::headers::kContentLength)));
108108
EXPECT_EQ(reply.substr(reply.size() - 4), "\r\n\r\n");
109109
}
110110

0 commit comments

Comments
 (0)